在postgis上拉长的几何多边形

时间:2018-04-03 19:27:34

标签: php postgresql google-maps-api-3 yii2 postgis

我需要将potgres几何数据类型转换为lat long。

这是我的桌子 enter image description here

geom列存储坐标,但它们不是人类可读的。

我无法弄清楚如何获得构成多边形的每一个点。

几何数据类型https://postgis.net/docs/reference.html#Geometry_Outputs有一些输出选项。

我需要每个点都很长,因为我必须在此代码中使用它们来定义和渲染谷歌地图上的多边形

$coords = [
          new LatLng(['lat' => 25.774252, 'lng' => -80.190262]),
          new LatLng(['lat' => 18.466465, 'lng' => -66.118292]),
          new LatLng(['lat' => 32.321384, 'lng' => -64.75737]),
        ];

        $polygon = new Polygon([
          'paths' => $coords
        ]);

问题是我无法访问lat long来定义构成多边形的点。

我正在使用YII2,yii2-google-maps扩展程序,PostGis Postgress。

1 个答案:

答案 0 :(得分:3)

要在WKT中显示几何图形,请使用函数ST_AsText

SELECT ST_AsText(geom) FROM colonias

如果您更喜欢GeoJSONGML,请使用以下功能:

SELECT ST_AsGeoJSON(geom) FROM colonias;
SELECT ST_AsGML(geom) FROM colonias 

要分割经度和纬度,请使用函数ST_XST_Y

SELECT ST_X(geom),ST_Y(geom) FROM colonias

考虑到您的几何不是点,您必须首先使用ST_DumpPoints提取点,然后如上所述解析它们。一种直接的方法是使用CTE(又名WITH子句)。

示例:

WITH j AS (
SELECT (ST_DumpPoints(ST_GeomFromText('POLYGON (( 2 0, 2 3, 0 2, 2 0 ))'))).geom AS point
) SELECT ST_X(j.point), ST_Y(j.point) FROM j;