получить название города по широте и долготе из данных OSM, хранящихся в Postgres - PullRequest
1 голос
/ 07 января 2020

я знаю, что есть много похожих вопросов, но после долгого поиска ни один из них не помог мне, поэтому я пишу,

Я хочу получить название города с латами и латами из таблицы planet_osm_polygon, где находятся хранящиеся многоугольники, включая многоугольники городов, вот мой код:

SELECT name
  FROM planet_osm_polygon
  where place = 'city'
 and ST_CONTAINS(ST_Transform(way,4326), ST_SetSRID(ST_Point(41.693459100461496,44.8014495),4326));

(логика c - это .. если многоугольник содержит данную точку, вернуть его имя, если это город)

В чем проблема? я преобразовал обе геометрии в 4326, но все еще не работал. PS «путь» - это столбец геометрии (многоугольник).

Запрос всегда возвращает пустой результат

Редактировать

Город не пропущен в planet_osm_polygon, а его столбец геометрии действительно является типом многоугольника, вот некоторые результаты запроса:

Cities query

In geometry viewer it looks correct

1 Ответ

2 голосов
/ 07 января 2020

Я полагаю, вы переключаете x и y в ваших парах координат. WGS84 ожидает longitude, latitude, а не наоборот:

SELECT name
FROM planet_osm_polygon
WHERE place = 'city'
AND ST_Contains(ST_Transform(way,4326), ST_SetSRID(ST_MakePoint(44.80,41.69),4326));

С другой стороны: подумайте об уменьшении точности ваших координат. С таким количеством десятичных чисел вы входите в область микроскопии -> 41.693459100461496

Пример данных

CREATE TEMPORARY TABLE planet_osm_polygon (name TEXT, way GEOMETRY,place TEXT);
INSERT INTO planet_osm_polygon 
VALUES ('Georgia',ST_SetSRID('POLYGON((43.87 42.22,45.43 42.22,45.43 41.50,43.87 41.50,43.87 42.22))'::GEOMETRY,4289),'city');

Координаты соответствуют следующему BBOX в SRS 4289:

enter image description here

Запрос - укажите точку внутри BBOX, задав либо BBOX, и указав значение WGS84

SELECT name
FROM planet_osm_polygon
WHERE place = 'city'
AND ST_Contains(ST_Transform(way,4326), ST_SetSRID(ST_MakePoint(44.80,41.69),4326));

  name   
---------
 Georgia
(1 Zeile)

enter image description here

...