跳到主要内容

几何函数和操作符

PostgreSQL 内置 point、line、lseg、box、path、polygon、circle 等平面几何类型。它们使用无单位的二维坐标,不是地理经纬度和球面距离;以下示例只讨论内置几何能力。

构造与测量​

SELECT point(0, 0) <-> point(3, 4); -- 欧氏距离 5
SELECT x(point(3, 4)), y(point(3, 4)); -- 3、4
SELECT area(box(point(0, 0), point(3, 2))); -- 6
SELECT center(box(point(0, 0), point(4, 2))); -- (2,1)

<-> 计算距离;area、center、length、perimeter 等函数只适用于其支持的几何类型。距离和面积的单位取决于输入坐标的单位,不能直接解释为米或平方米。

空间关系​

SELECT point(1, 1) <@ box(point(0, 0), point(2, 2)); -- true
SELECT box(point(0, 0), point(2, 2)) &&
box(point(1, 1), point(3, 3)); -- true

<@ 表示被包含,@> 表示包含,&& 表示重叠;还可以用 ?# 判断相交、?- 判断水平、?| 判断垂直等,但支持的类型组合不同,应按具体签名选择。两个图形的边界是否算“重叠”要根据操作符定义和测试数据核对,不要套用业务语言的直觉。

选型​

内置几何类型适合简单二维计算;需要地理坐标系、投影、地球距离或更丰富的拓扑分析,通常使用 PostGIS 扩展。大量空间搜索应针对具体操作符评估 GiST/SP-GiST 等索引及执行计划;只存坐标并不会自动产生空间索引。