Перед чтением этой статьи рекомендую прочесть вот эту статью про создание адресного поиска в картах для Garmin:
http://gpspohod.ucoz.ru/publ/gps/sozdanie_kart_dlja_garmin_s_adresnym_poiskom/2-1-0-3
Поскольку дальнейшие рассуждения будут основаны на том, что читатель владеет информацией из этой статьи.
Далее по тексту под форматами Navitel и Garmin понимается польский формат в тайпсете Navitel и Garmin соответственно, т.е. речь идет об исходных форматах и их конвертации.
Как известно в Navitel и Garmin сильно отличается принцип построения адресного поиска. Если кратко – в Навителе для каждого объекта-полигона, обозначающего здание, задается город улица и номер дома, при этом, номер дома может содержать не только цифры, но и буквы, таким образом, алгоритм адресного поиска приводит непосредственно к нужному зданию, а также возможен поиск домов номера которых содержат буквенные и цифровые индексы (20б, 39/2, 40 к.2 и т.п.).
В Garmin принцип совершенно иной (см. статью выше), адресные данные привязаны к полилиниям-улицам. При этом название улицы прописывается в поле label, и между любой парой узлов задается диапазон номеров домов, которые расположены по каждую сторону улицы. При этом алгоритм адресного поиска приводит не к полигону, обозначающему здание с соответствующим адресом, а к точке на линии, обозначающей улицу, при этом подразумевается, что дом с нужным адресом, будет находиться напротив этой точки, что в случае нашей российской действительности далеко не всегда так. Еще одна проблема – нет возможности задавать номера домов с индексами.
Долгое время мне казалось, что это тупик. Но при более подробном изучении вопроса оказалось, что все не так уж и плохо. Хочу обратить внимание на несколько важных нюансов при построении поиска для Garmin:
- Линий – улиц с одним и тем же названием может быть несколько, при этом, все номера домов, принадлежащие этим линиям, считаются принадлежащим одной и той же улице.
- Вдоль каждой такой линии-улицы может располагаться один единственный дом.
- Узлы улицы, между которыми задается нумерация, не обязательно должны быть роутинговыми, более того у улицы может вообще не быть роутинговых узлов – это ни сколько не мешает работе поиска.
- Допустим, есть две улицы с похожим названием, например «проспект Ленина» и «бульвар Ленина», и на каждой из этих улиц есть дом с номером 17. Если при поиске адреса ввести номер дома 17, а в качестве названия улицы – просто «Ленина», то в результате поиска будет выдано два адреса: «проспект Ленина, 17» и «бульвар Ленина, 17»
Все это позволяет построить адресный поиск, который будет приводить непосредственно к нужному зданию, а не к некой точке на соответствующей улице, искать адреса с буквенными индексами, а также сделать автоматический конвертер адресного поиска из формата Навител (который более подходит для наших городов) в формат Гармин.
Для этого каждый полигон-здание преобразуется в полилинию-улицу, в поле label которой прописывается название улицы. Далее для получившейся улицы задаем, что вдоль нее располагается один единственный номер дома. В результате получаем нормальный поиск здания с нужным адресом.
Теперь о том, как добиться поиска номеров с индексами. Допустим, есть несколько домов с адресами: «Русская 57», «Русская 57а», «Русская 57б». Помня о нюансе п.4 (см. выше) конвертируем домики в линии-улицы с названиями: «Русская», «57а Русская», «57б Русская», и вдоль каждой и них прописываем один единственный дом с номером 57. Далее если нам надо найти дом «Русская 57а» мы указываем улицу «Русская» и дом «57» - без буквы «а», в результате навигатор предложит три варианта: «Русская 57», «57а Русская 57», «57б Русская 57», из которых без особого труда можно выбрать нужный.
В результате имеем поиск домов с индексами.
Итоговую карту с поиском можно сделать двумя способами:
1)Скомпилировать по отдельности основную карту со всеми объектами и отдельно карту с домиками в виде полилиний – для адресного поиска, для нее задаем более низкий параметр , либо вручную отключаем ее отображение в приборе, чтобы не было наложения.
2)Домики в виде линий сделать одним из кастомных роутинговых типов (0x0d…0x13), а в тип-файле задать эту линию как невидимую(прозрачную), и полученные домики-линии добавить в основную карту с остальными объектами перед компиляцией.
Оба способа проверены и работают.
С использованием описанного принципа мною создан консольный конвертер адресного поиска из формата Навител в формат Garmin, для карт в польском формате.
Для его использования нужно пересохранить исходную карту в тайпсете Навител, установив в GPSMapEdit следующие настройки:
Tools -> Options -> Load & Save -> Settings for Polish Format -> Save Postal Address Information -> as “CityName=”, “RegionName=”, “CountryName=” attributes per object.
В результате работы конвертора будет получена карта в тайпсете Garmin, содержащая только адресную информацию, все остальные объекты будут отсеяны. Далее полученную карту можно скомпилировать либо отдельно, либо добавить в основную (предварительно сконвертированную в тайпсет Гармин) карту содержащую все остальные объекты. Компилировать карту нужно, как описано в уже упомянутой выше статье:
http://gpspohod.ucoz.ru/publ/gps/sozdanie_kart_dlja_garmin_s_adresnym_poiskom/2-1-0-3
Скачать ковертер v2.02 (05.05.2014)
Обновлено 28 июня 2016 г.
Обновлено 7 мая 2014 г.
Опубликовано 16 февраля 2011 г.
Богатырев Евгений
http://gpspohod.ucoz.ru |