PostGIS:几何图形输出

5.9 几何图形输出

5.9.1. Well-Known Text (WKT)

5.9.1.1. ST_AsEWKT

ST_AsEWKT -返回具有SRID元数据的几何体的已知文本(WKT)表示。

5.9.1.1.1. 概要
sql 复制代码
text ST_AsEWKT(geometry g1);
text ST_AsEWKT(geometry g1, integer maxdecimaldigits=15);
text ST_AsEWKT(geography g1);
text ST_AsEWKT(geography g1, integer maxdecimaldigits=15);
5.9.1.1.2. 描述

返回以SRID为前缀的几何图形的知名文本表示形式。可选参数可用于减少输出中使用的浮点数后的最大十进制位数(默认为15)。

WKT规范不包括SRID。要获取OGC WKT格式,请使用ST_AsText。

WKT格式不保持精度,因此为了防止浮点截断,请使用ST_AsBinary或ST_AsEWKB格式进行传输。

ST_AsEWKT与ST_GeomFromEWKT相反。使用ST_GeomFromEWKT将ST_AsEWKT表示转换为postgis几何。
  • 此函数支持3d,并且不会删除z索引。
  • 此方法支持圆形字符串和曲线
  • 此函数支持多面体曲面。
  • 该功能支持三角形和三角形不规则网络曲面(TIN)。
5.9.1.1.3. 样例
sql 复制代码
SELECT ST_AsEWKT('0103000020E61000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000'::geometry);
st_asewkt
SRID=4326;POLYGON((0 0,0 1,1 1,1 0,0 0))
sql 复制代码
SELECT ST_AsEWKT('0108000080030000000000000060E30A4100000000785C0241000000000000F03F0000000018E20A4100000000485F024100000000000000400000000018E20A4100000000305C02410000000000000840')
st_asewkt
CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)

5.9.1.2. ST_AsText

ST_AsText -返回没有SRID元数据的几何/地理的已知文本(WKT)表示。

5.9.1.2.1. 概要
sql 复制代码
text ST_AsText(geometry g1);
text ST_AsText(geometry g1, integer maxdecimaldigits=15);
text ST_AsText(geography g1);
text ST_AsText(geography g1, integer maxdecimaldigits=15);
5.9.1.2.2. 描述

返回几何/地理的已知文本表示形式。可选参数可用于减少输出中使用的浮点数后的最大十进制位数(默认为15)。

WKT规范不包括SRID。要将SRID作为数据的一部分,请使用非标准的PostGIS ST_AsEWKT

WKT格式不保持精度,因此为了防止浮点截断,请使用ST_AsBinary或ST_AsEWKB格式进行传输。

ST_AsText与ST_GeomFromText相反。使用ST_GeomFromText将ST_AsText表示转换为postgis几何图形。
  • 该方法实现了SQL 1.1的OpenGIS简单特性实现规范。s2.1.1.1
  • 该方法实现了SQL/MM规范。Sql-mm 3:5.1.25
  • 此方法支持圆形字符串和曲线
5.9.1.2.3. 样例
sql 复制代码
SELECT ST_AsText('01030000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000');
st_astext
POLYGON((0 0,0 1,1 1,1 0,0 0))
sql 复制代码
SELECT ST_AsText(GeomFromEWKT('SRID=4326;POINT(111.1111111 1.1111111)'))
st_astext
POINT(111.1111111 1.1111111)
sql 复制代码
SELECT ST_AsText(GeomFromEWKT('SRID=4326;POINT(111.1111111 1.1111111)'),2)
st_astext
POINT(111.1111111 1.1111111)

5.9.2. Well-Known Binary (WKB)

5.9.2.1. ST_AsBinary

ST_AsBinary -返回不含SRID元数据的已知二进制(WKB)几何/地理表示。

5.9.2.1.1. 概要
sql 复制代码
bytea ST_AsBinary(geometry g1);
bytea ST_AsBinary(geometry g1, text NDR_or_XDR);
bytea ST_AsBinary(geography g1);
bytea ST_AsBinary(geography g1, text NDR_or_XDR);
5.9.2.1.2. 描述

返回几何图形的众所周知的二进制表示形式。这个函数有两种变体。第一个变体没有端序编码参数,默认为服务器机器端序。第二个变体采用第二个参数表示编码------使用小端编码(' NDR ')或大端编码(' XDR ')。

这在二进制游标中很有用,可以从数据库中提取数据,而无需将其转换为字符串表示形式。

WKB规范不包括SRID。使用ST_AsEWKB获取SRID格式的WKB

ST_AsBinary是几何ST_GeomFromWKB的反转。使用ST_GeomFromWKB将ST_AsBinary表示转换为postgis几何体。

