名称

ST_GeomFromGML — 以 GML 几何表示形式作为输入,并输出一个 PostGIS 几何对象

语法

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 添加了可选参数默认 srid。

此函数支持 3d,并且不会删除 z 索引。

此函数支持多面体曲面。

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

GML 允许混合维度(例如,在同一个多几何中使用 2D 和 3D)。由于 PostGIS 几何不支持,因此一旦发现缺少 Z 维度,ST_GeomFromGML 会将整个几何转换为 2D。

GML 支持在同一个多几何中混合 SRS。由于 PostGIS 几何不支持,因此在这种情况下,ST_GeomFromGML 会将所有子几何重新投影到 SRS 根节点。如果 GML 根节点没有可用的 srsName 属性,则该函数会引发错误。

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

[Note]

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

示例 - 带有 srsName 的单个几何

SELECT ST_GeomFromGML('
		<gml:LineString 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>
<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)))
		

另请参阅

第 2.2.3 节,“构建配置”ST_AsGMLST_GMLToSQL