尝试获取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)