当前位置: 首页 > 知识库问答 >
问题:

ST_intersects地理学

芮化
2023-03-14

我在想办法,我在postgres 9.6上使用postgis 2.3

地理上的ST_intersects返回 false,尽管两个地理相交。为了调试,我使用几何尝试了相同的查询,两者相交。

有人能帮我解释一下吗?

示例:

我正在运行此查询:

select ST_intersects(ST_GeogFromText('POLYGON((12.856 41.890,12.856 41.935,12.811 41.935,12.811 41.890,12.856 41.890))'), ST_GeogFromText('POLYGON((-170 -47,174 -47,174 77,-170 77,-170 -47))'))  from table limit 1;

我得到:

 st_intersects 
---------------
 f
(1 row)

当我跑的时候:

 select ST_intersects(ST_GeomFromText('POLYGON((12.856 41.890,12.856 41.935,12.811 41.935,12.811 41.890,12.856 41.890))'), ST_GeomFromText('POLYGON((-170 -47,174 -47,174 77,-170 77,-170 -47))')) from  table limit 1;

我得到:

 st_intersects
 ---------------
  t
 (1 row)

共有1个答案

栾鸣
2023-03-14

ST_Intersects -- 如果几何/地理在 2D 空间上相交,则返回 True。如果从多边形(在具有 5 个顶点的情况下)转换为 LINESTRING,则查询应返回相同的结果。测试:

SELECT 
 ST_Intersects(
 ST_GeomFromText('SRID=4326;LINESTRING(12.856 41.890,12.856 41.935,12.811 41.935,12.811 41.890,12.856 41.890)'), 
 ST_GeomFromText('SRID=4326;LINESTRING(-170 -47,174 -47,174 77,-170 77,-170 -47)'));


SELECT 
 ST_Intersects(
 ST_GeogFromText('SRID=4326; LINESTRING(12.856 41.890,12.856 41.935,12.811 41.935,12.811 41.890,12.856 41.890)'), 
 ST_GeogFromText('SRID=4326; LINESTRING(-170 -47,174 -47,174 77,-170 77,-170 -47)'));

更新:

实际上,对于< code>ST_Intersects,使用< code>Polygon就可以了。我意识到< code>Linestring不是您想要的——返回false,因为一个完全在另一个内部。问题是这两个多边形在球面坐标系中相距甚远。检查:

SELECT 
 ST_Distance(
 ST_GeomFromText('SRID=4326;POLYGON((12.856 41.890,12.856 41.935,12.811 41.935,12.811 41.890,12.856 41.890))'), 
 ST_GeomFromText('SRID=4326;POLYGON((-170 -47,174 -47,174 77,-170 77,-170 -47))'));

==

SELECT 
 ST_Distance(
 ST_GeogFromText('SRID=4326;POLYGON((12.856 41.890,12.856 41.935,12.811 41.935,12.811 41.890,12.856 41.890))'), 
 ST_GeogFromText('SRID=4326;POLYGON((-170 -47,174 -47,174 77,-170 77,-170 -47))'));

==

当然,您可以将< code>geography转换为< code>geometry类型,如下所示,以获得所需的输出:

SELECT 
 ST_Intersects(
 ST_GeogFromText('SRID=4326;POLYGON((12.856 41.890,12.856 41.935,12.811 41.935,12.811 41.890,12.856 41.890))')::geometry, 
 ST_GeogFromText('SRID=4326;POLYGON((-170 -47,174 -47,174 77,-170 77,-170 -47))')::geometry);
 类似资料:
  • 问题内容: 这两个查询有什么区别: 第一个查询给出正确的输出,而第二个查询根本不检索任何行。与多边形相交的道路也重叠了,对吗? 问题答案: 从PostGIS的文档中 http://postgis.net/docs/ST_Intersects.html 如果几何或地理共享空间的任何部分,则它们相交。重叠,触摸,所有暗示空间相交。如果上述任何一项返回true,则几何形状也会在空间上相交。 http:/

  • 我在 PostGIS 中两个地理之间的相交有问题:我有一个带有地理列的表1,在 wgs84 中填充了多多边形(每行一个)。第二个表2还有一个地理列,其中填充了wgs84中的多多边形(每行一个)。然后我在两者之间做一个相交(选择 (..) 其中 ST_Intersects())。 在某些(非常罕见的)情况下,在我看来,它工作不正确,因为intersect返回false,而期望的是true:我有一个重

  • 问题内容: 当我的列是Geography类型时,应该使用什么SqlDbType枚举?我正在使用MS SQL Server 2008 R2。 这是我正在寻找的具体内容: 问题答案: 更新 试试这个: 摘自使用SqlCommand插入SQL 2008 Geometry

  • 使用微信内置地图查看位置接口 wx.openLocation({ latitude: 0, // 纬度,浮点数,范围为90 ~ -90 longitude: 0, // 经度,浮点数,范围为180 ~ -180。 name: '', // 位置名 address: '', // 地址详情说明 scale: 1, // 地图缩放级别,整形值,范围从1~28。默认为最大 inf

  • D3默认包括了一些常见投影,如下所示。众多的(不太常用的)投影在扩展地理投影插件和多面体投影插件中是可用的。 由D3提供的大多数投影都是通过d3.geo.projection来创建并配置的,你可以旋转这个地球,缩放或转换画布等。除非你正在执行一个新的原始投影,否则你可能不会用D3.geo.projection来构造,但是你有可能使用这个配置方法。 d3.geo.projection(raw) 从指

  • 对于地图的可视化,D3支持少数的组件显示和操作地理数据。这些组件使用GeoJSON格式——在JavaScript中标准的地理特征表示方法。(可以参见TopoJSON格式,它是GeoJSON的扩展格式,表示的更加紧密。)。要把图形文件转换为GeoJSON,使用ogr2ogr的GDAL包的一部分。 这有一些你可能感兴趣的其他工具: TopoJSON –简化图形文件,拓扑结构和GeoJSON压缩。 Sh