Tji*_*irp 2 mkmapview cllocation ios
在基于位置的应用程序中,我们使用MKMapPoints来存储位置,例如当前用户位置.
当我们尝试在MKMapView上使用此位置时,要设置最初显示的区域(放大用户),我们将其转换为CLLocationCoordinate2D
有一种方便的方法:namenly:MKCoordinateForMapPoint,但在测试期间,这给出了奇怪的结果.
MKMapPoint mapPoint = MKMapPointMake(51.96, 6.3); // My area ;)
CLLocationCoordinate2D automagicCoordinate = MKCoordinateForMapPoint(mapPoint);
CLLocationCoordinate2D manualCoordinate = CLLocationCoordinate2DMake(mapPoint.x, mapPoint.y);
Run Code Online (Sandbox Code Playgroud)
我希望automagicCoordinate和manualCoordinate都是完全一样的.但是当我在调试器中检查它时,我得到以下结果:
automagicCoordinate.latitude = (CLLocationDegrees) 85.05
automagicCoordinate.longitude = (CLLocationDegrees) -179.99
manualCoordinate.latitude = (CLLocationDegrees) 51.96
manualCoordinate.longitude = (CLLocationDegrees) 6.3
Run Code Online (Sandbox Code Playgroud)
为什么使用该方法创建的坐标不正确?
小智 7
一个MKMapPoint不是纬度和经度.如果是,您将不需要将其"转换"为坐标的功能.
正如位置感知编程指南在" 理解地图几何"部分中所述:
地图点是墨卡托地图投影上的x和y值.地图点用于许多与地图相关的计算而不是地图坐标,因为它们简化了计算中涉及的数学.
MKMapPoint的文档更清晰:
如果将地球的曲面投影到平面上,您得到的是地图的二维版本,其中经度线看起来是平行的....
地图点的实际单位与用于绘制MKMapView内容的基础单位相关联,但您永远不需要直接担心这些单位....
将与地图相关的数据保存到文件时,应始终保存坐标值(纬度和经度)而不是地图点.
地图点51.96, 6.3对应于地图投影左上角的坐标.如果您想使用坐标(纬度,经度),请使用a CLLocationCoordinate2D来避免混淆.
(从技术上讲,您可以使用MKMapPoint结构来存储坐标值,但不需要将它们转换为坐标,错误的类型用法只会导致混淆.)
| 归档时间: |
|
| 查看次数: |
1998 次 |
| 最近记录: |