PostgreSQL 9.0的默认行为已更改为以十六进制编码输出。ST_AsBinary是几何ST_GeomFromWKB的反转。如果您的GUI工具需要旧的行为,那么在数据库中设置bytea_output= ' escape '。
5.9.2.1.3. 样例
sql 复制代码
SELECT ST_AsBinary(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326));
t_asbinary
\001\003\000\000\000\001\000\000\000\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\360?\000\000\000\000\000\000\360?\000\000\000\000\000\000\360?\000\000\000\000\000\000\360?\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
sql 复制代码
SELECT ST_AsBinary(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326), 'XDR');
st_asbinary
\000\000\000\000\003\000\000\000\001\000\000\000\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\360\000\000\000\000\000\000?\360\000\000\000\000\000\000?\360\000\000\000\000\000\000?\360\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000

5.9.2.2. ST_AsEWKB

ST_AsEWKB -返回具有SRID元数据的几何体的众所周知的二进制(WKB)表示。

5.9.2.2.1. 概要
sql 复制代码
bytea ST_AsEWKB(geometry g1);
bytea ST_AsEWKB(geometry g1, text NDR_or_XDR);
5.9.2.2.2. 描述

返回具有SRID元数据的几何体的众所周知的二进制表示形式。这个函数有两种变体。第一个变体不接受端序编码参数,默认为小端序。第二个变体采用第二个参数表示编码------使用小端编码(' NDR ')或大端编码(' XDR ')。

这在二进制游标中很有用,可以从数据库中提取数据,而无需将其转换为字符串表示形式。

WKB规范不包括SRID。使用ST_AsBinary获取OGC WKB格式

ST_AsEWKB与ST_GeomFromEWKB相反。使用ST_GeomFromEWKB转换为postgis几何体fromST_AsEWKB表示。
  • 此函数支持3d,并且不会删除z索引。
  • 此方法支持圆形字符串和曲线
  • 此函数支持多面体曲面。
  • 该功能支持三角形和三角形不规则网络曲面(TIN)。
5.9.2.2.3. 示例
sql 复制代码
SELECT ST_AsEWKB(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326));
st_asewkb
\001\003\000\000 \346\020\000\000\001\000\000\000\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\360?\000\000\000\000\000\000\360?\000\000\000\000\000\000\360?\000\000\000\000\000\000\360?000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000

5.9.2.3. ST_AsHEXEWKB

ST_AsHEXEWKB -使用小端(NDR)或大端(XDR)编码返回HEXEWKB格式的几何体(作为文本)。

5.9.2.3.1. 概要
sql 复制代码
text ST_AsHEXEWKB(geometry g1, text NDRorXDR);
text ST_AsHEXEWKB(geometry g1);
5.9.2.3.2. 描述

使用小端(NDR)或大端(XDR)编码返回HEXEWKB格式(作为文本)的几何体。如果没有指定编码,则使用NDR。

5.9.2.3.3. 示例
sql 复制代码
SELECT ST_AsHEXEWKB(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326));
--哪个给出了相同的答案
SELECT ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326)::text;
st_ashexewkb
0103000020E61000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000

5.9.3. Other Formats:其他格式

5.9.3.1. ST_AsEncodedPolyline

ST_AsEncodedPolyline -从LineString几何体返回一个编码的折线。

5.9.3.1.1. 概要
sql 复制代码
text ST_AsEncodedPolyline(geometry geom, integer precision=5);
5.9.3.1.2. 描述

以编码折线的形式返回几何图形。这种格式被精度为5的Google Maps和精度为5和6的Open Source Routing Machine所使用。

可选精度指定在编码折线中保留多少小数位。值在编码和解码时应相同,否则坐标将不正确。

5.9.3.1.3. 示例
  • 基础
sql 复制代码
SELECT ST_AsEncodedPolyline(GeomFromEWKT('SRID=4326;LINESTRING(-120.2 38.5,-120.95 40.7,-126.453 43.252)'));
result
  • 结合地理线串和地理分段使用,并放在谷歌地图上
sql 复制代码
--从波士顿到旧金山的SQL,每100公里分段
SELECT ST_AsEncodedPolyline(ST_Segmentize(ST_GeogFromText('LINESTRING(-71.0519 42.4935,-122.4483 37.64)'),100000)::geometry) As encodedFlightPath;
  • Javascript将看起来像这样,其中$变量将替换为查询结果
js 复制代码
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?libraries=geometry"></script>
<script type="text/javascript">
    flightPath = new google.maps.Polyline({
        path: google.maps.geometry.encoding.decodePath("$encodedFlightPath"),
        map: map,
        strokeColor: '#0000CC',
        strokeOpacity: 1.0,
        strokeWeight: 4
    });
