PostgreSQL中从坐标字段生成多边形质心报错的技术问询
问题描述
我希望从存储多边形顶点坐标的字段生成质心,直接使用坐标文本编写的查询可正常运行,但引用字段时出现错误:Invalid WKT: Invalid number: polygon (line 1)。
我的coord字段中的数据示例:
46.781231 23.489355,46.785255 23.484876,46.786118 23.485407,46.787913 23.486857, 46.781231 23.489355
可行的查询语句:
SELECT ST_centroid(ST_GeometryFromText('polygon((46.781231 23.489355,46.785255 23.484876,46.786118 23.485407,46.787913 23.486857, 46.781231 23.489355))'));
不可行的查询语句:
SELECT ST_centroid(ST_GeometryFromText('polygon((coord))')) from polygon_data;
解决方案
你错误地将字段名coord直接嵌入到字符串常量中,数据库会把coord当作普通文本处理,而非读取对应字段的坐标值。需要通过字符串拼接,将WKT前缀、字段值、后缀组合成合法的多边形WKT字符串。
正确的查询语句如下:
SELECT ST_centroid(ST_GeometryFromText('polygon((' || coord || '))')) FROM polygon_data;
如果使用PostGIS等支持ST_MakePolygon的空间数据库,也可以用更严谨的方式构造多边形(需确保coord首尾坐标一致,你的示例数据已满足该条件):
SELECT ST_Centroid(ST_MakePolygon(ST_GeomFromText('LINESTRING(' || coord || ')'))) FROM polygon_data;
内容的提问来源于stack exchange,提问作者Zifceac Iaroslav
相关产品推荐
相关产品推荐

