PostGIS:几何图形输出

这篇具有很好参考价值的文章主要介绍了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. 概要
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. 样例
SELECT ST_AsEWKT('0103000020E61000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000'::geometry);
st_asewkt
SRID=4326;POLYGON((0 0,0 1,1 1,1 0,0 0))
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. 概要
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. 样例
SELECT ST_AsText('01030000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000');
st_astext
POLYGON((0 0,0 1,1 1,1 0,0 0))
SELECT ST_AsText(GeomFromEWKT('SRID=4326;POINT(111.1111111 1.1111111)'))
st_astext
POINT(111.1111111 1.1111111)
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. 概要
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. 样例
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
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. 概要
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. 示例
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. 概要
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. 示例
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. 概要
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. 示例
  • 基础
SELECT ST_AsEncodedPolyline(GeomFromEWKT('SRID=4326;LINESTRING(-120.2 38.5,-120.95 40.7,-126.453 43.252)'));
result
  • 结合地理线串和地理分段使用,并放在谷歌地图上
--从波士顿到旧金山的SQL,每100公里分段
SELECT ST_AsEncodedPolyline(ST_Segmentize(ST_GeogFromText('LINESTRING(-71.0519 42.4935,-122.4483 37.64)'),100000)::geometry) As encodedFlightPath;
  • Javascript将看起来像这样,其中$变量将替换为查询结果
<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. 概要
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. 示例
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. 概要
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. 示例
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);
{
    "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"
            }
        }
    ]
}
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:
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几何体:
SELECT ST_AsGeoJSON('LINESTRING(1 2 3, 4 5 6)');
{"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. 概要
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
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)
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>
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>
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>
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: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. 概要
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. 示例
SELECT ST_AsKML(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326));
SELECT ST_AsKML(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326));
SELECT ST_AsKML('SRID=4326;LINESTRING(1 2 3, 4 5 6)');
<LineString><coordinates>1,2,3 4,5,6</coordinates></LineString>
5.9.3.6. ST_AsLatLonText

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

5.9.3.6.1. 概要
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. 示例
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).
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
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
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"
SELECT (ST_AsLatLonText('POINT (-3.2342342 -2.32498)', 'D.DDDD degrees C'));
st_aslatlontext
2.3250 degrees S 3.2342 degrees W
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. 概要
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。
3.0开始,可以在配置时选择和牛来剪辑和验证MVT多边形。这个库比GEOS默认库更快,产生更正确的结果,但它可能会丢失小的多边形。
5.9.3.7.3. 示例
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. 概要
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. 示例
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. 概要
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. 示例
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. 概要
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. 示例
SELECT ST_AsTWKB('LINESTRING(1 1,5 5)'::geometry);
st_astwkb
\x02000202020808

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

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. 概要
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。

由于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. 示例
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 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>
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>
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>
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. 概要
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,因此可能是输入几何形状的较低精度表示。对于非点,计算的起点是几何体边界框的中心。文章来源地址https://www.toymoban.com/news/detail-604680.html

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

