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 与 B 在 P 点相交时,P 将位于 A 和 B 上”这一规则是“实数”的数学规则,实数是无限的。计算机浮点数可以表示的有限数量的值最终看起来像一张方格纸。

如果您在一张方格纸上画一条直线,大多数情况下,这条线不会击中许多方格交叉点。在“浮点网格”的世界中,线也是如此。结果是,两条线的计算交点通常不会落在任何一条线上,而是落在一个(非常非常接近)的附近点,该点可以表示为浮点数。