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 с несколькими идентификаторами пути. В моем решении я полностью пренебрегал этим, и я в порядке с любой ошибкой, которая может это дать. Поскольку мой набор данных очень большой и плотный, я предполагаю, что допущенная ошибка не будет существенной, и ранние эксперименты подтвердили мою правоту.

Другие вопросы по тегам