我想计算一个对角线距离为30 as的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公里的对角线和与地图相同的中心?
发布于 2017-04-08 21:33:30
我最终使用了this around库,它实现了欧几里得算法,并允许您在坐标周围扩展边界框。这正是我要找的!
https://stackoverflow.com/questions/43293857
复制相似问题