我正在尝试为我的工作将st_relate空间查询转换为postgis查询,但我不知道如何将这个oracle子句转换为oracle close:
OracleSpatial代码:
WHERE sdo_relate (a.geometry,
b.GEOMETRY,
'mask=contains+inside+covers+coveredby+overlapbdyintersect+equal+overlapbdydisjoint'
) = 'TRUE'我可以在st_relate函数中放入3个以上的参数吗?
我试过了:
WHERE
st_contains(a.geometrie, b.geometrie) AND
st_contains(a.geometrie, b.geometrie) AND
st_covers(a.geometrie, b.geometrie) AND
st_coveredby(a.geometrie, b.geometrie) AND
st_contains(a.geometrie, b.geometrie) AND
st_intersects(a.geometrie, b.geometrie)
AND st_disjoint(a.geometrie, b.geometrie)
AND st_equals(a.geometrie, b.geometrie)
AND a.GID = '142284 '
GROUP BY b.SOUS_TYPE, b.TYPE_PRESCRIPTION, a.geometrie, b.geometrie, b.TRIG_COMM但它不起作用
发布于 2021-07-07 19:37:17
在您的查询中,您检查了三次necessary.
st_contains(a.geometrie, b.geometrie)子句中的组合永远不会起作用。例如,st_disjoint(a.geometrie, b.geometrie) AND st_equals(a.geometrie, b.geometrie)永远不会带来任何结果,因为两个几何图形不能同时相等和不相交--也许是schrödinger几何图形?;-)。ST_MakeValid包装您的几何图形(请参阅简单地将Oracle Spatial掩码转换为PostGIS函数的comments).ST_Intersects可能就足够了。您可以让ST_Relate为您计算矩阵,以便您可以在WHERE子句中使用它。在你知道应该工作的几何图形中使用它,例如
数据样本
CREATE TABLE a (geom geometry(polygon,4326));
CREATE TABLE b (geom geometry(polygon,4326));
INSERT INTO a VALUES ('SRID=4326;POLYGON((-4.5412382957234065 54.216850443917195,-4.506219374824969 54.216850443917195,-4.506219374824969 54.19677082652654,-4.5412382957234065 54.19677082652654,-4.5412382957234065 54.216850443917195))');
INSERT INTO b VALUES ('SRID=4326;POLYGON((-4.5233855125202815 54.20681185515958,-4.484246718574969 54.20681185515958,-4.484246718574969 54.185923774806604,-4.5233855125202815 54.185923774806604,-4.5233855125202815 54.20681185515958))');

SELECT ST_Relate(a.geom,b.geom) FROM a,b;
st_relate
-----------
212101212然后在where子句中使用它:
SELECT count(*) FROM a
JOIN b ON ST_Relate(a.geom,b.geom,'212101212');
count
-------
1
(1 row)演示:db<>fiddle
https://stackoverflow.com/questions/68282919
复制相似问题