如何在mapkit中以像素为单位获取米?
Posted
技术标签:
【中文标题】如何在mapkit中以像素为单位获取米?【英文标题】:How to get meters in pixel in mapkit? 【发布时间】:2009-12-27 11:58:11 【问题描述】:我想测试 mapKit 并想制作自己的叠加层来显示我的位置的准确性。 如果我有一个例如 0.005 的缩放因子,我周围的圆圈必须有哪个半径(如果我的精度是例如 500m)?
得到一些帮助会很棒:)
非常感谢。
【问题讨论】:
【参考方案1】:查看MKCoordinateSpan
的文档,它是地图的region
属性的一部分。一个纬度总是大约。 111 公里,因此将latitudeDelta
转换为米,然后得到每像素的米应该很容易。对于经度值来说,它并不是那么容易,因为一个经度所覆盖的距离在 111 公里(赤道)和 0 公里(两极)之间变化。
【讨论】:
【参考方案2】:我获得每像素米的方法:
MKMapView *mapView = ...;
CLLocationCoordinate2D coordinate = ...;
MKMapRect mapRect = mapView.visibleMapRect;
CLLocationDistance metersPerMapPoint = MKMetersPerMapPointAtLatitude(coordinate.latitude);
CGFloat metersPerPixel = metersPerMapPoint * mapRect.size.width / mapView.bounds.size.width;
【讨论】:
【参考方案3】:为了补充另一个答案,一分钟的纬度差异对应于一海里:这就是海里的定义方式。因此,换算成法定英里,1 海里 = 1.1508 英里,即 6076.1 英尺或 1852 米。
当您选择经度时,地球周围的经度圈的大小会随着纬度的增加而缩小,如上一个答案所述。正确的因素是
1 minute of longitude = (1852 meters)*cos(theta),
theta 是纬度。
当然,地球不是一个完美的球体,但上面的简单计算误差永远不会超过 1%。
【讨论】:
以上是关于如何在mapkit中以像素为单位获取米?的主要内容,如果未能解决你的问题,请参考以下文章
如何在android java中以像素为单位设置ImageView的边距?