</script>

5.9.3.2. ST_AsGeobuf

ST_AsGeobuf -返回一组行的Geobuf表示。

5.9.3.2.1. 概要
sql 复制代码
bytea ST_AsGeobuf(anyelement set row);
bytea ST_AsGeobuf(anyelement row, text geom_name);
5.9.3.2.2. 描述

返回一组与featurecall相对应的行的Geobuf表示(https://github.com/mapbox/geobuf)。分析每个输入几何形状以确定最佳存储的最大精度。请注意,当前形式的Geobuf不能流式传输,因此完整的输出将在内存中组装。

至少具有一个几何列的行数据。

Geom_name是行数据中几何列的名称。如果为NULL,它将默认为第一个找到的几何列。

5.9.3.2.3. 示例
sql 复制代码
SELECT encode(ST_AsGeobuf(q, 'geom'), 'base64') FROM (SELECT ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))') AS geom) AS q;
st_asgeobuf
GAAiEAoOCgwIBBoIAAAAAgIAAAE=

5.9.3.3. ST_AsGeoJSON

ST_AsGeoJSON -返回几何图形作为GeoJSON元素。

5.9.3.3.1. 概要
sql 复制代码
text ST_AsGeoJSON(record feature, text geomcolumnname, integer maxdecimaldigits=9, boolean pretty_bool=false);
text ST_AsGeoJSON(geometry geom, integer maxdecimaldigits=9, integer options=8);
text ST_AsGeoJSON(geography geog, integer maxdecimaldigits=9, integer options=0);
5.9.3.3.2. 描述

将几何图形返回为GeoJSON"几何"对象,或将行返回为GeoJSON"特征"对象。(参考GeoJSON规范RFC 7946)。2D和3D几何都支持。GeoJSON只支持SFS 1.1几何类型(例如不支持曲线)。

maxdecimaldigits参数可用于减少输出中使用的最大小数位数(默认为9)。如果您正在使用EPSG:4326并且仅为显示而输出几何图形,maxdecimaldigits=6可以是许多映射的好选择。

options参数可用于在GeoJSON输出中添加BBOX或CRS:

  • 0:表示无选项
  • 1:地理数据框
  • 2:GeoJSON Short CRS(例如 EPSG:4326)
  • 4:GeoJSON Long CRS(例如 urn:ogc:def:crs:EPSG::4326)
  • 8:GeoJSON 短 CRS(如果不是 EPSG:4326)(默认)
5.9.3.3.3. 示例
sql 复制代码
select json_build_object(
        'type', 'FeatureCollection',
        'features', json_agg(ST_AsGeoJSON(t.*)::json)
        )
from ( 
    values  (1, 'one', 'POINT(1 1)'::geometry),
            (2, 'two', 'POINT(2 2)'),
            (3, 'three', 'POINT(3 3)')
    ) as t(id, name, geom);
json 复制代码
{
    "type": "FeatureCollection",
    "features": [
        {
            "type": "Feature",
            "geometry": {
                "type": "Point",
                "coordinates": [
                    1,
                    1
                ]
            },
            "properties": {
                "id": 1,
                "name": "one"
            }
        },
        {
            "type": "Feature",
            "geometry": {
                "type": "Point",
                "coordinates": [
                    2,
                    2
                ]
            },
            "properties": {
                "id": 2,
                "name": "two"
            }
        },
        {
            "type": "Feature",
            "geometry": {
                "type": "Point",
                "coordinates": [
                    3,
                    3
                ]
            },
            "properties": ←-{
                "id": 3,
                "name": "three"
            }
        }
    ]
}
sql 复制代码
SELECT ST_AsGeoJSON(t.*)
FROM (VALUES
        (1, 'one', 'POINT(1 1)'::geometry),
        (2, 'two', 'POINT(2 2)'),
        (3, 'three', 'POINT(3 3)'))
AS t(id, name, geom);
st_asgeojson
{"type": "Feature", "geometry": {"type":"Point","coordinates":[1,1]}, "properties": {"id": 1, "name": "one"}}
{"type": "Feature", "geometry": {"type":"Point","coordinates":[2,2]}, "properties": {"id": 2, "name": "two"}}
{"type": "Feature", "geometry": {"type":"Point","coordinates":[3,3]}, "properties": {"id": 3, "name": "three"}}
  • 不要忘记将数据转换为WGS84经度、纬度,以符合RFC7946:
