Sar*_*ohn 1 postgresql geometry postgis intersection
我正在使用 postgres/postGIS 我有两个我有兴趣查询的表:
table A: contains geometry values as (POINT) such as (P1, P2,P3,...)
table B: contains geometry values as (POLYGON) such as (Polygon 1, polygon 2, ...)
Run Code Online (Sandbox Code Playgroud)
我试图找到每个点位于哪个多边形内。我最有可能寻找的答案列出了点及其包含的多边形,例如:
| 观点 | 多边形 |
|---|---|
| P1 | 多边形3 |
| P2 | 多边形1 |
我尝试过以下内容:
SELECT *
FROM area, points
WHERE st_intersects(area.polygons, points.point) ;
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
ERROR: ST_Intersects: Operation on mixed SRID geometries (Polygon, 4326) != (Point, 8307)
非常感谢您的帮助。
您无法比较不同空间参考系统中的几何图形,因此您需要转换其中一列以匹配另一列的 SRID。您可以即时修复此问题:
SELECT *
FROM area, points
WHERE st_intersects(area.polygons, st_transform(points.point,4326));
--or, dynamically: st_transform(points.point,st_srid(area.polygons))
Run Code Online (Sandbox Code Playgroud)
上面的方法会表现得很差,无法使用索引。假如说:
在每个表上构建一个单独的列,或者仅保留已经转换的数据版本,所有这些都在一个参考系统中是有意义的。
alter table points add column point_4326 geometry;
update points set point_4326=st_transform(point,4326);
create index on area using gist(polygons);
create index on points using gist(point_4326);
SELECT *
FROM area, points
WHERE st_intersects(area.polygons, points.point_4326);
Run Code Online (Sandbox Code Playgroud)
如果您负担得起,您可以保留原始列作为参考 - SRS 转换并不总是完全无损,因此最好保留原始数据。