本文介绍了使用PostGIS将点转换为面的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想使用PostGIS创建一个多边形表。表‘point’中的每一行都有三个点ID.表‘point_location’具有点的位置信息。我用谷歌搜索了这个问题,但没有找到答案。以下代码有什么问题?

SELECT ST_GeomFromText('POLYGON((' || b.x || ' ' || b.y || ',' || c.x || ' ' || c.y || ',' || d.x || ' ' || d.y || ',' || b.x || ' ' || b.y'))',4326) 
AS polygon
FROM point a, point_location b, point_location c, point_location d
WHERE a.p1=b.point_id AND a.p2=c.point_id AND a.p3=d.point_id

推荐答案

从点构造多边形的更好方法是使用PostGIS' geometry constructors。这样,您就不需要转换二进制→Text→BINARY(WKB → WKT → WKB),这会更慢、有损失,并且容易出现文本格式干扰,遗漏的||就是明证。例如,尝试:

SELECT ST_MakePolygon(ST_MakeLine(ARRAY[b, c, d, b]))
FROM point a, point_location b, point_location c, point_location d
WHERE a.p1=b.point_id and a.p2=c.point_id and a.p3=d.point_id

这篇关于使用PostGIS将点转换为面的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-22 23:19