理解MapKit坐标系的困难

时间:2014-01-13 14:59:28

标签: ios7 mapkit

我读了苹果文档

  

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

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

2 个答案:

答案 0 :(得分:2)

MKMapPoint是一个地理点 - 投射转换的纬度和经度。在屏幕上,您有一些包含mapView的有界视图。并且您需要将地理位置(坐标)转换为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];

答案 1 :(得分:2)

CGPointMKMapPoint结构碰巧存储两个名为xy的浮点值这一事实无关紧要。

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

2D世界地图需要一个大而固定的坐标系统,无论当前部分是什么,都可以将纬度和经度转换为地图上的固定点正在屏幕上显示。

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

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

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


  

我显然需要CGPoint在屏幕上显示内容。

是的但是在添加注释或叠加层时,您通常会处理CLLocationCoordinate2D值并让地图视图根据需要进行转换。