如何按纬度和经度从表中选择多边形(gis postgis)



有多边形表。我需要从桌子内部的表(lat/long(内部找到一个记录。

这是坐标的示例:149.14668176,-35.32202098

您能帮我写选择字符串以查找包含我的观点的区域吗?

 SELECT PostGIS_full_version();
                                                                                             postgis_full_version                                                                                               
 POSTGIS="2.5.2 r17328" [EXTENSION] PGSQL="96" GEOS="3.5.1-CAPI-1.9.1 r4246" PROJ="Rel. 4.9.3, 15 August 2016" GDAL="GDAL 2.1.2, released 2016/10/24" LIBXML="2.9.4" LIBJSON="0.12.1" LIBPROTOBUF="1.2.1" RASTER

类似的东西:

SELECT id,name FROM area_polygon WHERE ST_Within('149.14668176, -35.32202098', geog);
bounds=# d bounds.area_polygon;
id           | integer                 |           | not null |
geog         | geography(Polygon,4283) |           |          |
name         | text                    |           |          |

我期望:

  id  | name
------+--------
    1 | Alabama

st_within仅支持几何类型,这就是为什么您在早期答案中获得错误的原因,因为您有地理列类型。

您可以铸造几何形状:

SELECT id,name 
FROM area_polygon 
WHERE ST_Within(ST_SetSRID(ST_POINT(149.14668176,-35.32202098),4283), geog::geometry);

或者您可以使用st_dwithin,距离设置为零:

SELECT id,name 
    FROM area_polygon 
    WHERE ST_DWithin(ST_SetSRID(ST_POINT(149.14668176,-35.32202098),4283)::geography, geog,0);

请注意,坐标的顺序必须是LON/LAT(而不是LAT/LON(,我假设这些坐标在您的SRID 4283中。它们必须匹配Geog SRID或转换为它...

请参阅此处以获取哪些函数支持参数的列表。

最新更新