sql 复制代码
SELECT ST_AsGeoJSON(ST_Transform(geom,4326)) from fe_edges limit 1;
st_asgeojson
{"type":"MultiLineString","coordinates":[[[-89.734634999999997,31.492072000000000],[-89.734955999999997,31.492237999999997]]]}
  • 你也可以用它来处理3D几何体:
sql 复制代码
SELECT ST_AsGeoJSON('LINESTRING(1 2 3, 4 5 6)');
json 复制代码
{"type":"LineString","coordinates":[[1,2,3],[4,5,6]]}

5.9.3.4. ST_AsGML

ST_AsGML -返回几何图形作为GML版本2或3的元素。

5.9.3.4.1. 概要
sql 复制代码
text ST_AsGML(geometry geom, integer maxdecimaldigits=15, integer options=0);
text ST_AsGML(geography geog, integer maxdecimaldigits=15, integer options=0, text nprefix=null, text id=null);
text ST_AsGML(integer version, geometry geom, integer maxdecimaldigits=15, integer options=0, text nprefix=null, text id=null);
text ST_AsGML(integer version, geography geog, integer maxdecimaldigits=15, integer options=0, text nprefix=null, text id=null);
5.9.3.4.2. 描述

返回几何图形作为地理标记语言(Geography Markup Language, GML)元素。如果指定了版本参数,则可以是2或3。如果没有指定版本参数,则假定默认值为2。maxdecimaldigits参数可用于减少输出中使用的最大小数位数(默认为15)。

GML 2指2.1.2版本,GML 3指3.1.1版本

' options '参数是位域。它可以在GML输出中定义CRS输出类型,并将数据声明为lat/lon:

  • 0:GML短CRS(如EPSG:4326),默认值
  • 1:GML长CRS(例如:urn:ogc:def: CRS:EPSG::4326)
  • 2:仅对于GML 3,从输出中删除srsDimension属性。
  • 4:仅对于GML 3,使用<LineString>而不是<Curve>标记行。
  • 16:声明数据为经纬度(例如srid=4326)。默认情况下假定数据为平面。此选项仅对GML 3.1.1输出有用,与轴顺序相关。如果你设置它,它会交换坐标,order是lat而不是database lat。
  • 32:输出几何体的盒子(包络)。

' namespace prefix '参数可用于指定自定义命名空间前缀或不指定前缀(如果为空)。如果使用null或省略的' gml '前缀

5.9.3.4.3. 示例
  • Version 2
sql 复制代码
SELECT ST_AsGML(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326));
st_asgml
<gml:Polygon srsName="EPSG:4326">gml:outerBoundaryIsgml:LinearRinggml:coordinates0,0 0,1 1,1 1,0 0,0</gml:coordinates></ml:LinearRing></gml:outerBoundaryIs></gml:Polygon>
  • Version 3

    • 翻转坐标和输出扩展EPSG (16 | 1)
sql 复制代码
SELECT ST_AsGML(3, ST_GeomFromText('POINT(5.234234233242 6.34534534534)',4326), 5, 17);
st_asgml
<gml:Point srsName="urn:ogc:def:crs:EPSG::4326">gml:pos6.34535 5.23423</gml:pos></gml:Point>
sql 复制代码
SELECT ST_AsGML(3, ST_GeomFromText('LINESTRING(1 2, 3 4, 10 20)',4326), 5, 32);
<gml:Envelope srsName="EPSG:4326">
    <gml:lowerCorner>1 2</gml:lowerCorner>
    <gml:upperCorner>10 20</gml:upperCorner>
</gml:Envelope>
sql 复制代码
SELECT ST_AsGML(3, ST_GeomFromText('LINESTRING(1 2, 3 4, 10 20)',4326), 5, 49);
<gml:Envelope srsName="urn:ogc:def:crs:EPSG::4326">
    <gml:lowerCorner>2 1</gml:lowerCorner>
    <gml:upperCorner>20 10</gml:upperCorner>
</gml:Envelope>
sql 复制代码
SELECT ST_AsGML(3, ST_GeomFromEWKT('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)) )'));
gml 复制代码
<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>

5.9.3.5. ST_AsKML

ST_AsKML -返回几何图形作为KML元素。几个变种。默认版本=2,默认maxdecimaldigits=15

5.9.3.5.1. 概要
sql 复制代码
text ST_AsKML(geometry geom, integer maxdecimaldigits=15, text nprefix=NULL);
text ST_AsKML(geography geog, integer maxdecimaldigits=15, text nprefix=NULL);
5.9.3.5.2. 描述

返回几何图形作为Keyhole Markup Language (KML)元素。这个函数有几个变体。输出中使用的最大小数位数(默认为15),版本默认为2,默认命名空间没有前缀。

版本1:ST_AsKML(geom_or_geog, maxdecimaldigits) / Version =2 / maxdecimaldigits=15

