PostGIS从POLYGON中提取坐标

时间:2015-10-23 09:49:27

标签: postgresql postgis

我试图从PostgreSQL中使用PostGIS扩展创建的多边形列中提取纬度/经度值,我尝试使用这样的查询获取坐标

查询

ST_AsText(coverage_area) as coverage_area 但是它返回的输出对我而言并不方便使用。

输出

POLYGON((37.9615819622 23.7216281890869,37.9617173039801 23.7193965911865,37.9633413851658 23.717679977417,37.964559422483 23.7147617340087,37.9644240860015 23.7116718292236,37.9615819622 23.7216281890869))

我需要输出如下:

37.9615819622 23.7216281890869,37.9617173039801 23.7193965911865,37.9633413851658 23.717679977417,37.964559422483 23.7147617340087,37.9644240860015 23.7116718292236, 37.9615819622 23.7216281890869

我还搜索了PostGIS文档,我发现的唯一的事情是ST_AsGeoJSON也对我没有帮助... 还有其他人遇到过这个问题吗?

谢谢。

注意: 我知道我可以创建一个正则表达式规则并删除括号但我想避免这种情况并找到一种方法来返回" clean"坐标对

4 个答案:

答案 0 :(得分:12)

使用函数st_dumppoints提取几何体的所有点以及函数ST_xST_y以提取点的坐标。然后使用array_agg和array_to_string构建一个包含所有坐标的行

尝试此查询:

SELECT array_to_string(array_agg, ',') FROM 
(SELECT array_agg( ST_x(geom)||' '||ST_y(geom))  FROM 
    (SELECT (ST_dumppoints(coverage_area)).geom FROM your_table
    ) AS foo_1
) AS foo_2;

答案 1 :(得分:2)

您还可以使用postgresql string functions来简化查询。

SELECT substring(left(St_astext(coverage_area),-2),10) FROM tablename;

这将删除" POLYGON(("在开头和"))"在末尾。

答案 2 :(得分:2)

修剪是最简单的方法:

select btrim(st_astext(coverage_area), 'POLYGON()') from some_table;

如果您需要更多的灵活性,还要涵盖线串,点和类似物:

select regexp_replace(st_astext(coverage_area), '[A-Z()]', '', 'g')

答案 3 :(得分:2)

将GeoJson几何体转换为json,然后提取坐标:

SELECT 
  ST_AsGeoJSON(geom) :: json->'coordinates' AS coordinates
FROM
  your_table;

请参见ST_AsGeoJSON docs和PostgreSQL的JSON functions reference中的“示例”部分。