PostGIS
切換暗/亮/自動模式 - PostGIS 空間資料庫 切換暗/亮/自動模式 - PostGIS 空間資料庫 切換暗/亮/自動模式 - PostGIS 空間資料庫 返回首頁 - PostGIS 空間資料庫

為什麼 A 與 B 的交會沒有交會 A 或 B?

兩條線,AB,的交會是一個點 P。在數學課中,你會學到 P 落在 AB 上。這只是數學!

那麼,在 PostGIS 中,為什麼會有容易建構的案例,其中 AB 的交會不交會任一條輸入線呢?

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 上」這條規則是「實數」的數學規則,而實數的數量是無限的。電腦浮點數可以代表的有限數值看起來就像一張方格紙。

如果你在一張方格紙上畫一條直線,這條線通常不會碰到許多方格交叉點。在「浮點數網格」世界中的線也是如此。結果是,兩條線的計算交會經常不會落在一條線上,而是落在一個(非常靠近)可表示為浮點數的附近點上。