IOS Mapkit 或旅行商问题的核心定位解决方案
IOS Mapkit or Core Location Solution for Traveling Salesman Problem
Google Directions 有一个 api 来解决 Traveling Salesman Problem——计算一组点上的最短路线——但要收费。在 Apple 世界中,Polyline 和 MKRoute 似乎很有前途,但我在文档中找不到任何内容表明它们支持两个以上的点——开始和目标。是否有人使用 MapKit and/or Core Location 解决了 TSP 问题?似乎可以使用类似以下方法计算节点之间所有边的时间距离:
request.source = startLocation
request.destination = destLocation
request.requestsAlternateRoutes = true
request.transportType = .automobile
let directions = MKDirections(request: request)
directions.calculate { (directions, error) in
if var routeResponse = directions?.routes {
routeResponse.sort(by: {[=11=].expectedTravelTime <
.expectedTravelTime})
let quickestRouteForSegment: MKRoute = routeResponse[0]
completion(quickestRouteForSegment.expectedTravelTime)
}
}
}
并手动开发一种算法来尝试各种可能性并选择最快的算法。但这很快就会变得复杂并且需要很多请求。只是想知道是否有人发现了一种更复杂的方法来处理它。
您将无法通过使用 Mapkit 实现您想要的,因为您将需要大量请求并且 Apple 会限制您的应用程序。坚持使用 Google 或 Mapbox,它们有用于 STP 的矩阵 api,而 Mapkit 没有。
Google Directions 有一个 api 来解决 Traveling Salesman Problem——计算一组点上的最短路线——但要收费。在 Apple 世界中,Polyline 和 MKRoute 似乎很有前途,但我在文档中找不到任何内容表明它们支持两个以上的点——开始和目标。是否有人使用 MapKit and/or Core Location 解决了 TSP 问题?似乎可以使用类似以下方法计算节点之间所有边的时间距离:
request.source = startLocation
request.destination = destLocation
request.requestsAlternateRoutes = true
request.transportType = .automobile
let directions = MKDirections(request: request)
directions.calculate { (directions, error) in
if var routeResponse = directions?.routes {
routeResponse.sort(by: {[=11=].expectedTravelTime <
.expectedTravelTime})
let quickestRouteForSegment: MKRoute = routeResponse[0]
completion(quickestRouteForSegment.expectedTravelTime)
}
}
}
并手动开发一种算法来尝试各种可能性并选择最快的算法。但这很快就会变得复杂并且需要很多请求。只是想知道是否有人发现了一种更复杂的方法来处理它。
您将无法通过使用 Mapkit 实现您想要的,因为您将需要大量请求并且 Apple 会限制您的应用程序。坚持使用 Google 或 Mapbox,它们有用于 STP 的矩阵 api,而 Mapkit 没有。