PostGIS
切换暗/亮/自动模式 - PostGIS 空间数据库 切换暗/亮/自动模式 - PostGIS 空间数据库 切换暗/亮/自动模式 - PostGIS 空间数据库 返回主页 - PostGIS 空间数据库

为什么地理相交函数是错误的?

首先,它不是!但我们经常遇到的问题是,“地理相交测试说这个点在盒子里面,但显然不是,为什么?”

以下是示例

WITH wkt AS (
  SELECT
    'POLYGON((0 0, 80 0, 80 10, 0 10, 0 0))' AS box,
    'POINT(40 10.1)' AS pt
)
SELECT
  ST_Intersects(wkt.box::geography, wkt.pt::geography) AS intersects_geog,
  ST_Intersects(wkt.box::geometry, wkt.pt::geometry) AS intersects_geom
FROM wkt;

相同的盒子,相同的点,但根据您是作为几何还是地理进行评估,答案不同。为什么?

 intersects_geog | intersects_geom
-----------------+-----------------
 t               | f

答案在于两种类型工作的不同空间中

  • 几何是放置在笛卡尔平面(或体积,如果您添加第三维)上的形状,并且任意两点之间的最短路径是直线
  • 地理是放置在球体表面上的形状,并且任意两点之间的最短路径是大圆

在我们的示例中,该盒子的最北边缘将是 LINESTRING(0 10, 80 10),在几何中它是一条水平直线,但在地理中它是一个向北略微弯曲的大圆,以至于它经过我们的测试“POINT(40 10.1)”的北边。

在推理地理时,务必记住边缘是大圆。赤道以北的东/西线将向北弯曲一点,赤道以南的东/西线将向南弯曲一点。