我正在尝试从使用 PostGIS 扩展创建的 PostgreSQL 中的多边形列中提取纬度/经度值,我尝试使用这样的查询获取坐标
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
,它也对我没有帮助......
还有其他人遇到过这个问题吗?
谢谢你。
注意: 我知道我可以创建一个正则表达式规则并去掉括号,但我想避免这种情况并找到一种方法来返回“干净”的坐标对
使用函数 st_dumppoints 提取几何图形的所有点,并使用函数 ST_x 和 ST_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;
将 GeoJson 几何图形转换为 json,然后提取坐标:
SELECT
ST_AsGeoJSON(geom) :: json->'coordinates' AS coordinates
FROM
your_table;
ST_AsGeoJSON
文档 中的示例部分以及 PostgreSQL 的 JSON 函数参考。
修剪是最简单的方法:
select btrim(st_astext(coverage_area), 'POLYGON()') from some_table;
如果您需要更多灵活性,还包括线串、点和类似内容:
select regexp_replace(st_astext(coverage_area), '[A-Z()]', '', 'g')
您还可以使用 postgresql 字符串函数来简化查询。
SELECT substring(left(St_astext(coverage_area),-2),10) FROM tablename;
这将删除开头的“POLYGON((”和结尾的“))”。
选择 ST_X((ST_dumppoints(geom)).geom) 作为 x,ST_Y((ST_dumppoints(geom)).geom) 作为 y FROM 表名