Apple Maps坐标用作MapKit的CLLocation时是否存在点位偏差
MKMapKit 标注点位偏移排查方案
按优先级从高到低排查以下问题即可解决:
- 经度符号错误(最高发诱因)
MKMapView 采用WGS-84坐标系,经度规则为东经正值、西经负值。你提到的大本钟正确坐标为北纬51.50070、西经0.12455,对应传给CLLocationCoordinate2D的经度值应为-0.12455。你当前点击获取到的经度为0.124610(无负号),实际对应东经0.1246的位置,和大本钟真实位置东西向偏差约17公里,和你描述的偏移特征完全吻合。
直接检查Firebase中存储的西经区域点位数据,补全经度的负号即可,读取后不需要做额外的数值转换。 - 标注视图锚点配置错误
如果确认坐标数值符号正确,检查自定义MKAnnotationView的centerOffset属性:默认标注的锚点在视图底部中心,正好对应真实坐标点。如果自定义标注样式时没有正确配置该属性,会导致标注视觉位置和实际坐标错位——比如标注整体向上偏移,就会出现你说的“点击标注正下方才返回对应坐标”的现象。
修正参考代码:// 假设自定义标注视图总高度为40pt,让视图底部尖端正对坐标点 annotationView.centerOffset = CGPoint(x: 0, y: -20) - 坐标系混用问题
排查是否传入了非WGS-84坐标系的点位:不要将GCJ-02(火星坐标)、BD-09(百度坐标)格式的坐标直接传给MKMapView,这类偏移仅会出现在国内点位,英国区域无需优先排查该问题。
另外用UIViewRepresentable包装MKMapView时,不要手动做坐标点的投影转换,直接调用MKMapView自带的setRegion(_:animated:)方法设置显示区域即可。
内容的提问来源于stack exchange,提问作者user1465078
相关产品推荐
相关产品推荐

