从存储在 Postgres 中的 OSM 数据中按纬度和经度获取城市名称
get city name by latitude and longitude from OSM data stored in Postgres
我知道有很多类似的问题,但经过长时间搜索后,其中 none 对我有用,这就是我发帖的原因,
我想从 planet_osm_polygon table 中获取带有纬度和经度的城市名称,其中存储了多边形,包括城市的多边形,这是我的代码:
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));
(逻辑是..如果多边形包含给定点,return如果它是城市则它的名字)
问题是什么?我将两个几何图形都转换为 4326,但仍然无法正常工作。 P.S "way" 是一列几何图形(多边形)。
总是查询return个空结果
编辑
城市在 planet_osm_polygon 中并没有丢失,它的几何列确实是多边形类型,这里是一些查询结果:
我相信您正在交换坐标对中的 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');
坐标对应SRS中的如下BBOX4289
:
查询 - 指向 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)
我知道有很多类似的问题,但经过长时间搜索后,其中 none 对我有用,这就是我发帖的原因,
我想从 planet_osm_polygon table 中获取带有纬度和经度的城市名称,其中存储了多边形,包括城市的多边形,这是我的代码:
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));
(逻辑是..如果多边形包含给定点,return如果它是城市则它的名字)
问题是什么?我将两个几何图形都转换为 4326,但仍然无法正常工作。 P.S "way" 是一列几何图形(多边形)。
总是查询return个空结果
编辑
城市在 planet_osm_polygon 中并没有丢失,它的几何列确实是多边形类型,这里是一些查询结果:
我相信您正在交换坐标对中的 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');
坐标对应SRS中的如下BBOX4289
:
查询 - 指向 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)