用固定的对角线距离

时间:2017-04-08 12:03:10

标签: ios swift mkmapview mapkit core-location

我想计算一个对角线距离为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公里的对角线以及与地图相同的中心区域?

1 个答案:

答案 0 :(得分:0)

我最终使用了this真棒库,它实现了Euclid算法,并允许您扩展围绕坐标的边界框。正是我在寻找的东西!