1

我知道有很多类似的问题,但是经过长时间的搜索,没有一个对我有用,这就是我发布的原因,

我想从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));

(逻辑是..如果多边形包含给定点,如果是城市则返回其名称)

问题是什么?我将两个几何都转换为 4326 但仍然无法正常工作。PS“方式”是一列几何(多边形)。

查询总是返回空结果

编辑

Planet_osm_polygon 中没有遗漏城市,其几何列确实是多边形类型,以下是一些查询结果:

城市查询

在几何查看器中,它看起来是正确的

4

1 回答 1

2

我相信您在坐标对中切换 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 中的以下 BBOX 4289

在此处输入图像描述

查询 - 指向 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)

在此处输入图像描述

于 2020-01-07T16:30:18.507 回答