Postgresql几何线 - 找到Y截距

时间:2015-07-07 08:45:40

标签: postgresql geometry

我有一个可以用多个线性段表示的模型,如下所示:

 Y
  |   _/_________\_
  |   /           \
  |  /             \
  | /               \
  |/                 \
  |           
  |________________________ X

我需要找到给定值X

的Y值

我的首要问题是将每个细分受众群存储为关系line类型{A,B,C}。但是,我不确定在找到正确的查询来检索Y值方面会给我带来什么。

1 个答案:

答案 0 :(得分:1)

由于您正在处理线性段,因此应使用lseg数据类型(line数据类型表示无限长度的行)。以这种格式获得数据后,您可以在所需的X值处找到具有无限长度垂直线的线段的交集,并提取交叉点的Y值。

CREATE TABLE segments (id int, seg lseg);

INSERT INTO segments VALUES 
  (1, '[(4,3), (12,15)]'),  -- positively inclined line segment
  (2, '[(2,19), (24,-4)]'), -- negatively inclined line segment
  (3, '[(4,3), (12,3)]'),   -- horizontal line segment
  (4, '[(5,3), (5,15)]'),   -- vertical line segment, collinear at X=5
  (5, '[(4,3), (4,15)]');   -- vertical line segment, no intersection at X=5

然后:

test=# SELECT id, 5 AS x, (seg # '((5,-999999999), (5,999999999))'::lseg)[1] AS y
test-# FROM segments;
 id | x |        y
----+---+------------------
  1 | 5 |              4.5
  2 | 5 | 15.8636363636364
  3 | 5 |                3
  4 | 5 |
  5 | 5 |
(5 rows)

从上面可以明显看出,共线线段(即X的值相同的垂直线段)和没有交点的线段为Y返回NULL