理解MapKit坐标系的困难

问题描述 投票:0回答:2

我阅读了苹果文档

“地图点是墨卡托地图投影上的 x 和 y 值” 点是与 UIView 的坐标系相关联的图形单位

Point 和 MKPoint 在逻辑上有什么区别? 我显然需要 CGPoint 在屏幕上显示一些东西。 那么为什么 MapKit 需要 MKMapPoint 呢?

ios ios7 mapkit
2个回答
3
投票

事实上

CGPoint
MKMapPoint
结构体都恰好存储了两个名为
x
y
的浮点值,这一事实是无关紧要的。

它们被赋予不同的名称,因为它们在逻辑上处理不同的坐标系、变换、范围和比例。

二维世界地图需要一个大型、固定的坐标系,无论屏幕上当前显示什么部分,都可以将纬度和经度转换为地图上的固定点。

MKMapPoint
值的范围很大,因为它们需要以足够高的分辨率(远远超出屏幕尺寸)表示世界坐标。

但是,您并不完全需要关心 MKMapPoint 的实际

values
。 有时,您可能需要将
CLLocationCoordinate2D
转换为
MKMapPoint
(或相反),但您不需要担心这些值,也不应该存储它们(文档建议不要这样做,因为内部投影将纬度和经度转换为 2D 投影的计算可能会在 iOS 版本之间发生变化)。

您使用

MKMapPoint
仅基于您正在处理地图的 2D 投影独立于设备的屏幕尺寸或当前显示的地图部分。


我显然需要 CGPoint 在屏幕上显示一些东西。

是的,但是在添加注释或叠加层时,您通常会处理

CLLocationCoordinate2D

 值并让地图视图根据需要进行转换。


2
投票
MKMapPoint 是一个地理点 - 投影转换的纬度和经度。在屏幕上,您有一些包含地图视图的有界视图。并且您需要将您的地理位置(坐标)转换为mapView上的CGPoint

CLLocationCoordinate2D coord; coord.latitude = location.latitude.doubleValue; coord.longitude = location.longitude.doubleValue; MKMapPoint point = MKMapPointForCoordinate(coord); CGPoint cgpoint = [mapView convertCoordinate:coord toPointToView:mapView];
    
© www.soinside.com 2019 - 2024. All rights reserved.