我知道几年前有人问过这个问题,但所有答案都涉及使用 Google Maps API 来解决这个问题。我想知道现在 iOS8 已经出来并且它为原生 MapKit 带来了许多改进,是否有适当的方法来解决这个问题。
基本上我在路上画了一条折线,它由许多中间点组成。
var locations = [CLLocation]()
for item in list {
locations.append(CLLocation(latitude: CLLocationDegrees(item["location"]["coordinate"]["x"].doubleValue), longitude: CLLocationDegrees(item["location"]["coordinate"]["y"].doubleValue)))
}
var coordinates = locations.map({(location: CLLocation!) -> CLLocationCoordinate2D in return location.coordinate})
var polyline = MKPolyline(coordinates: &coordinates, count: locations.count)
mapView.addOverlay(polyline)
map 上一次有 5 到 30 个点。当折线连接它们时,我或多或少地得到了这次旅行的公平代表。问题是:它不粘在路上。
所以我时不时会遇到一些“粗糙”的问题。即使我使用的是 Google Direction API,它也仅限于 8 个方向点,基本上可以为您决定如何从 A 点到达 B 点,沿途绘制平滑的多段线。此外,Directions API 限制为每 24 小时 2500 次使用。我需要做的就是将我当前的多段线调整到最近的道路
非常感谢
最佳答案
经过一番挖掘,我设法找到了这个问题的答案,尽管我不太确定它对整体性能的影响是否会让 Apple 满意,因为它发出了很多小的 MKDirectionsRequest
的。对我来说,30+ 分就很好了。
var myRoute : MKRoute?
var directionsRequest = MKDirectionsRequest()
var placemarks = [MKMapItem]()
for item in list {
var placemark = MKPlacemark(coordinate: CLLocationCoordinate2D(latitude: CLLocationDegrees(item["location"]["coordinate"]["x"].doubleValue), longitude: CLLocationDegrees(item["location"]["coordinate"]["y"].doubleValue)), addressDictionary: nil )
placemarks.append(MKMapItem(placemark: placemark))
}
directionsRequest.transportType = MKDirectionsTransportType.Automobile
for (k, item) in enumerate(placemarks) {
if k < (placemarks.count - 1) {
directionsRequest.setSource(item)
directionsRequest.setDestination(placemarks[k+1])
var directions = MKDirections(request: directionsRequest)
directions.calculateDirectionsWithCompletionHandler { (response:MKDirectionsResponse!, error: NSError!) -> Void in
if error == nil {
self.myRoute = response.routes[0] as? MKRoute
self.mapView.addOverlay(self.myRoute?.polyline)
}
}
}
}
特别感谢 Anna为我指明了正确的方向。
关于ios - 平滑 MKPolyline 跟随道路,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29935504/