版本2:ST_AsKML(Version, geom_or_geog, maxdecimaldigits, nprefix) maxdecimaldigits=15 / nprefix=NULL

需要PostGIS与Proj支持编译。使用PostGIS_Full_Version来确认您已经编译了项目支持。

可用性:1.2.2 -包含版本参数的后续版本在1.3.2中出现

增强:2.0.0 -添加前缀命名空间。默认为无前缀

更改:2.0.0 -使用默认参数并支持命名参数

AsKML输出不能处理没有SRID的几何图形
5.9.3.5.3. 示例
sql 复制代码
SELECT ST_AsKML(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326));
kml 复制代码
SELECT ST_AsKML(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326));
sql 复制代码
SELECT ST_AsKML('SRID=4326;LINESTRING(1 2 3, 4 5 6)');
kml 复制代码
<LineString><coordinates>1,2,3 4,5,6</coordinates></LineString>

5.9.3.6. ST_AsLatLonText

ST_AsLatLonText - 返回给定点的度、分、秒表示形式。

5.9.3.6.1. 概要
sql 复制代码
text ST_AsLatLonText(geometry pt, text format=");
5.9.3.6.2. 描述

返回点的度、分、秒表示形式。

假设点在一个纬度投影中。X (lon)和Y (lat)坐标在输出中被归一化为"正常"范围(lon为-180到+180,lat为-90到+90)。

text参数是一个格式字符串,包含结果文本的格式,类似于日期格式字符串。有效的标记是"D"表示度,"M"表示分钟,"S"表示秒,"C"表示基本方向(NSEW)。DMS令牌可以重复以指示所需的宽度和精度("SSS")。SSSS"的意思是"1.0023")。

"M"、"S"、"C"可选。如果省略"C",则在向南或向西的情况下以"-"号显示度数。如果省略"S",则分钟将显示为小数,其精度与您指定的位数相同。如果省略"M",则以十进制形式显示度数,其精度与您指定的位数相同。

如果省略格式字符串(或零长度),将使用默认格式。

5.9.3.6.3. 示例
sql 复制代码
SELECT (ST_AsLatLonText('POINT (-3.2342342 -2.32498)'));
st_aslatlontext
2\textdegree{}19'29.928"S 3\textdegree{}14'3.243"W
  • Providing a format (same as the default).
sql 复制代码
SELECT (ST_AsLatLonText('POINT (-3.2342342 -2.32498)', 'D\textdegree{}M''S.SSS"C'));
st_aslatlontext
2\textdegree{}19'29.928"S 3\textdegree{}14'3.243"W
sql 复制代码
SELECT (ST_AsLatLonText('POINT (-3.2342342 -2.32498)', 'D degrees, M minutes, S seconds to the C'));
st_aslatlontext
2 degrees, 19 minutes, 30 seconds to the S 3 degrees, 14 minutes, 3 seconds to the W
sql 复制代码
SELECT (ST_AsLatLonText('POINT (-3.2342342 -2.32498)', 'D\textdegree{}M''S.SSS"'));
st_aslatlontext
-2\textdegree{}19'29.928" -3\textdegree{}14'3.243"
sql 复制代码
SELECT (ST_AsLatLonText('POINT (-3.2342342 -2.32498)', 'D.DDDD degrees C'));
st_aslatlontext
2.3250 degrees S 3.2342 degrees W
sql 复制代码
SELECT (ST_AsLatLonText('POINT (-302.2342342 -792.32498)'));
st_aslatlontext
72\textdegree{}19'29.928"S 57\textdegree{}45'56.757"E

5.9.3.7. ST_AsMVTGeom

ST_AsMVTGeom -将一个几何体转换成一个Mapbox矢量贴图的坐标空间。

5.9.3.7.1. 概要
sql 复制代码
geometry ST_AsMVTGeom(geometry geom, box2d bounds, integer extent=4096, integer buffer=256, boolean clip_geom=true);
5.9.3.7.2. 描述

将一个几何体转换为对应于图层的一组行的Mapbox Vector Tile的坐标空间。尽最大努力保持甚至纠正有效性,并可能在过程中将几何坍缩为较低的维度。

  • Geom是要变换的几何。
  • bounds是没有缓冲区的贴图内容的几何边界。
  • extent是规范定义的瓷砖坐标空间中的瓷砖范围。如果为NULL,则默认为4096。
  • buffer是贴图坐标空间中的缓冲区距离,可选地裁剪几何图形。如果为NULL,则默认为256。
  • clip_geom是一个布尔值,用于控制几何图形是按原样裁剪还是编码。如果为NULL,则默认为true。
sql 复制代码
从3.0开始,可以在配置时选择和牛来剪辑和验证MVT多边形。这个库比GEOS默认库更快,产生更正确的结果,但它可能会丢失小的多边形。
5.9.3.7.3. 示例
sql 复制代码
SELECT ST_AsText(ST_AsMVTGeom(ST_GeomFromText('POLYGON ((0 0, 10 0, 10 5, 0 -5, 0 0))'),ST_MakeBox2D(ST_Point(0, 0), ST_Point(4096, 4096)),4096, 0, false));
st_astext
MULTIPOLYGON(((5 4096,10 4091,10 4096,5 4096)),((5 4096,0 4101,0 4096,5 4096)))

5.9.3.8. ST_AsMVT

ST_AsMVT - 返回一组行表示的Mapbox Vector Tile的聚合函数。

5.9.3.8.1. 概要
sql 复制代码
bytea ST_AsMVT(anyelement set row);
bytea ST_AsMVT(anyelement row, text name);
bytea ST_AsMVT(anyelement row, text name, integer extent);
bytea ST_AsMVT(anyelement row, text name, integer extent, text geom_name);
bytea ST_AsMVT(anyelement row, text name, integer extent, text geom_name, text feature_id_name);
5.9.3.8.2. 描述

一个聚合函数,它返回一个二进制Mapbox Vector Tile表示,表示与Tile层相对应的一组行。行应该包含一个几何列,该列将被编码为特征几何。几何图形应该在tile坐标空间中,并且根据MVT规范有效。ST_AsMVTGeom可用于将几何图形转换为tile坐标空间。

其他行列被编码为特性属性。

Mapbox矢量贴图格式可以存储具有不同属性集的特征。要使用此功能,请在包含一层深度Json对象的行数据中提供JSONB列。JSONB值中的键和值将被编码为特性属性。

可以通过使用||连接对该函数的多次调用来创建具有多个层的tile。

不要在行中调用作为元素的GEOMETRYCOLLECTION。但是,您可以使用ST_AsMVTGeom来准备一个要包含的几何集合。

row 至少具有一个几何列的行数据。

Name是图层的名称。Default是字符串" Default "。

extent是规范定义的屏幕空间中的平铺范围。默认值是4096。

Geom_name是行数据中几何列的名称。默认是第一个几何列。

"feature_id_name"是data行中"Feature ID"列的名称。如果为NULL或为负值,则不设置Feature ID。匹配名称和有效类型(smallint, integer, bigint)的第一个列将被用作Feature ID,任何后续列将被添加为属性。不支持JSON属性。

增强:3.0 -增加了对特性ID的支持。

增强:2.5.0 -增加了并行查询的支持

5.9.3.8.3. 示例
sql 复制代码
WITH mvtgeom AS
(
    SELECT ST_AsMVTGeom(geom, ST_TileEnvelope(12, 513, 412), extent => 4096, buffer => 64) AS ←-
    geom, name, description
    FROM points_of_interest
    WHERE geom && ST_TileEnvelope(12, 513, 412, margin => (64.0 / 4096))
)
SELECT ST_AsMVT(mvtgeom.*) FROM mvtgeom;

5.9.3.9. ST_AsSVG

ST_AsSVG -返回几何图形的SVG路径数据。

5.9.3.9.1. 概要
sql 复制代码
text ST_AsSVG(geometry geom, integer rel=0, integer maxdecimaldigits=15);
text ST_AsSVG(geography geog, integer rel=0, integer maxdecimaldigits=15);
5.9.3.9.2. 描述

将几何图形返回为标量矢量图形(SVG)路径数据。使用1作为第二个参数,以相对移动的方式实现路径数据,默认值(或0)使用绝对移动。第三个参数可用于减少输出中使用的十进制位数的最大数目(默认为15)。当' rel '参数为0时,点几何图形将渲染为cx/cy,当' rel '为1时,渲染为x/y。多点几何图形由逗号(",")分隔,GeometryCollection几何图形由分号(";")分隔。

5.9.3.9.3. 示例
sql 复制代码
SELECT ST_AsSVG('POLYGON((0 0,0 1,1 1,1 0,0 0))');
st_assvg
M 0 0 L 0 -1 1 -1 1 0 Z

5.9.3.10. ST_AsTWKB

ST_AsTWKB -返回几何图形为TWKB,又名"微小的知名二进制"

5.9.3.10.1. 概要
sql 复制代码
bytea ST_AsTWKB(geometry g1, integer decimaldigits_xy=0, integer decimaldigits_z=0, integer decimaldigits_m=0, boolean
include_sizes=false, boolean include_bounding boxes=false);

bytea ST_AsTWKB(geometry[] geometries, bigint[] unique_ids, integer decimaldigits_xy=0, integer decimaldigits_z=0, integer
decimaldigits_m=0, boolean include_sizes=false, boolean include_bounding_boxes=false);
5.9.3.10.2. 描述

以TWKB (Tiny known Binary)格式返回几何图形。TWKB是一种压缩的二进制格式,其重点是尽量减少输出的大小。

十进制数字参数控制输出中存储的精度。默认情况下,在编码前将值四舍五入到最接近的单位。如果你想传递更精确,增加数字。例如,值1表示将保留小数点右边的第一个数字。

大小和边界框参数控制是否在输出中包含关于对象的编码长度和对象边界的可选信息。默认情况下,它们不是。除非您的客户端软件需要它们,否则不要打开它们,因为它们只会占用空间(节省空间是TWKB的意义所在)。

该函数的数组输入形式用于将几何图形和唯一标识符的集合转换为保留这些标识符的TWKB集合。这对于希望解包一个集合,然后访问其中对象的进一步信息的客户端很有用。可以使用array_agg函数创建数组。其他参数的操作与函数的简单形式相同。

5.9.3.10.3. 示例
sql 复制代码
SELECT ST_AsTWKB('LINESTRING(1 1,5 5)'::geometry);
st_astwkb
\x02000202020808

要创建包含标识符的聚合TWKB对象,首先使用"array_agg()"聚合所需的几何图形和对象,然后调用适当的TWKB函数。

sql 复制代码
SELECT ST_AsTWKB(array_agg(geom), array_agg(gid)) FROM mytable;
st_astwkb
\x040402020400000202

5.9.3.11. ST_AsX3D

ST_AsX3D -返回X3D xml节点元素格式的几何体:ISO-IEC-19776-1.2-X3DEncodings-XML

5.9.3.11.1. 概要
sql 复制代码
text ST_AsX3D(geometry g1, integer maxdecimaldigits=15, integer options=0);
5.9.3.11.2. 描述

返回一个几何体作为X3D xml格式的节点元素http://www.web3d.org/standards/number/19776-1。如果maxdecimaldigits(precision)未指定,则默认为15。

sql 复制代码
由于X3D几何类型不能直接映射到PostGIS几何类型,因此有多种将PostGIS几何类型转换为X3D的选项,而且由于大多数渲染工具目前不支持一些较新的X3D类型,因此我们避免了一些较好的映射。这些是我们已经确定的映射。如果你对我们允许人们表示他们喜欢的映射的想法或方法有任何想法,请随意发布错误票。下面是我们目前如何将PostGIS 2D/3D类型映射到X3D类型

' options '参数是位域。对于PostGIS 2.2+,这用于表示是否用X3D GeoCoordinates Geospatial节点表示坐标,以及是否翻转x/y轴。默认情况下,ST_AsX3D以数据库形式输出(long,lat或X,Y),但X3D默认的lat/lon, Y / X可能是首选。

  • 0:数据库顺序中的X/Y(例如long/lat = X,Y是标准数据库顺序),默认值和非空间坐标(只是常规的旧坐标标签)。
  • 1:翻转X和y。如果与GeoCoordinate选项开关一起使用,那么输出将是默认的"latitude_first",坐标也将被翻转。
  • 2:在GeoSpatial GeoCoordinates中输出坐标。如果几何图形不在WGS 84 long lat (srid: 4326)中,此选项将抛出错误。这是目前唯一支持的GeoCoordinate类型。参考指定空间参考系统的X3D规范。默认输出将是GeoCoordinate geoSystem= ' "GD" "WE" "longitude_first" '。如果你喜欢X3D GeoCoordinate的默认值geoSystem= ' ' GD ' ' ' WE ' ' latitude_first ' '使用(2 + 1)= 3
PostGIS Type 2D X3D Type 3D X3D Type
LINESTRING not yet implemented - will be PolyLine2D LineSet
MULTILINESTRING not yet implemented - will be PolyLine2D IndexedLineSet
MULTIPOINT Polypoint2D PointSet
POINT outputs the space delimited coordinates outputs the space delimited coordinates
(MULTI) POLYGON,POLYHEDRALSURFACE Invalid X3D markup IndexedFaceSet (inner rings currentlyoutput as another faceset)
TIN TriangleSet2D (Not Yet Implemented) IndexedTriangleSet
5.9.3.11.3. 示例
sql 复制代码
SELECT '<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.0//EN" "http://www.web3d.org/specifications/x3d ←-
-3.0.dtd">
<X3D>
<Scene>
<Transform>
<Shape>
<Appearance>
<Material emissiveColor=''0 0 1''/>
</Appearance> ' ||
ST_AsX3D( ST_GeomFromEWKT('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)) )')) ||
'</Shape>
</Transform>
</Scene>
</X3D>' As x3ddoc;
xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.0//EN" "http://www.web3d.org/specifications/x3d ←-
-3.0.dtd">
<X3D>
    <Scene>
        <Transform>
            <Shape>
                <Appearance>
                    <Material emissiveColor='0 0 1'/>
                </Appearance>
                <IndexedFaceSet coordIndex='0 1 2 3 -1 4 5 6 7 -1 8 9 10 11 -1 12 13 14 15 -1 16 17 18 19 -1 20 21 22 23'>
                <Coordinate point='0 0 0 0 0 1 0 1 1 0 1 0 0 0 0 0 1 0 1 1 0 1 0 0 0 0 0 1 0 0 1 0 1 0 0 1 1 1 0 1 1 1 1 0 1 1 0 0 0 1 0 0 1 1 1 1 1 1 1 0 0 0 1 1 0 1 1 1 1 0 1 1' />
                </IndexedFaceSet>
            </Shape>
        </Transform>
    </Scene>
</X3D>
sql 复制代码
SELECT ST_AsX3D(
            ST_Translate(
                ST_Force_3d(
                    ST_Buffer(ST_Point(10,10),5, 'quad_segs=2')), 0,0,
            3)
        ,6) As x3dfrag;
<IndexedFaceSet coordIndex="0 1 2 3 4 5 6 7">
    <Coordinate point="15 10 3 13.535534 6.464466 3 10 5 3 6.464466 6.464466 3 5 10 3 6.464466 13.535534 3 10 15 3 13.535534 13.535534 3 " />
</IndexedFaceSet>
sql 复制代码
SELECT ST_AsX3D(ST_GeomFromEWKT('TIN (((
0 0 0,
0 0 1,
0 1 0,
0 0 0
)), ((
0 0 0,
0 1 0,
1 1 0,
0 0 0
))
)')) As x3dfrag;
<IndexedTriangleSet index='0 1 2 3 4 5'><Coordinate point='0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 1 1 0'/></IndexedTriangleSet>
sql 复制代码
SELECT ST_AsX3D(ST_GeomFromEWKT('MULTILINESTRING((20 0 10,16 -12 10,0 -16 10,-12 -12 10,-20 0 10,-12 16 10,0 24 10,16 16 10,20 0 10),(12 0 10,8 8 10,0 12 10,-8 8 10,-8 0 10,-8 -4 10,0 -8 10,8 -4 10,12 0 10))')) As x3dfrag;
<IndexedLineSet coordIndex='0 1 2 3 4 5 6 7 0 -1 8 9 10 11 12 13 14 15 8'>
<Coordinate point='20 0 10 16 -12 10 0 -16 10 -12 -12 10 -20 0 10 -12 16 10 0 24 10 16 16 10 12 0 10 8 8 10 0 12 10 -8 8 10 -8 0 10 -8 -4 10 0 -8 10 8 -4 10 ' />
</IndexedLineSet>

