Как создать экземпляр объекта NMARoute из файла GPX

Мы работаем с iOS Premium HereMaps SDK. Наш основной вопрос - как создать экземпляр объекта NMARoute из довольно подробного файла GPX. Этот объект следует использовать для настраиваемой пошаговой навигации. На данный момент мы предпринимаем следующие шаги:

  1. Создайте массив из NMAGeoCoordinates объектов из файла GPX
  2. Создайте массив NMAWaypoints
  3. Позвоните [NMACoreRouter calculateRouteWithStops:]

К сожалению, мы сталкиваемся с несколькими ограничениями:

  • Метод [NMACoreRouter calculateRouteWithStops:] ограничивает количество путевых точек. Хотя у нас есть файл GPX, который достаточно подробен, чтобы создать весь маршрут, мы должны выбрать точки маршрута и позволить сервису here снова вычислить маршрут. Этот процесс не гарантирует, что мы получим именно тот маршрут, который был в файле GPX.
  • NMAWaypoints вызывают голосовой вызов «Вы достигли своей остановки» во время пошаговой навигации каждый раз, когда достигается путевая точка. Мы знаем, что можно использовать NMAViaWaypoint в качестве типа, но это не подходит для нас, потому что NMAViaWaypoints будут отклонены во время процесса перенаправления, который может произойти во время навигации. Кроме того, остановки в пути вызовут перерыв в навигации, например. в отображаемых расстояниях.
  • Для некоторых точек GPS, расположенных в середине перекрестка, расчет маршрута HereMaps иногда выбирает другой маршрут, чем предполагалось. Это снова связано с тем, что HereMaps хочет рассчитать маршрут самостоятельно, несмотря на то, что у нас есть подробный файл GPX, содержащий маршрут.

На самом деле мы ищем лучший способ получить объект NMARoute из файла GPX. К нашему удивлению, существует конечная точка REST., предоставленный HereMaps SDK для преобразования файла GPX в данные json, но, к сожалению, нет возможности передать эти данные в iOS SDK.


person flashspys    schedule 10.01.2018    source источник


Ответы (1)


К сожалению, это не будет работать с текущим HERE iOS SDK. Существует тесная связь между TbT Navigation и маршрутизацией, поэтому в настоящий момент навигация может работать только с внутренним механизмом маршрутизации.

Немного предыстории:

Представьте, что вы определяете свой заранее рассчитанный маршрут во время навигации (это может случиться даже тогда, когда вы не рассчитываете, например, из-за переходов GPS, неправильного сопоставления карты в сложных ситуациях, временной потери сигнала, если вы начинаете движение в неотмеченных или частных дорожных сетях и и т. д.) система навигации попросит пересчитать маршрут. А что, если ваша трасса GPX не совпадает с дорожной сетью и данными карты в приложении на базе iOS MobileSDK? Значит, ваш след указывает вам ехать куда-нибудь, где дороги больше нет? Руководство откажется и приведет к перерасчету. А в вашем случае вам, скорее всего, не нужна оптимизированная для трафика навигация, но что делать с заблокированными дорогами (то есть не только с низкой скоростью свободного потока, но и полностью заблокированными)? Я бы предложил включить здесь оптимизацию, но это также не сработает со статическими трассировками GPX.

Итак, как вы уже сказали, лучшим решением является локальный пересчет маршрута, который очень близок к вашим трассам, но принимает во внимание локальные данные карты и ограничения.

Указанные вами ограничения верны, но:

  • Ограничение путевых точек было полностью удалено в SDK 3.6. Но, пожалуйста, будьте осторожны с количеством путевых точек, особенно с числом> 500 и сложными сегментами между этими путевыми точками.
  • Вы пытались использовать делегат NMAAudioManager для перехвата аудиовыхода? https://developer.here.com/documentation/ios-premium/topics_api_nlp_hybrid_plus/protocolnmaaudiomanagerdelegate-p.html#topic-apiref
  • Как описано выше, существует множество причин, по которым маршрут создается. Иногда это происходит из-за картографических данных, иногда из-за констант вычислений. 100% реконструкция может быть сложной задачей (иногда, вероятно, вы правы с трассировкой GPX, но в некоторых ситуациях может оказаться правильным HERE SDK), поэтому попробуйте поиграть с количеством путевых точек и параметрами маршрутизации, чтобы подобраться как можно ближе.
person Marco    schedule 11.01.2018