地理相交功能錯在哪?
首先,那不是錯誤!但我們常常收到以下形式的疑問:「地理相交測試表示這個點位於這個方框內,但顯然不是,這是為什麼?」
舉例如下
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
答案在於這兩種類型工作的空間不同
- geometry 是放置在笛卡爾平面(或是體積,若您加入第三個維度)上的形狀,且兩點之間最短路徑是直線。
- geography 是放置在地球表面上的形狀,且兩點之間最短路徑是大圓。
在我們的範例中,方框的北緣將會是 LINESTRING(0 10, 80 10)
,在幾何中這是水平的直線,但在地理中這是大圓,它會向北微幅彎曲,因此會通過我們測試的「POINT(40 10.1)」北方。
在論及地理時,永遠要記得邊界是大圓這點很重要。赤道以北的東/西路線會微幅向北彎曲,赤道以南的會微幅向南彎曲。