форматы векторных карт и как с ними работать?

добрый день, у меня есть необходимость разработать программу, работающую с gps картой города, делающую отметки на карте по gps-координатам. проблема в том, что это абсолютно новая для меня предметная область. всвязи с чем возникает вопрос: какие форматы векторных карт существуют? как с ними работать (на С++), как их парсить? какую информацию из нее можно извлекать? можно ли расчитывать маршруты по этим картам самостоятельно (Дейкстра или что-то еще)? поделитесь, пожалуйста, опытом. буду очень благодарен.

milohoffman, форматов существует достаточно много всяких разных. У каждого из них своя сфера применения.
Для твоих целей, боюсь, формат придётся разрабатывать самому.

что можно почитать по этому поводу? можно ли будет, к примеру, заказать карту города какой-нибудь фирме и самостоятельно расширить ее формат? есть какие-нибудь наработки по данному поводу (классы С++ и т. п.)?

Можно использовать картографический компонент фирмы ИНГИТ http://www.ingit.ru
Плюсы: легко интегрировать в свою программу, есть демо-версия компонента, существует довольно неплохая документация
Минусы: качество карт не очень хорошее, роутинг иногда странный (впрочем на своей карте он вряд ли будет лучше), ну и компонент будет нужно приобретать на каждое рабочее место.
Попробуйте, если не подойдет, то напишите мне на vladz-prg@yandex.ru - есть некоторые свои наработки

ИНГИТ, как я понял, заточен под винду, мне надо под макось/линукс…

Несложно из ОСМ сделать бинарный векторный формат. Который легко представить как граф и в дальнейшем гулять по нему маршрутами со всеми примочками(oneway, planning сar, avoid toll roads etc) или просто для навигации. Другое дело, как ваш город представлен в ОСМ.

По собственному опыту:
Около 15 месяцев наза поставил перед собой как раз сходную задачу.
Векторных форматов - море, но, увы, значительная часть из них либо закрытая либо полностью отсутствует документация.
Согласен с liosha, что, скорее всего, формат под свою задачу придется разрабатывать собственный.
Рекомендую ознакомиться с двумя форматами: польским (.MP), являющимся общепринятым и открытым “общим знаменателем”, применяемым в качестве промежуточного формата и формата обмена данными, но непригодным для использования в качестве внутреннего формата, и с форматом карт Garmin (.IMG), по которому существует хоть какая-то документация - на этом примере можно понять, исходя из каких соображений и как именно следует делать формат, ориентированный на реальную работу программы.
В принципе, можно воспользоваться и форматом shape, но там присутствуют разнородные файлы, как собственно *.shp, так и файлы базы данных, которые нужно обрабатывать синхронно.
Начинать с *.osm не рекомендую: формат не слишком удобен даже для тех задач, для которых был создан - чрезмерная свобода приводит к тому, что каждый “рисует” кто во что горазд, и очень сложно потом свести это во что-то единообразное.
Собственно, из упомянутых 15 месяцев у меня 3 ушло на создание первой версии программы, после этого около 8-10 месяцев эксплуатации и выяснение ошибок проектирование (связанных с отсутствием опыта в данной области), и сечас уже месяца 2 делаю вторую версию.
Работаю, правда, только в свободное от основной работы время.
Но в целом следует быть готовым к тому, что первый блин выйдет комом.

Единственный формат роутинговых карт, к которому удалось найти официальное открытое описание, это kiwi. Очень познавательно. Двоичную реализацию можно не копировать, а придумать свою. Хотя в гугле даже какие-то исходники для kiwi можно найти.
Kiwi Format Description v1.22

chnav, а чем ОСМ не годится для роутинга?

Mirrory, данные осм для роутинга годятся, а форматы нет

Да, я не прав.

А по вышеупомянутому формату kiwi что-нибудь есть, кроме общих описаний? Судя по поиску, конвертера пока не существует?

QLandkarte GT ( http://www.qlandkarte.org )

  1. OpenSource
  2. программа на C++
  3. под линукс/макос/винду
  4. бинарный формат стандартный, гарминовский
  5. проект быстро развивается

Я думаю, если вы программист, вам проще будет внести требуемый вам функционал в уже готовый софт, чем писать что-то с нуля. Все только выиграют от этого.