我阅读了苹果文档
“地图点是墨卡托地图投影上的 x 和 y 值” 点是与 UIView 的坐标系相关联的图形单位
Point 和 MKPoint 在逻辑上有什么区别? 我显然需要 CGPoint 在屏幕上显示一些东西。 那么为什么 MapKit 需要 MKMapPoint 呢?
事实上
CGPoint
和 MKMapPoint
结构体都恰好存储了两个名为 x
和 y
的浮点值,这一事实是无关紧要的。
它们被赋予不同的名称,因为它们在逻辑上处理不同的坐标系、变换、范围和比例。
二维世界地图需要一个大型、固定的坐标系,无论屏幕上当前显示什么部分,都可以将纬度和经度转换为地图上的固定点。
MKMapPoint
值的范围很大,因为它们需要以足够高的分辨率(远远超出屏幕尺寸)表示世界坐标。
但是,您并不完全需要关心 MKMapPoint
的实际
values。 有时,您可能需要将
CLLocationCoordinate2D
转换为 MKMapPoint
(或相反),但您不需要担心这些值,也不应该存储它们(文档建议不要这样做,因为内部投影将纬度和经度转换为 2D 投影的计算可能会在 iOS 版本之间发生变化)。
您使用
MKMapPoint
仅基于您正在处理地图的 2D 投影独立于设备的屏幕尺寸或当前显示的地图部分。
我显然需要 CGPoint 在屏幕上显示一些东西。是的,但是在添加注释或叠加层时,您通常会处理
CLLocationCoordinate2D
值并让地图视图根据需要进行转换。
CLLocationCoordinate2D coord;
coord.latitude = location.latitude.doubleValue;
coord.longitude = location.longitude.doubleValue;
MKMapPoint point = MKMapPointForCoordinate(coord);
CGPoint cgpoint = [mapView convertCoordinate:coord toPointToView:mapView];