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 允许混合维度(例如,在同一 MultiGeometry 中混合 2D 和 3D)。由于 PostGIS 几何图形不支持混合维度,如果发现缺少 Z 维度,ST_GeomFromGML 会将整个几何图形转换为 2D。
GML 支持在同一 MultiGeometry 中混合 SRS。由于 PostGIS 几何图形不支持混合 SRS,在这种情况下,ST_GeomFromGML 会将所有子几何图形重新投影到 SRS 根节点。如果 GML 根节点没有 srsName 属性,则该函数会抛出错误。
ST_GeomFromGML 函数对于显式的 GML 命名空间并不严格。在常见用法中,您可以避免显式提及它。但是,如果您想在 GML 中使用 XLink 功能,则需要它。
|
|
|
ST_GeomFromGML 函数不支持 SQL/MM 曲线几何图形。 |
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>
$$);
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)))