Я использую OpenStreetMap и его векторную дорожную сеть, и я хотел бы реализовать алгоритм сопоставления карт.
В настоящее время я могу для каждой позиции GPS извлечь ближайший участок дороги и рассчитать проекцию этой позиции на этот сегмент, как на этом изображении (красный штифт - это чистая позиция GPS, синим цветом - сопоставленный сегмент, а зеленым - сопоставленная позиция):
Однако из-за недостаточной точности GPS иногда отображаемое положение перепрыгивает с сегмента на другой и может время от времени предоставлять некоторое несовместимое отображаемое положение.
Мой текущий алгоритм очень прост: из чистой позиции GPS я получаю ближайший сегмент и решаю, что сопоставленная сопоставленная позиция находится на этом. Я знаю, что это может быть действительно улучшено.
Я могу себе представить, что учет направления движения автомобиля улучшит соответствие карты, но знаете ли вы какой-либо другой подход, который позволил бы мне улучшить сопоставление карт?
Я ищу любую ссылку и / или программное обеспечение с открытым исходным кодом?
Ответы:
Проецирование точек на линию, как вы уже делаете, возможно сделать непосредственно в PostGIS. Я писал об этом некоторое время назад, здесь
Но для решения вашей проблемы, когда точки ближе к неправильному сегменту, чем к правильному, возможно, это может быть возможным подходом.
источник
После прочтения вашего Вопроса и различных Ответов я заинтересовался этой проблемой. После небольшого прочтения алгоритмов сопоставления карт я понял следующее:
Для дальнейшего чтения я предлагаю следующее:
источник
Отвечая на мой вопрос!
1- Хороший .pdf, который я только что нашел об этой теме:
http://safari.ce.sharif.edu/file/2011-06-06/259/2009_An%20off-line%20map-matching%20algorithm%20for%20incomplete%20map%20databases.pdf
это также связано с реализацией сопоставителя карт с открытым исходным кодом на C ++, описанной в документе: http://eden.dei.uc.pt/~camara/files/mgemma.zip
(это автономный сопоставитель карт, насколько я понимаю, что он вычисляет сопоставленные положения карты с ВСЕМ путем в качестве входных данных и не может сделать это на лету для каждой позиции).
2- Затем я только что подробно прочитал этот вопрос, и он, на мой взгляд, действительно хорош: https://dspace.lboro.ac.uk/dspace-jspui/bitstream/2134/4860/1/velaga.pdf "Разработка Усовершенствованный основанный на весе топологический алгоритм MapMatching для интеллектуальных транспортных систем "
Алгоритм четко объяснен, а значения регулировки веса также приведены в документе.
источник
Существует много работы по сопоставлению карт, см. Эту статью для краткого обзора некоторых довольно недавних работ (до 2007 года). Совсем недавно подходы, основанные на скрытых марковских моделях, по-видимому, работали достаточно хорошо в нормальных условиях Например, ознакомьтесь с этой статьей за 2009 год. Идея и модель довольно просты и не должны доставлять вам особых хлопот, даже если вы не знакомы с HMM (в этом случае, не паникуйте, есть много из учебников и внедрения в Интернете)
источник
Этот метод также называется «векторное слияние». Существует специальная вики-страница ( http://wiki.openstreetmap.org/wiki/Conflation ), которая содержит общий обзор и список пакетов программного обеспечения (с открытым исходным кодом) для выполнения дорожной векторной сопоставления, таких как «JOSM-плагин для сопоставления», «объединение Potlatch 2». tool »,« RoadMatcher »(для OpenJUMP) и другие.
источник
Для алгоритмов сопоставления карт это зависит от того, нужна ли вам обработка в реальном времени или в автономном режиме. В последнем случае современные алгоритмы могут обрабатывать ~ 1000 точек в секунду. Требования к памяти, конечно, зависят от покрытия. Для этого нам удалось сжать дорожную сеть OSM планеты примерно на 16 Гб.
Кроме того, вам необходимо отличать сопоставление карты от логического вывода : это два отдельных процесса, в зависимости от того, есть ли у вас данные высокой или низкой частоты. Когда у вас относительно мало точек (например, 1 данные на километр в городских условиях), это вывод пути, так как обычно нужно сделать предположение, чтобы угадать, куда движется устройство. Вывод пути, как правило, сложнее, но становится все меньше проблем с современными устройствами / цена сбора данных.
Вы можете проверить мой профиль для API, который выполняет сопоставление карт непосредственно в OSM: он использует топологическое сопоставление и хорошо работает, например, с плавающими автомобильными данными.
источник
Strava Slide описывает, как кумулятивные данные трека по дорожной сети могут вести себя как «долины», и как предлагаемый маршрут «встанет на свои места», как будто это была бусинка.
источник
После тестирования большинства ранее упомянутых фреймворков я нашел Barefoot и могу порекомендовать его. Он использует скрытые марковские модели в качестве вероятностного подхода к сопоставлению карт (подробности в статье «Поместить автомобиль на карту» ) и реализован на Java. Он с открытым исходным кодом и активно разрабатывается отделом CarIT BMW.
источник
Тема называется сопоставлением карты. Но в качестве первого очень хорошего приближения, вероятно, достаточно просто искать самые близкие точки для каждой точки GPS (без каких-либо исправлений, угадывающих правильный путь).
Мой проект с открытым исходным кодом, называемый graphhopper, - это не то, что работает для iOS ( обновление : теперь оно работает и на iOS), и при этом у него нет полнофункционального Android-приложения для того, что вы хотите. Но вы можете использовать версию сервера для создания приложения для iOS или использовать автономную демонстрацию Android для начала. Я выпустил здесь алгоритм сопоставления карт , просто грубый прототип, но он работает на удивление хорошо.
источник
Попробуйте получить хорошие тестовые данные. Используйте дополнительную более высокую точность GPS-трекинга, помимо регистрации точек на целевом устройстве. Это позволит определить ошибки в GPS и в данных OSM. Знание разумных порогов значительно облегчит разработку алгоритма.
источник
Если вы можете получить данные о дорогах для своего региона, возможно, вас заинтересует Автоматическая групповая привязка с помощью FOSS
В зависимости от того, хотите ли вы выводить данные в режиме реального времени или планируете впоследствии выполнить некоторую постобработку на вашем ПК, GRASS может помочь.
источник
Я нашел API, который мог бы просто выполнять свою работу без необходимости сразу же разрабатывать собственное решение.
Они используют данные OSM для сопоставления карт. У них также есть демонстрационная страница, которая позволяет загружать файлы GPX, чтобы увидеть, насколько хорошо это может работать для вас.
источник
Вам не нужно обязательно улучшать качество ваших данных. Использование топологического алгоритма с дорожной сетью в памяти значительно улучшит ваше соответствие. Проверьте ссылки: http://trb.metapress.com/content/p31485vw72645686
источник