到了这里,关于PostGIS:几何图形输出的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Procedural Mesh: 创建复杂的3D几何图形

    Procedural Mesh 是一个用于创建复杂3D几何图形的开源库,由 Morten Nobel 开发并维护。它允许开发者通过程序化的方式生成各种形状和结构,无需手动设计每个顶点和面。 Procedural Mesh 提供了一系列函数和工具,可以帮助开发者轻松地生成自定义的3D网格。这些功能包括: 基础形状

    2024年03月15日
    浏览(42)
  • opencv进阶02-在图像上绘制多种几何图形

    OpenCV 提供了方便的绘图功能,使用其中的绘图函数可以绘制直线、矩形、圆、椭圆等多种几何图形,还能在图像中的指定位置添加文字说明。 OpenCV 提供了绘制直线的函数 cv2.line()、绘制矩形的函数 cv2.rectangle()、绘制圆的函数cv2.circle()、绘制椭圆的函数cv2.ellipse()、绘制多边形

    2024年02月12日
    浏览(54)
  • 几何引擎 & 约束求解器 & 3D仿真物理引擎 & 图形引擎

    四大技术图谱就像四座护法金刚,形成了深不可测的技术鸿沟。这对于任何一个工业软件企业,十年发展的沉淀,那还只是开始。这条路,太漫长了。 Software Vendor Domain 3D-kernel 4MCAD IntelliCAD 4M S.A., Greece CAD, AEC Open CASCADE Technology Adams MSC Software, USA CAE Parasolid ADEM ADEM, Russia-Israel

    2024年02月08日
    浏览(39)
  • 计算机视觉 图像形成 几何图形和变换 3D到2D投影

            现在我们知道如何表示2D和3D几何图元以及如何在空间上转换它们,我们需要指定如何将 3D图元投影到图像平面上。 我们可以使用线性3D到2D投影矩阵来做到这一点。最简单的模型是正交法,它不需要除法就可以得到最终的(不均匀的)结果。更常用的模型是透视,

    2023年04月08日
    浏览(64)
  • 图形编辑器开发:一些会用到的简单几何算法

    大家好,我是前端西瓜哥。 开发图形编辑器,你会经常要解决一些算法问题。本文盘点一些我开发图形编辑器时遇到的简单几何算法问题。 判断两个矩形是否发生碰撞(或者说相交),即两个矩形有重合的区域。 常见使用场景: 使用选择工具 框选 图形(框选策略除了相交

    2024年02月16日
    浏览(52)
  • CG3-v2.0-图形几何变换

    (1) 理解几何变换基本原理, 掌握平移、旋转、缩放变换的方法; (2) 根据平移算法原理补全translation、scale、rotation_x、rotation_y和rotation_z函数; (3) 根据几何变换基本原理,将main函数中的translation、scale、rotation_z参数补充完整。

    2024年02月08日
    浏览(51)
  • Qt+opencv 鼠标画线实现几何图形识别并动态创建

    使用Qt + OpenCV实现,通过鼠标画线绘制几何图形,然后通过opencv进行图形轮廓识别,返回图形顶点,然后创建对应的几何图形添加到场景中。绘制使用QGraphics体系完成。 看效果图: 本文demo在这里 点击下载 环境: Qt5.15.2 + vs2019 64bit 支持图形:直线、圆、椭圆、矩形、三角形。

    2024年02月10日
    浏览(74)
  • 基于EasyX学习图形学中的三维几何变换【全】

    本文开始学习几何变换中的三维变换,对于各种变换的定义方法基本和二维变换一样,在此我就不过多赘述了。 三维变换矩阵 由于二维变换矩阵为三阶矩阵,所以三维变换矩阵为四阶矩阵 以下例子均在此正方体基础上 坐标表示 矩阵表示 变换矩阵 核心代码 效果展示 坐标表

    2024年02月09日
    浏览(48)
  • 【干货分享】如何一键打造理想露营地?春日露营,即刻出发!Python | 建模 | 3D | 图形引擎| 几何引擎

    在这个快节奏的时代,我们都渴望找到一片属于自己的宁静角落。 你是否曾畅想在星空下,与大自然亲密接触,享受露营的乐趣🌌 但是,想到搭建帐篷、生火、布置灯光等一系列繁琐的准备工作,又望而却步😖 想象一下 大包小包,拖家带口 ,还要为应对各种突发情况准备

    2024年03月23日
    浏览(43)
  • SVG的一些基础知识,包括SVG坐标系统、支持的几何图形和样式,动画的基础知识,包括基本动画和路径动画

    SVG(可缩放矢量图形)是一种使用XML格式定义的图像格式,它可以将二维图像呈现为任意大小的图像,而不会产生像素化。由于它的矢量设计,SVG成为了实现各种图形和动画的理想平台。在本文中,我们将探讨如何使用SVG实现图形和动画。 在开始之前,让我们首先了解一下

    2024年02月03日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包