代码之家  ›  专栏  ›  技术社区  ›  Maurocrispin

postgis上几何多边形到lat long

  •  0
  • Maurocrispin  · 技术社区  · 7 年前

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

    这是我的桌子 enter image description here

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

    我只是不知道如何才能得到构成多边形的每个点。

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

    我需要每个点的长度,因为我必须在这段代码中使用它们来定义和渲染google maps上的多边形

    $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谷歌地图扩展,PostGis postgres。

    1 回复  |  直到 7 年前
        1
  •  5
  •   Jim Jones Yara Rabie    7 年前

    用于在中显示几何图形 WKT 使用该功能 ST_AsText :

    SELECT ST_AsText(geom) FROM colonias
    

    如果你愿意 GeoJSON GML ,使用以下功能:

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

    要拆分经度和纬度,请使用函数 ST_X ST_Y :

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

    考虑到几何图形不是点,必须首先使用 ST_DumpPoints 然后按上述方式解析它们。一种简单的方法是使用 CTE (又名带条款)。

    示例:

    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;