【发布时间】:2013-12-19 12:09:20
【问题描述】:
就像 PostGIS 折射中的 example。 该查询用一条线分割一个圆圈。结果是两个多边形。此外,它会选择不同的多边形 (n) 并计算每个对象的面积。
WITH split AS
(SELECT
ST_Split(circle, line) AS geom,
generate_series(1,100) AS n
FROM (
SELECT
ST_MakeLine(ST_MakePoint(10, 10),ST_MakePoint(190, 190)) AS line,
ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50) AS circle) AS foo),
objects AS
(SELECT
n,
ST_GeometryN(split.geom,n) AS geom
FROM split
WHERE n <= ST_NumGeometries(split.geom))
SELECT
n,
ST_Area(objects.geom),
geom
FROM objects
查询返回两个面积值不同的对象。
我的问题是如何选择最小的? 问题在于,在某些情况下,n=1 的几何形状较小,而对于另一个多边形,n=2 的几何形状较小。
我在最后的查询中尝试了这个,但它不起作用。它不返回几何图形。
CASE
WHEN ST_Area(ST_GeometryN(objects.geom,1)) < ST_Area(ST_GeometryN(objects.geom,2))
THEN ST_GeometryN(objects.geom,1)
ELSE ST_GeometryN(objects.geom,2)
END
我想要的是分割后的小多边形。
我认为CASE WHEN 子句可以在这里提供帮助。所以,这更像是一个 PostgreSQL 问题。
【问题讨论】:
标签: sql postgresql case case-when