Конвертировать planet_osm_nodes lat lon в "нормальный" lat long - PullRequest
0 голосов
/ 05 сентября 2018

Я скачал данные openstreetmap для Германии. Я пытаюсь найти ближайшую точку, используя planet_osm_nodes, но значение в таблице не имеет для меня никакого смысла. Позвольте мне на примере показать, почему нет:

Я беру случайную точку

SELECT * FROM planet_osm_nodes LIMIT 1;

    id     |    lat    |    lon    |         tags         
-----------+-----------+-----------+----------------------
 363692391 | 596568676 | 109247330 | {ref,1A,power,tower}

При вставке точки в (широта, долгота), т. Е. (59.6568676, 10.9247330) или (10.9247330, 59.6568676) и вводе ее в https://www.openstreetmap.org/search?query=59.6568676%2C%2010.9247330#map=5/59.657/10.925, я оказываюсь в Норвегии или на море.

При использовании конвертера EPSG: 3857 в EPSG: 4326 (https://epsg.io/transform#s_srs=3857&t_srs=4326&x=109247330.0000000&y=596568676.0000000), Я пытаюсь использовать преобразованные GPS-координаты для точного определения на карте и даже менять местами x / y и lat / lon, но я все еще делаю не в конечном итоге в Германии (но Северный / Южный полюс, США и т. д.).

Когда я ищу «путь», который принадлежит «узлу»:

SELECT * FROM planet_osm_ways WHERE 363692391 = ANY (nodes);
 48616848 | {363692392,363692391,...,302275015,346153952,251417206} | {cables,6,name,"Bürs - Obermooweiler blau;Bürs - Ober
mooweiler weiß",power,line,ref,401;402,voltage,380000,wires,quad}


Найти «путь» (спасибо Google) в OSM онлайн: https://www.openstreetmap.org/relation/1750798/history#map=9/47.3988/9.7439

Выберите координату GPS рядом: https://www.openstreetmap.org/node/346153670

У меня есть GPS, который заставляет меня приземлиться в Германии: Расположение: 47.6525789, 9.8031666 Что заставляет меня верить, что у меня есть правильная база данных, и данные должны быть там как-то.

Вопрос: Как преобразовать широту в таблице, упомянутой выше, чтобы получить координаты, которые я могу ввести в Google Maps / Openstreetmaps, которые показывают мне правильное местоположение (в Германии)?

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Правильное преобразование этих странных данных должно быть:

select ST_Transform(ST_GeomFromText('POINT('||lon::numeric/100||' '||lat::numeric/100||')',3857 ),4326) from planet_osm_nodes

Без добавления :: numeric для "lat" и "lon" вы потеряли точность, и в некоторых случаях это может быть даже километрами. EPSG 3857, 3785, 900913 (и многие другие) все одинаковы, но наиболее "правильные" (в диком смысле) 3857

0 голосов
/ 06 сентября 2018

Как указал JGH, аналогичный вопрос задавался по адресу: https://gis.stackexchange.com/questions/57003/what-format-is-lat-long-stored-in-osm-postgis

Основная суть, которую я получил от нее:

  • "Таблица planet_osm_nodes, на которую вы ссылаетесь, указана в списке (см. Вики osm2pgsql) запись) в качестве временной таблицы, используемой при запуске импортера с ограниченная память («тонкий» режим). "пользователем diciu
  • Из-за этого большинство тегов доступны и достижимы, выполняя геометрию для клавиши «way» в других таблицах
  • Однако тег maxspeed не преобразуется в новые таблицы насколько я вижу
  • можно преобразовать широту из planet_osm_nodes, получить идентификатор и искать идентификатор в столбце узлов planet_osm_ways. Это даст доступ к тегам

Окончательный ответ в коде для конвертации латинского языка (из связанного вопроса на gis.stackexchange.com с подключенными переменными):
ST_Transform( ST_GeomFromText('POINT('||lon/100||' '||lat/100||')',3785 ),4326)

...