有多边形表。我需要从表中找到一条记录,该记录中区域内有一些点(纬度/经度)。
它是坐标示例:149.14668176,-35.32202098
您能帮我写选择字符串来查找包含我的Point的区域吗?
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
答案 0 :(得分:2)
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匹配或转换为它。
有关哪些函数支持哪些参数的列表,请参见here。