gpt4 book ai didi

postgresql - 与 ST_DWithin 的奇怪区别 - 地理与几何

转载 作者:行者123 更新时间:2023-12-04 00:51:06 30 4
gpt4 key购买 nike

(编辑:对不起。忘了提。Postgresql 13,PostGIS:3.1 USE_GEOS=1 USE_PROJ=1 USE_STATS=1。对此很抱歉)。
在我看来,以下 2 个查询在这两种情况下都应该返回“true”。
该点显然在多边形(正方形)内。显示两者当然表明如此。
我开始想知道我在这里错过了什么基本的东西。
老实说,我多年来一直围绕这个问题盘旋,因为我永远无法找到“最终”来了解正在发生的事情。在这种情况下,该点有点靠近多边形的边缘,但有时我会遇到与位于多边形内的点相同的问题。
两个查询之间的唯一区别是一个使用几何,另一个使用地理。如您所见,我们使用 0.0 作为距离值。这就像一个相交。
哦,顺便说一句,使用相交会产生相同的结果。我对此感到非常困惑。

select 
ST_Dwithin(
St_GeometryFromText(
'POLYGON((-95.979486 41.676556,-81.432269 41.676556,-81.432269 30.196043,-95.979486 30.196043,-95.979486 41.676556))', 4326),
ST_GeometryFromText('POINT (-87.70551 30.24481)', 4326),
0
)
select 
ST_Dwithin(
St_GeographyFromText(
'POLYGON((-95.979486 41.676556,-81.432269 41.676556,-81.432269 30.196043,-95.979486 30.196043,-95.979486 41.676556))'),
St_GeographyFromText('POINT (-87.70551 30.24481)'),
0
)
编辑。
抱歉,不确定正确的礼节。继伟大的回应之后,我添加了更多背景信息,以防有人觉得有趣。
我正在研究一个包含国家多边形的“世界”数据集。由于其中一些很大,我选择 st_subdivide 它们。
![st_subdivide usa] https://imgur.com/IQRz8vg
缩放时,我们可以准确地看到以下答案中的解释:
![zoom st_subdivide usa] https://imgur.com/fgmpBx0
所以哇,完美的解释,非常感谢。
我知道我不应该使用地理,嗯,“不应该”。但是,我还需要在距离和扩展方面做很多工作,而且 geom(4326) 对我发现的单位非常烦人。

最佳答案

首先,您需要了解几何和地理之间的区别。

  • Geometry,它假设您的所有数据都位于笛卡尔平面上。
  • Geography,它假定您的数据由地球表面上的点组成。

  • 问题如下。当您投影几何图形时,PostGIS 假设几何图形的边缘不是平面(因为地球表面不是平面)并将它们转换为球形(此过程称为曲面分割)。因此,当您尝试与它们相交时,该点不在多边形内。
    Planar vs Spherical Edges
    如果地理区域足够小,则可以忽略球形边缘和平面边缘之间的差异,但在您的情况下,多边形是一个巨大的多边形。
    您正在 EPSG 4326 上投影几何图形,以便将其投影到地球表面,但是尽管该点位于平面坐标系中的正方形内,但它不是球形的。
    总而言之,您需要知道哪种类型,几何或地理,取决于您的用例。
    您可以通过强制边缘为平面来解决此问题(在 PostGIS 作为 BigQuery 的某些实现中):
    St_GeogFromText(
    'POLYGON((-95.979486 41.676556,-81.432269 41.676556,-81.432269 30.196043,-95.979486 30.196043,-95.979486 41.676556))',
    planar => True)

    关于postgresql - 与 ST_DWithin 的奇怪区别 - 地理与几何,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66574189/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com