【发布时间】:2019-10-24 12:12:15
【问题描述】:
我知道几年前有人问过这个问题,但所有答案都涉及使用 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)
地图上曾经有 5 到 30 个点。当折线将它们连接起来时,我或多或少地得到了旅行的公平表示。问题是:它不会粘在路上。
所以我时不时会出现“粗糙”的边缘。即使我使用的是 Google Direction API,它也仅限于 8 路点,并且基本上会为您决定如何从 A 点到达 B 点,沿途绘制平滑的折线。此外,Directions API 限制为每 24 小时 2500 次使用。我需要做的就是将我当前的折线调整到最近的道路
非常感谢
【问题讨论】:
-
您目前从哪里获得道路坐标 (
list)? iOS 8 于 7 个月前发布,我不确定您所说的“它为原生 MapKit 带来了许多改进”指的是什么。你知道 iOS 6 中添加的 MKDirectionsRequest 类吗? -
@Anna
list来自 JSON 响应。它是从 A 点到 B 点的中间巴士站列表。因此,指定这些点对于遵循巴士路线至关重要。看起来MKDirectionsRequest类似于 Google Directions,它自行计算从 A 点到 B 点的路线。看起来它不允许您自己指定中间点......除非我可以用所有 30 个点并在它们之间执行迷你方向计算:) -
格式无关紧要。 JSON 响应来自哪里?我的观点是:数据的来源是什么?如果该来源不使用与 Apple 相同的路线图,则无法避免(MapKit 无法直接访问道路数据)。解决方法可能是您建议的(从您的每个坐标之间的 MapKit 获取方向)。但是,如果您的任何坐标不在 MapKit 道路上,您就会遇到同样的问题。
-
我听到了。谢谢。它来自与 Apple 无关的 REST JSON API 数据源。我想我会尝试其他解决方案,或者让我的多边形保持原样..
-
谢谢@安娜!问题解决了
标签: ios xcode swift mapkit mkpolyline