GPS для сопоставления идентификатора пути в OpenStreetMaps
У меня есть такая проблема: у меня есть список пар широты и долготы, и для каждой из них я хотел бы знать, на каком типе дороги он был создан. Все точки от GPS-единиц автомобилей, едущих по дорогам общего пользования.
Я скачал OpenStreetMap.osm export, где дороги хранятся в следующем формате:
<way id="88596345" visible="true" version="9" changeset="453983438" timestamp="2017-05-04T15:47:48Z" user="wegavision" uid="453845">
<nd ref="456877786"/>
<nd ref="3335483999"/>
<nd ref="248335839"/>
<nd ref="406453920"/>
<nd ref="25808860"/>
<tag k="destination" v="abcd"/>
<tag k="highway" v="secondary"/>
<tag k="lanes" v="1"/>
<tag k="lit" v="yes"/>
<tag k="maxspeed" v="30"/>
<tag k="oneway" v="yes"/>
<tag k="ref" v="M54"/>
<tag k="sidewalk" v="left"/>
<tag k="smoothness" v="good"/>
<tag k="surface" v="asphalt"/>
</way>
Теперь мой вопрос: есть ли инструмент для поиска соответствия между GPS-координатами и идентификаторами этого пути? Как это сделать с помощью OpenStreetMaps?
1 ответ
Итак, в конце я понял это следующим образом:
Во-первых, я установил Overpass API на мою машину с Ubuntu и загрузил туда загруженный.osm. Затем я могу запросить загруженный файл.osm следующим образом:
/some_path/osm-3s_v0.7.54/bin/osm3s_query --db-dir=/some_path/osm-3s_v0.7.54/mydb <<< "way['highway'](around:10,'_GPSLAT_,_GPSLON_');out;"
Это вернуло строку XML, где я мог разобрать идентификатор пути.
Основная проблема этого подхода заключается в том, что, когда ваша точка GPS находится рядом с несколькими дорогами, вы получаете ответ XML с несколькими идентификаторами пути. В моем решении я полностью пренебрегал этим, и я в порядке с любой ошибкой, которая может это дать. Поскольку мой набор данных очень большой и плотный, я предполагаю, что допущенная ошибка не будет существенной, и ранние эксперименты подтвердили мою правоту.