為什麼 A 與 B 的交會沒有交會 A 或 B?
兩條線,A 和 B,的交會是一個點 P。在數學課中,你會學到 P 落在 A 和 B 上。這只是數學!
那麼,在 PostGIS 中,為什麼會有容易建構的案例,其中 A 和 B 的交會不交會任一條輸入線呢?
WITH parts AS (
SELECT
'LINESTRING(0 0, 10 11)'::geometry AS a,
'LINESTRING(11 0, 0 19)'::geometry AS b
)
SELECT
ST_AsText(ST_Intersection(a, b)) AS intersection,
ST_Intersects(ST_Intersection(a, b), a) AS intersects_a,
ST_Intersects(ST_Intersection(a, b), b) AS intersects_b
FROM parts;
intersection | POINT(6.720257234726688 7.392282958199357)
intersects_a | f
intersects_b | f
在 PostGIS 中,座標表示為「浮點數」數字對,其有能力代表非常大量的數值。但不是無限數值。
「A 在 P 交會 B,P 會位於 A 和 B 上」這條規則是「實數」的數學規則,而實數的數量是無限的。電腦浮點數可以代表的有限數值看起來就像一張方格紙。
如果你在一張方格紙上畫一條直線,這條線通常不會碰到許多方格交叉點。在「浮點數網格」世界中的線也是如此。結果是,兩條線的計算交會經常不會落在一條線上,而是落在一個(非常靠近)可表示為浮點數的附近點上。