首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将此oracle空间掩码转换为st_relate postgis

如何将此oracle空间掩码转换为st_relate postgis
EN

Stack Overflow用户
提问于 2021-07-07 16:51:28
回答 1查看 103关注 0票数 1

我正在尝试为我的工作将st_relate空间查询转换为postgis查询,但我不知道如何将这个oracle子句转换为oracle close:

OracleSpatial代码:

代码语言:javascript
复制
WHERE sdo_relate (a.geometry, 
                  b.GEOMETRY,
                 'mask=contains+inside+covers+coveredby+overlapbdyintersect+equal+overlapbdydisjoint'
                 ) = 'TRUE'

我可以在st_relate函数中放入3个以上的参数吗?

我试过了:

代码语言:javascript
复制
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

但它不起作用

EN

回答 1

Stack Overflow用户

发布于 2021-07-07 19:37:17

在您的查询中,您检查了三次necessary.

  • Some,这显然不是
  • 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).
  • Instead,我建议您重新评估您的用例,只使用您实际需要的函数。正如您在注释中提到的,一个简单的ST_Intersects可能就足够了。
  • 如果您想坚持使用ST_Relate,请检查字符串代码的these examples并构建您自己的代码。

您可以让ST_Relate为您计算矩阵,以便您可以在WHERE子句中使用它。在你知道应该工作的几何图形中使用它,例如

数据样本

代码语言:javascript
复制
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))');

代码语言:javascript
复制
SELECT ST_Relate(a.geom,b.geom) FROM a,b;

 st_relate 
-----------
 212101212

然后在where子句中使用它:

代码语言:javascript
复制
SELECT count(*) FROM a 
JOIN b ON ST_Relate(a.geom,b.geom,'212101212');

 count 
-------
     1
(1 row)

演示:db<>fiddle

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68282919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档