我想计算一个对角线距离为30km的MKCoordinateRegion,该区域的比例应该与地图框架的比例相同。 我的方法看起来像这样:
let alpha = atan(mapView.frame.width / mapView.frame.height).radiansToDegrees
let beta = 90 - alpha
let spanDiagonal = 30_000.0
let spanWidth = spanDiagonal * Double(cos(beta.degreesToRadians))
let spanHeight = sqrt(spanDiagonal * spanDiagonal + spanWidth * spanWidth)
let region = MKCoordinateRegionMakeWithDistance(mapView.centerCoordinate, spanWidth, spanHeight)
let tlLat = region.center.latitude + (region.span.latitudeDelta / 2.0)
let tlLong = region.center.longitude - (region.span.longitudeDelta / 2.0)
let brLat = region.center.latitude - (region.span.latitudeDelta / 2.0)
let brLong = region.center.longitude + (region.span.longitudeDelta / 2.0)
let tl = CLLocationCoordinate2D(latitude: tlLat, longitude: tlLong)
let br = CLLocationCoordinate2D(latitude: brLat, longitude: brLong)
print(MKMetersBetweenMapPoints(MKMapPointForCoordinate(tl), MKMapPointForCoordinate(br)))
我计算了框架的角度,然后是一个三角形,这个角度和30000的底座。这导致我认为正确的跨度高度和宽度。
我遇到的问题是该地区的对角线大约10公里。我认为造成这种情况的原因是将米转换为度数,这在某种程度上是错误的。
您是否看到我的方法存在问题,或者您是否知道有更好的方法来计算具有相同比例的帧,30公里的对角线以及与地图相同的中心区域?