@
liuguangxuan ```
select ST_Difference( t.gj, ST_PolygonFromText('POLYGON((0 0, 2 0, 2 2, 0 2, 0 0))', 4326)) from test1 t;
```
我理解你这条 SQL 的意思是遍历了 test1 表中所有的线和多边形进行差集计算。
按照官方文档中对 geometry ST_Difference(geometry geomA, geometry geomB, float8 gridSize = -1)
函数的说明:
http://postgis.net/docs/manual-3.2/ST_Difference.html用 A 与 B 进行差集计算,返回一个几何图形,它表示几何图形 A 与几何图形 B 不相交的部分。
等效于 A - ST_Intersection(A,B)。如果 A 完全包含在 B 中,则返回适当类型的空原子几何。
这是输入顺序很重要的唯一叠加功能。ST_Difference(A, B) 总是返回 A 的一部分。
This is the only overlay function where input order matters. ST_Difference(A, B) always returns a portion of A.
综上所述,你计算得到的结果是正常的。右侧的直线与多边形没有交集,总是返回 A 的一部分。
根据 A - ST_Intersection(A,B) = A 。
根据你以往所述的内容,我对需求的理解是:
1 、飞机的 GPS 点转换为飞机轨迹(线);
2 、在地图上进行范围查询;
实现步骤:
1 、ST_Intersects 从轨迹线中查询出与传入的范围(多边形)相交的线数据集;
2 、将步骤 1 查询出的线数据与范围几何求交集。
因此我没有理解你最上面那个 SQL 的意义。
此外我已经很多年都不做 Gis 了,手头也没有相关环境,只能是帮你查查官方文档,根据自己的理解提供一些建议,不一定正确,仅供参考。