Мне необходимо написать программку котора будет работать в оффлайн с картами. Остановился на OSM потому что почитав форум убедился в Вашей серьезной поддержке уважаемые форумчане.
Дано:
Есть приложение написанно на C++ Builder, туда нужно встроить поддержку карт. Не важно будет это компонент к билдеру или библиотека написанная на другом языке. Пользователь программы должен отмечать участки дорог по которым он проехал (скорее всего поставит точку на этом участке дороги), а программа должна посчитать какое расстояние водитель проехал.
Так же надо привязать к каждому участку дороги еще кое какую справочную информацию.
Все это должно работать в отсутствии интернета.
Этапы:
Собственно отображение (отрисовка или рендеринг) карты в программе.
Навигация по карте (зум, а так же возможность передвижения в право-влево-вверх-вниз).
Постановка точек на интересующих участках дорог.
Расчет расстояния между первой и последней точкой по дорогам.
Ассоциация справочной информации к участкам дорог и досуп к ней.
На форуме очень много всего написанно, читаю целый день, думаю что быстрее будет если кто-то мне поможет найти информацию по этапам, т.к. многое уже обсуждалось. Либо кто-то вообще захочет персонально мне помочь на не безвозмездной основе.
После этого отслеживание клика и определение дороги/окрестностей с вытаскиванием соответствующих данных из базы/файлов будет сделать сравнительно просто. А вот роутинг - это да, кромешный ужас (все помним про запреты поворотов, access и т.д.?). В силу отсутствия опыта не скажу, что легче - написать руками или прикрутить к билдеру OsmSharp, или, не к ночи будь помянут, локальный osrm: http://project-osrm.org/ .
Самой малой кровью можно отделаться, вставив в окошко браузер с лифлетом, который натравливается на папку с тайлами (хотя бы 1,2 решаются сразу).
А вот клики придётся обрабатывать уже всяко на C++ (поиск ближайшего отрезка по заботливо составленной базе/структуре, расстояния/пометки/подсветки поверх карты).
Надеюсь, кто-нибудь другой подскажет таки волшебную библиотеку или возьмётся помочь
Однако описание только как компилировать для Linux и MacOS. На сколько я понимаю даже если я разверну его локально на машине (или на виртуалке), мне к нему надо обращаться через компонент ВЕББраузер. Получается что при модификации кода OSRM (добавление возможности прокладки маршрута через несколько точек и передача результатов) задача будет полностью решена. (Судя по возможностям ДЕМО http://map.project-osrm.org/))
Правильно ли я понимаю? Куда дальше копать? Пробовать перекомпилировать на винде? или поставить на локальную машину виртуалку с Ubuntu или Debian?
А в этом компоненте точно есть какое-то взаимодействие с сишным кодом ? А то боясь вам придётся сначала реализовать всё на яваскрипте с последующей передачей как-то данных, что наводит на мысль, а зачем вообще он нам, когда всю информацию можно вывести в обычном браузере.
Я тоже не понимаю, нафиг тут нужен билдер. Смысл был бы, если писать приложение со своим показывателем тайлов и нативным интерфейсом выбора маршрута, а также использованием OSRM напрямую (скомпилированного в DLL, к примеру). А писать обертку для окошка браузера как-то странно.
Можно воспользоваться системой расширений PocketGIS(требуется регистрация). Постройка маршрута и расчот времени/расстояния это его конек. Остаётся дописать dll c нужной тебе функциональностью.
Пункты 1-4 там уже имеются.
Остаётся дописать 5й пункт. Думаю что проблем не будет.
Не суть, можно и на делфи библиотеку написать. Что за компонент?
У кого еще какие мысли? Я смотрел компонент DataMap, но он платный и до автора не достучаться. В принципе за результат мне тоже денег не жалко.
Хорошая штука Но при ее использовании вопрос с постановкой точек и отрисовкой остается открытым. Где-то видел статью как сделать подобную вещь, только с Яндекс картами. Может ее переписать для OSM? Может кто-то делал?
Еще нашел вот такие штуки, может кто скажет про них если знаком?
Руками стоит писать при выполнении следующих условий:
Есть минимум 3 месяца на этот проект (без отвлечений)
Нет сверхъестественных требований к красоте отображения и размеру БД
Нужна сильно нестандартная функциональность
В остальных случаях лучше купить готовые компоненты (DataGis по сайту неплохо смотрится), убедившись что они будут совместимы с чем надо.
Если в приложении можно выделить модуль на .NET - OsmSharp и не париться (там примеры GUI есть, осталось только заставить работать), тем более бесплатно. Правда тогда придётся открывать исходники всего модуля клиентам, ибо там GPL.
Огромное спасибо. Этот компонент решает первые 3 задачи и есть возможность купить исходники за приемлемые деньги и переписать компонент на билдер.
Теперь вопрос, как используя этот компонент решить задачи 4 и 5
Напомню:
Т.к. будут исходники, и карта будет отображаться в определенных масштабах, можно под растровый слой записать векторный, приводить его к тому же масштабу. Переносить на него путевые точки поставленные на растре. Затем ассоциировать эти точки к дорогам. вычислить расстояние от первой до последней. Проявить на растре путь.
Только вот я боюсь, что дорога на растровой подложке и на векторной карте не совпадут в разных масштабах и визуально это будет очень коряво. Примерно так же как в googlemap когда смотришь картинки со спутника и включает отрисовку дорог линиями.
Забыть об этом. Это все равно что собрать боинг на коленке. Osm-файл в сыром виде не содержит ни объектов, ни их атрибутов, а только графические примитивы. Объекты нужно сперва сформировать, а потом приписать им атрибуты исходя из выбранной объектной модели.
Если ОЧЕНЬ сильно надо, я бы сперва сконвертил osm в польский формат (osm2mp.pl) в нем есть уже дороги с атрибутами и запретами, можно делать рутинг и смотреть атрибуты. (стандартные конфиги osm2mp.pl конвертят разумеется далеко не все атрибуты, но это поправимо )
Не надо бояться, если правильно делать преобразования координат и данные будут из одного источника - то всё совпадёт. Растр ведь делается сервером по тому же алгоритму.
Там они несовпадают не по этому, а потому что источники разные. Там, во первых, данные дорог зачастую кривые, т.к. получены из лохматого года источников, а во вторых привязка самих снимков может иногда до сотни метров отличаться от реальных треков.
Итог моей попытки на VS2012: собрал Boost и Bzip2, а сборка STLXXL валится на очередном хитром C++ - шаблоне.
Что будет делать компилятор С++ Builder - даже боюсь предположить (хотя можно перебрать все остальные компиляторы, какой-то да переварит… )
FYI, смеха ради скачал STLXXL из репозитория, сочинил CMakeLists.txt по мотивам обсуждения и благополучно собрал в VS2010. Eдинственное что потребовалось сделать - закомментировать #include <unistd.h> в bits/mng/config.h. Тесты и бенчмарки из сборки выпилил для простоты.
Мне необходимо написать подобное приложение, с некоторыми отличиями:
Навигация
Зум
Указание точек начала и конца пути, поиск оптимального пути
Собственно выведение информации в глаза пользователя
Все это на Qt, С++. Я в этом деле новичок, разбираюсь в информации всего около недели. И нашел-то уже много, вот только разобраться не могу, как лучше такое дело слепить. Теряюсь. Не могли бы вы подсказать источники, примеры и т. п.? Да, БД должна быть небольшой, в пределах, ну скажем, одного города. И требований к “красоте” также особых нет, главное чтобы оно работало.