尝试获取iOS MKCoordinateSpan的跨度大小(以米为单位)
当我需要创buildMKCoordinateRegion
,我执行以下操作:
var region = MKCoordinateRegion .FromDistance(coordinate, RegionSizeInMeters, RegionSizeInMeters);
非常简单 – 完美的作品。
现在我想存储当前区域跨度的值。 当我看着这个区域region.Span
值,它是一个MKCoordinateSpan
,它有两个属性:
public double LatitudeDelta; public double LongitudeDelta;
如何将LatitudeDelta
值转换为latitudinalMeters
? (所以我可以使用上面的方法重新创build我的区域(稍后)…
我可以看到你已经有了地图的区域。 它不仅包含经纬度,而且也是该地区的中心点。 如图所示,您可以计算以米为单位的距离:
1:获得区域跨度(区域有多大/纬度)
MKCoordinateSpan span = region.span;
2:获取区域中心(经纬度坐标)
CLLocationCoordinate2D loc = region.center;
3:根据中心位置创build两个位置(loc1和loc2,南北),并计算它们之间的距离(以米为单位)
//get latitude in meters CLLocation *loc1 = [[CLLocation alloc] initWithLatitude:(center.latitude - span.latitudeDelta * 0.5) longitude:center.longitude]; CLLocation *loc2 = [[CLLocation alloc] initWithLatitude:(center.latitude + span.latitudeDelta * 0.5) longitude:center.longitude]; int metersLatitude = [loc1 distanceFromLocation:loc2];
4:根据中心位置创build两个位置(loc3和loc4,西 – 东),并计算它们之间的距离(以米为单位)
//get longitude in meters CLLocation *loc3 = [[CLLocation alloc] initWithLatitude:center.latitude longitude:(center.longitude - span.longitudeDelta * 0.5)]; CLLocation *loc4 = [[CLLocation alloc] initWithLatitude:center.latitude longitude:(center.longitude + span.longitudeDelta * 0.5)]; int metersLongitude = [loc3 distanceFromLocation:loc4];
Hannes解决scheme的Swift实现:
let span = mapView.region.span let center = mapView.region.center let loc1 = CLLocation(latitude: center.latitude - span.latitudeDelta * 0.5, longitude: center.longitude) let loc2 = CLLocation(latitude: center.latitude + span.latitudeDelta * 0.5, longitude: center.longitude) let loc3 = CLLocation(latitude: center.latitude, longitude: center.longitude - span.longitudeDelta * 0.5) let loc4 = CLLocation(latitude: center.latitude, longitude: center.longitude + span.longitudeDelta * 0.5) let metersInLatitude = loc1.distanceFromLocation(loc2) let metersInLongitude = loc3.distanceFromLocation(loc4)