MKCoordinatespan latitudedelta 和 longitudedelta 计算基于源和目的地的中心坐标

Posted

技术标签:

【中文标题】MKCoordinatespan latitudedelta 和 longitudedelta 计算基于源和目的地的中心坐标【英文标题】:MKCoordinatespan latitudedelta and longitudedelta calculation based on center coordinates of source and destination 【发布时间】:2017-04-05 13:48:40 【问题描述】:

我正在尝试在应用程序中实现从源到目的地的地图导航。我只想根据中心坐标动态计算纬度增量和经度增量。

let midLat = (self.source.coordinate.latitude + self.destination.coordinate.latitude)/2
let midLang = (self.source.coordinate.longitude + self.destination.coordinate.longitude)/2
let centerCoordinate = CLLocationCoordinate2DMake(midLat, midLang)
self.mapView.setRegion(MKCoordinateRegionMake(centerCoOrdinate, MKCoordinateSpanMake(0.09, 0.09)), animated: true)

【问题讨论】:

【参考方案1】:

首先你在计算中间位置时遇到问题,你必须使用那里提出的扩展名检查这个答案Determining Midpoint Between 2 Cooridinates

import Foundation
import MapKit
extension CLLocationCoordinate2D 
    // MARK: CLLocationCoordinate2D+MidPoint
    func middleLocationWith(location:CLLocationCoordinate2D) -> CLLocationCoordinate2D 

        let lon1 = longitude * M_PI / 180
        let lon2 = location.longitude * M_PI / 180
        let lat1 = latitude * M_PI / 180
        let lat2 = location.latitude * M_PI / 180
        let dLon = lon2 - lon1
        let x = cos(lat2) * cos(dLon)
        let y = cos(lat2) * sin(dLon)

        let lat3 = atan2( sin(lat1) + sin(lat2), sqrt((cos(lat1) + x) * (cos(lat1) + x) + y * y) )
        let lon3 = lon1 + atan2(y, cos(lat1) + x)

        let center:CLLocationCoordinate2D = CLLocationCoordinate2DMake(lat3 * 180 / M_PI, lon3 * 180 / M_PI)
        return center
    

那你就这样用吧

let middleLocation = self.source.coordinate.middleLocationWith(location: self.destination.coordinate)
self.mapView.setRegion(MKCoordinateRegionMake(middleLocation, MKCoordinateSpanMake(0.09, 0.09)), animated: true)

希望对你有帮助

【讨论】:

以上是关于MKCoordinatespan latitudedelta 和 longitudedelta 计算基于源和目的地的中心坐标的主要内容,如果未能解决你的问题,请参考以下文章

MKCoordinateSpan中的错误,表示在自我可用之前运行

MKCoordinatespan latitudedelta 和 longitudedelta 计算基于源和目的地的中心坐标

position.coords.latitude 在离子中不起作用

警告:道具类型失败:未指定必需的道具“region.latitude”

Dell Latitud 7320这款笔记本怎么样?

html JS.Geolocate.Longitude.Latitude