IOS Mapkit или базовое решение для решения проблемы коммивояжера - PullRequest
0 голосов
/ 18 декабря 2018

В Google Directions есть API для решения задачи для коммивояжера - рассчитать кратчайший маршрут по набору точек, но за него нужно заплатить.В мире Apple, Polyline и MKRoute кажутся многообещающими, но я не могу найти ничего в документации, чтобы предположить, что они поддерживают более двух пунктов - start и dest.Кому-нибудь повезло с проблемой TSP с использованием MapKit и / или Core Location?Кажется, можно вычислить расстояние во времени для всех ребер между узлами, используя что-то вроде:

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: {$0.expectedTravelTime <
                    $1.expectedTravelTime})
                let quickestRouteForSegment: MKRoute = routeResponse[0]

                completion(quickestRouteForSegment.expectedTravelTime)  
            }
        }
    }

и вручную разработать алгоритм, который опробует возможности и выбирает самый быстрый.Но это быстро усложняется и требует много запросов.Просто интересно, нашел ли кто-нибудь более изощренный способ приблизиться к нему.

1 Ответ

0 голосов
/ 18 декабря 2018

Вы не сможете достичь того, чего хотите, с помощью Mapkit, так как вам потребуется много запросов, и Apple ограничит ваше приложение.Придерживайтесь Google или Mapbox, у них есть матрица API, предназначенная для STP, а Mapkit нет.

...