postgis上的几何多边形到经纬度

Mau*_*pin 1 php postgresql postgis google-maps-api-3 yii2

我需要将 potsgres 几何数据类型转换为经纬度。

这是我的桌子 在此输入图像描述

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
        ]);
Run Code Online (Sandbox Code Playgroud)

问题是我无法访问经纬度来定义构成多边形的点。

我正在使用 YII2、yii2-google-maps 扩展、PostGis Postgress。

Jim*_*nes 8

要显示正在使用的几何图形,请WKT使用以下函数ST_AsText

SELECT ST_AsText(geom) FROM colonias
Run Code Online (Sandbox Code Playgroud)

如果您更喜欢GeoJSONGML,请使用以下函数:

SELECT ST_AsGeoJSON(geom) FROM colonias;
SELECT ST_AsGML(geom) FROM colonias 
Run Code Online (Sandbox Code Playgroud)

另请参阅此内容other answer以了解 PostGIS 中的更多输出格式。

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

SELECT ST_X(geom),ST_Y(geom) FROM colonias
Run Code Online (Sandbox Code Playgroud)

如果您的几何图形不是点,您必须首先使用提取点,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;
Run Code Online (Sandbox Code Playgroud)

演示:db<>fiddle