Name

ST_GeomFromGML — 将几何图形的 GML 表示形式作为输入并输出 PostGIS 几何对象

Synopsis

geometry ST_GeomFromGML(text geomgml);

geometry ST_GeomFromGML(text geomgml, integer srid);

描述

根据 OGC GML 制图表达生成 PostGIS ST_Geometry对象。

ST_GeomFromGML仅适用于 GML 的几何部分。 尝试将其用于整个 GML 文档时会引发错误。

支持的 OGC GML 版本包括:

  • GML 3.2.1 命名空间

  • GML 3.1.1 简单功能配置文件 SF-2(向后兼容 GML 3.1.0 和 3.0.0)

  • GML 2.1.2

有关 OGC GML 标准,请参阅http://www.opengeospatial.org/standards/gml

可用性:需要 1.5 libxml2 1.6+

增强功能:2.0.0支持多面体曲面和 TIN 。

增强:2.0.0 引入了多面体曲面支持和 TIN 支持。

该函数支持 3d 并且不会丢失 z-index。

该函数支持多面体曲面。

此函数支持三角形和不规则三角网面 (TIN)。

GML 允许混合维度(例如,同一 MultiGeometry 内的 2D 和 3D)。 由于 PostGIS 几何图形不这样做,如果一旦发现缺失的 Z 维度,ST_GeomFromGML 会将整个几何图形转换为 2D。

GML 支持同一 MultiGeometry 内的混合 SRS。 由于 PostGIS 几何图形不这样做,因此在本例中 ST_GeomFromGML 会将所有子几何图形重新投影到 SRS 根节点。 如果 GML 根节点没有可用的 srsName 属性,则该函数会抛出错误。

ST_GeomFromGML 函数对于显式 GML 命名空间并不迂腐。 您可以避免在常见用法中明确提及它。 但如果您想在 GML 中使用 XLink 功能,则需要它。

[Note]

ST_GeomFromGML 函数不支持 SQL/MM 曲线几何形状。

示例 - 具有 srsName 属性的单个几何图形

SELECT ST_GeomFromGML($$
    <gml:LineString xmlns:gml="http://www.opengis.net/gml"
                        srsName="EPSG:4269">
        <gml:coordinates>
            -71.16028,42.258729 -71.160837,42.259112 -71.161143,42.25932
        </gml:coordinates>
    </gml:LineString>
$$);

                

示例-XLink使用法

SELECT ST_GeomFromGML($$
    <gml:LineString xmlns:gml="http://www.opengis.net/gml"
            xmlns:xlink="http://www.w3.org/1999/xlink"
            srsName="urn:ogc:def:crs:EPSG::4269">
        <gml:pointProperty>
            <gml:Point gml:id="p1"
><gml:pos
>42.258729 -71.16028</gml:pos
></gml:Point>
        </gml:pointProperty>
        <gml:pos
>42.259112 -71.160837</gml:pos>
        <gml:pointProperty>
            <gml:Point xlink:type="simple" xlink:href="#p1"/>
        </gml:pointProperty>
    </gml:LineString>
$$);

                

示例-多面体曲面

SELECT ST_AsEWKT(ST_GeomFromGML('
<gml:PolyhedralSurface xmlns:gml="http://www.opengis.net/gml">
<gml:polygonPatches>
  <gml:PolygonPatch>
    <gml:exterior>
      <gml:LinearRing
><gml:posList srsDimension="3"
>0 0 0 0 0 1 0 1 1 0 1 0 0 0 0</gml:posList
></gml:LinearRing>
    </gml:exterior>
  </gml:PolygonPatch>
  <gml:PolygonPatch>
    <gml:exterior>
        <gml:LinearRing
><gml:posList srsDimension="3"
>0 0 0 0 1 0 1 1 0 1 0 0 0 0 0</gml:posList
></gml:LinearRing>
    </gml:exterior>
  </gml:PolygonPatch>
  <gml:PolygonPatch>
    <gml:exterior>
        <gml:LinearRing
><gml:posList srsDimension="3"
>0 0 0 1 0 0 1 0 1 0 0 1 0 0 0</gml:posList
></gml:LinearRing>
    </gml:exterior>
  </gml:PolygonPatch>
  <gml:PolygonPatch>
    <gml:exterior>
        <gml:LinearRing
><gml:posList srsDimension="3"
>1 1 0 1 1 1 1 0 1 1 0 0 1 1 0</gml:posList
></gml:LinearRing>
    </gml:exterior>
  </gml:PolygonPatch>
  <gml:PolygonPatch>
    <gml:exterior>
        <gml:LinearRing
><gml:posList srsDimension="3"
>0 1 0 0 1 1 1 1 1 1 1 0 0 1 0</gml:posList
></gml:LinearRing>
    </gml:exterior>
  </gml:PolygonPatch>
  <gml:PolygonPatch>
    <gml:exterior>
        <gml:LinearRing
><gml:posList srsDimension="3"
>0 0 1 1 0 1 1 1 1 0 1 1 0 0 1</gml:posList
></gml:LinearRing>
    </gml:exterior>
  </gml:PolygonPatch>
</gml:polygonPatches>
</gml:PolyhedralSurface
>'));

-- result --
 POLYHEDRALSURFACE(((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0)),
 ((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)),
 ((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0)),
 ((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0)),
 ((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0)),
 ((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1)))