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 在离子中不起作用