5.9.3.12. ST_GeoHash

ST_GeoHash -返回几何图形的GeoHash表示。

5.9.3.12.1. 概要
sql 复制代码
text ST_GeoHash(geometry geom, integer maxchars=full_precision_of_point);
5.9.3.12.2. 描述

返回几何图形的GeoHash表示(http://en.wikipedia.org/wiki/Geohash)。GeoHash将一个点编码成一个文本形式,该文本形式可基于前缀进行排序和搜索。较短的GeoHash表示点的精度较低。它也可以被看作是一个盒子,它包含了实际的点。

如果没有指定maxchars,则ST_GeoHash返回基于输入几何类型的全精度的GeoHash。点返回一个精度为20个字符的GeoHash(大约足以容纳输入的完整双精度)。其他类型根据特性的大小返回精度可变的GeoHash。较大的特征表示精度较低,较小的特征表示精度较高。其思想是GeoHash隐含的框将始终包含输入特性。

如果指定了maxchars,则ST_GeoHash返回一个最多包含100个字符的GeoHash,因此可能是输入几何形状的较低精度表示。对于非点,计算的起点是几何体边界框的中心。

ST_GeoHash不能处理非地理(经纬度)坐标的几何图形。
5.9.3.12.3. 示例
sql 复制代码
SELECT ST_GeoHash(ST_SetSRID(ST_MakePoint(-126,48),4326));
st_geohash
c0w3hf1s70w3hf1s70w3
sql 复制代码
SELECT ST_GeoHash(ST_SetSRID(ST_MakePoint(-126,48),4326),5);
st_geohash
c0w3h