Bayanbulake

2021/11/26  阅读：20  主题：自定义主题1

# [第二篇] PostGIS：“我让PG更完美！”

### PostGIS Reference

#### ST_Collect

Creates a GeometryCollection or Multi* geometry from a set of geometries.

``//语法geometry ST_Collect(geometry g1, geometry g2);geometry ST_Collect(geometry[] g1_array);geometry ST_Collect(geometry set g1field);``

#### ST_LineFromMultiPoint

Creates a LineString from a MultiPoint geometry.

``//语法geometry ST_LineFromMultiPoint(geometry aMultiPoint);``

#### ST_MakeEnvelope

ST_MakeEnvelope — Creates a rectangular Polygon from minimum and maximum coordinates.

``//语法geometry ST_MakeEnvelope(float xmin, float ymin, float xmax, float ymax, integer srid=unknown);//示例SELECT ST_AsText( ST_MakeEnvelope(10, 10, 11, 11, 4326) );st_asewkt-----------POLYGON((10 10, 10 11, 11 11, 11 10, 10 10))``

#### ST_MakeLine

Creates a Linestring from Point, MultiPoint, or LineString geometries.

``//语法geometry ST_MakeLine(geometry geom1, geometry geom2);geometry ST_MakeLine(geometry[] geoms_array);geometry ST_MakeLine(geometry set geoms);``

#### ST_MakePoint

``//语法geometry ST_MakePoint(float x, float y);geometry ST_MakePoint(float x, float y, float z);geometry ST_MakePoint(float x, float y, float z, float m);``

#### ST_MakePointM

Creates a Point from X, Y and M values.

``//语法geometry ST_MakePointM(float x, float y, float m);//示例SELECT ST_AsEWKT( ST_MakePointM(-71.1043443253471, 42.3150676015829, 10) );st_asewkt-----------------------------------------------POINTM(-71.1043443253471 42.3150676015829 10)``

#### ST_MakePolygon

Creates a Polygon from a shell and optional list of holes.

``//语法geometry ST_MakePolygon(geometry linestring);geometry ST_MakePolygon(geometry outerlinestring, geometry[] interiorlinestrings);//示例SELECT ST_MakePolygon( ST_GeomFromText('LINESTRING(75 29,77 29,77 29, 75 29)'));//Create a Polygon from an open LineString, using ST_StartPoint and ST_AddPoint to close it.SELECT ST_MakePolygon( ST_AddPoint(foo.open_line, ST_StartPoint(foo.open_line)) )FROM (SELECT ST_GeomFromText('LINESTRING(75 29,77 29,77 29, 75 29)') As open_line) As foo;//Create a Polygon from a 3D LineStringSELECT ST_AsEWKT( ST_MakePolygon( 'LINESTRING(75.15 29.53 1,77 29 1,77.6 29.5 1, 75.1529.53 1)'));st_asewkt-----------POLYGON((75.15 29.53 1,77 29 1,77.6 29.5 1,75.15 29.53 1))//Create a Polygon from a LineString with measuresSELECT ST_AsEWKT( ST_MakePolygon( 'LINESTRINGM(75.15 29.53 1,77 29 1,77.6 29.5 2, 75.15 29.53 2)' ));st_asewkt----------POLYGONM((75.15 29.53 1,77 29 1,77.6 29.5 2,75.15 29.53 2))``

#### ST_Point

Creates a Point with the given coordinate values. Alias for ST_MakePoint.

``//语法geometry ST_Point(float x, float y);//示例 GeometrySELECT ST_SetSRID( ST_Point( -71.104, 42.315), 4326)//GeographySELECT CAST(ST_SetSRID( ST_Point( -71.104, 42.315), 4326) AS geography);//方法引用示例SELECT ST_SetSRID( ST_Point( -71.104, 42.315), 4326)::geography;////点坐标的重投影SELECT ST_Transform(ST_SetSRID( ST_Point( 3637510, 3014852 ), 2273), 4326)::geography;``

#### ST_Polygon

Creates a Polygon from a LineString with a specifified SRID.

``//语法geometry ST_Polygon(geometry lineString, integer srid);//Create a 2D polygon.SELECT ST_AsText( ST_Polygon('LINESTRING(75 29, 77 29, 77 29, 75 29)'::geometry, 4326) );-- result --POLYGON((75 29, 77 29, 77 29, 75 29))//Create a 3D polygon.SELECT ST_AsEWKT( ST_Polygon( ST_GeomFromEWKT('LINESTRING(75 29 1, 77 29 2, 77 29 3, 75 291)'), 4326) );-- result --SRID=4326;POLYGON((75 29 1, 77 29 2, 77 29 3, 75 29 1))``

#### ST_TileEnvelope

Creates a rectangular Polygon in Web Mercator (SRID:3857) using the XYZ tile system.

``//语法geometry ST_TileEnvelope(integer tileZoom, integer tileX, integer tileY, geometry bounds=SRID=3857;LINESTRING(-20037508.342789-20037508.342789,20037508.342789 20037508.342789));// Creates a rectangular Polygon in Web Mercator (SRID:3857) using the XYZ tile system.SELECT ST_AsText( ST_TileEnvelope(2, 1, 1) );st_astext------------------------------POLYGON((-10018754.1713945 0,-10018754.1713945 10018754.1713945,0 10018754.1713945,0 0,-10018754.1713945 0))SELECT ST_AsText( ST_TileEnvelope(3, 1, 1, ST_MakeEnvelope(-180, -90, 180, 90, 4326) ) );st_astext------------------------------------------------------POLYGON((-135 45,-135 67.5,-90 67.5,-90 45,-135 45))``

### Geometry Accessors

#### GeometryType

Returns the type of a geometry as text.

``//语法text GeometryType(geometry geomA);//示例SELECT GeometryType(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));geometrytype--------------LINESTRING//示例SELECT ST_GeometryType(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)) )'));--resultPOLYHEDRALSURFACE//示例SELECT GeometryType(geom) as resultFROM(SELECTST_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 geom) AS g;result--------TIN``

#### ST_Boundary

Returns the boundary of a geometry.

``//语法geometry ST_Boundary(geometry geomA);//示例SELECT ST_Boundary(geom)FROM (SELECT 'LINESTRING(100 150,50 60, ←-70 80, 160 170)'::geometry As geom) As f;-- ST_AsText outputMULTIPOINT(100 150,160 170)//示例SELECT ST_Boundary(geom)FROM (SELECT'POLYGON (( 10 130, 50 190, 110 190, 140 ←-150, 150 80, 100 10, 20 40, 10 130 ),( 70 40, 100 50, 120 80, 80 110, ←-50 90, 70 40 ))'::geometry As geom) As f;-- ST_AsText outputMULTILINESTRING((10 130,50 190,110 ←-190,140 150,150 80,100 10,20 40,10 130),(70 40,100 50,120 80,80 110,50 ←-90,70 40))``

#### ST_CoordDim

Return the coordinate dimension of a geometry.

``//语法integer **ST_CoordDim**(geometry geomA);//示例SELECT ST_CoordDim('CIRCULARSTRING(1 2 3, 1 3 4, 5 6 7, 8 9 10, 11 12 13)');---result--3//示例SELECT ST_CoordDim(ST_Point(1,2));--result--2``

#### ST_Dimension

Returns the topological dimension of a geometry.

``//语法integer ST_Dimension(geometry g);//示例SELECT ST_Dimension('GEOMETRYCOLLECTION(LINESTRING(1 1,0 0),POINT(0 0))');ST_Dimension-----------1``

#### ST_Dump

Returns a set of geometry_dump rows for the components of a geometry.

``//语法geometry_dump[] ST_Dump(geometry g1);//示例SELECT sometable.field1, sometable.field1, (ST_Dump(sometable.the_geom)).geom AS the_geomFROM sometable;-- Break a compound curve into its constituent linestrings and circularstringsSELECT ST_AsEWKT(a.geom), ST_HasArc(a.geom)FROM ( SELECT (ST_Dump(p_geom)).geom AS geomFROM (SELECT ST_GeomFromEWKT('COMPOUNDCURVE(CIRCULARSTRING(0 0, 1 1, 1 0),(1 0, 0 ←-1))') AS p_geom) AS b ) AS a;st_asewkt | st_hasarc-----------------------------+----------CIRCULARSTRING(0 0,1 1,1 0) | tLINESTRING(1 0,0 1) | f(2 rows)``

#### ST_DumpPoints

Returns a set of geometry_dump rows for the points in a geometry.

``//语法geometry_dump[]ST_DumpPoints(geometry geom);//示例SELECT edge_id, (dp).path[1] As index, ST_AsText((dp).geom) As wktnodeFROM (SELECT 1 As edge_id, ST_DumpPoints(ST_GeomFromText('LINESTRING(1 2, 3 4, 10 10)')) AS dpUNION ALLSELECT 2 As edge_id, ST_DumpPoints(ST_GeomFromText('LINESTRING(3 5, 5 6, 9 10)')) AS dp) As foo;edge_id | index | wktnode---------+-------+--------------1 | 1 | POINT(1 2)1 | 2 | POINT(3 4)1 | 3 | POINT(10 10)2 | 1 | POINT(3 5)2 | 2 | POINT(5 6)2 | 3 | POINT(9 10)``

#### ST_DumpRings

Returns a set of geometry_dump rows for the exterior and interior rings of a Polygon.

``//语法geometry_dump[] ST_DumpRings(geometry a_polygon);//示例SELECT sometable.field1, sometable.field1, (ST_DumpRings(sometable.the_geom)).geom As the_geomFROM sometableOfpolys;SELECT ST_AsEWKT(geom) As the_geom, pathFROM ST_DumpRings(ST_GeomFromEWKT('POLYGON((-8149064 5133092 1,-8149064 5132986 1,-8148996 5132839 ←-1,-8148972 5132767 1,-8148958 5132508 1,-8148941 5132466 1,-8148924 5132394 1,-8148903 5132210 1,-8148930 5131967 1,-8148992 5131978 1,-8149237 5132093 1,-8149404 ←-5132211 1,-8149647 5132310 1,-8149757 5132394 1,-8150305 5132788 1,-8149064 5133092 1),(-8149362 5132394 1,-8149446 5132501 1,-8149548 5132597 1,-8149695 5132675 1,-8149362 ←-5132394 1))')) as foo;path | the_geom----------------------------------------------------------------------------------------------------------------{0} | POLYGON((-8149064 5133092 1,-8149064 5132986 1,-8148996 5132839 1,-8148972 5132767 1,-8148958 5132508 1,| -8148941 5132466 1,-8148924 5132394 1,| -8148903 5132210 1,-8148930 5131967 1,| -8148992 5131978 1,-8149237 5132093 1,| -8149404 5132211 1,-8149647 5132310 1,-8149757 5132394 1,-8150305 5132788 ←-1,-8149064 5133092 1)){1} | POLYGON((-8149362 5132394 1,-8149446 5132501 1,| -8149548 5132597 1,-8149695 5132675 1,-8149362 5132394 1))``

#### ST_EndPoint

Returns the last point of a LineString or CircularLineString.

``//语法geometry ST_EndPoint(geometry g);//示例postgis=# SELECT ST_AsText(ST_EndPoint('LINESTRING(1 1, 2 2, 3 3)'::geometry));st_astext------------POINT(3 3)(1 row)postgis=# SELECT ST_EndPoint('POINT(1 1)'::geometry) IS NULL AS is_null;is_null----------t(1 row)``

#### ST_Envelope

Returns a geometry representing the bounding box of a geometry.

``//语法geometry ST_Envelope(geometry g1);//实例SELECT ST_AsText(ST_Envelope('POINT(1 3)'::geometry));st_astext------------POINT(1 3)(1 row)``

#### ST_BoundingDiagonal

Returns the diagonal of a geometry’s bounding box.

``//语法geometry ST_BoundingDiagonal(geometry geom, boolean fits=false);//示例SELECT ST_X(ST_StartPoint(ST_BoundingDiagonal(ST_Buffer(ST_MakePoint(0,0),10))));st_x-------10``

#### ST_ExteriorRing

Returns a LineString representing the exterior ring of a Polygon.

``//语法geometry ST_ExteriorRing(geometry a_polygon);//示例SELECT ST_AsEWKT(ST_ExteriorRing(ST_GeomFromEWKT('POLYGON((0 0 1, 1 1 1, 1 2 1, 1 1 1, 0 0 1))')));st_asewkt---------LINESTRING(0 0 1,1 1 1,1 2 1,1 1 1,0 0 1)``

#### ST_GeometryN

Return the Nth geometry element of a geometry collection.

``//语法geometry ST_GeometryN(geometry geomA, integer n);//示例SELECT n, ST_AsEWKT(ST_GeometryN(the_geom, n)) As geomewktFROM (VALUES (ST_GeomFromEWKT('MULTIPOINT(1 2 7, 3 4 7, 5 6 7, 8 9 10)') ),( ST_GeomFromEWKT('MULTICURVE(CIRCULARSTRING(2.5 2.5,4.5 2.5, 3.5 3.5), (10 11, 12 11))') ))As foo(the_geom)CROSS JOIN generate_series(1,100) nWHERE n <= ST_NumGeometries(the_geom);n | geomewkt---+-----------------------------------------1 | POINT(1 2 7)2 | POINT(3 4 7)3 | POINT(5 6 7)4 | POINT(8 9 10)1 | CIRCULARSTRING(2.5 2.5,4.5 2.5,3.5 3.5)2 | LINESTRING(10 11,12 11)``

#### ST_GeometryType

Returns the SQL-MM type of a geometry as text.

``//语法text ST_GeometryType(geometry g1);//示例SELECT ST_GeometryType(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 ←-29.31,77.29 29.07)'));--resultST_LineString``

#### ST_HasArc

Tests if a geometry contains a circular arc.

``//语法boolean ST_HasArc(geometry geomA);//示例SELECT ST_HasArc(ST_Collect('LINESTRING(1 2, 3 4, 5 6)', 'CIRCULARSTRING(1 1, 2 3, 4 5, 6 ←-7, 5 6)'));st_hasarc--------t``

#### ST_InteriorRingN

Returns the Nth interior ring (hole) of a Polygon.

``//语法geometry ST_InteriorRingN(geometry a_polygon, integer n);//示例SELECT ST_AsText(ST_InteriorRingN(the_geom, 1)) As the_geomFROM (SELECT ST_BuildArea(ST_Collect(ST_Buffer(ST_Point(1,2), 20,3),ST_Buffer(ST_Point(1, 2), 10,3))) As the_geom) as foo``

#### ST_IsPolygonCCW

Tests if Polygons have exterior rings oriented counter-clockwise and interior rings oriented clockwise.

``//语法boolean ST_IsPolygonCCW ( geometry geom );``

#### ST_IsPolygonCW

Tests if Polygons have exterior rings oriented clockwise and interior rings oriented counter-clockwise.

``//语法boolean ST_IsPolygonCW ( geometry geom );``

#### ST_IsClosed

Tests if a LineStrings’s start and end points are coincident. For a PolyhedralSurface tests if it is closed (volu

metric).

``//语法boolean ST_IsClosed(geometry g);//示例SELECT ST_IsClosed('LINESTRING(0 0, 1 1)'::geometry);st_isclosed-------------f(1 row)``

#### ST_IsCollection

Tests if a geometry is a geometry collection type.

``//语法boolean ST_IsCollection(geometry g);//示例SELECT ST_IsCollection('LINESTRING(0 0, 1 1)'::geometry);st_iscollection-------------f(1 row)``

#### ST_IsEmpty

Tests if a geometry is empty.

``//语法boolean ST_IsEmpty(geometry geomA);//示例SELECT ST_IsEmpty(ST_GeomFromText('GEOMETRYCOLLECTION EMPTY'));st_isempty------------t(1 row)``

#### ST_IsRing

Tests if a LineString is closed and simple.

``//语法boolean ST_IsRing(geometry g);//示例SELECT ST_IsRing(the_geom), ST_IsClosed(the_geom), ST_IsSimple(the_geom)FROM (SELECT 'LINESTRING(0 0, 0 1, 1 1, 1 0, 0 0)'::geometry AS the_geom) AS foo;st_isring | st_isclosed | st_issimple-----------+-------------+-------------t | t | t(1 row)``

#### ST_IsSimple

Tests if a geometry has no points of self-intersection or self-tangency.

``//语法boolean ST_IsSimple(geometry geomA);//示例SELECT ST_IsSimple(ST_GeomFromText('POLYGON((1 2, 3 4, 5 6, 1 2))'));st_issimple-------------t(1 row)``

#### ST_M

Returns the M coordinate of a Point.

``//语法float ST_M(geometry a_point)//示例SELECT ST_M(ST_GeomFromEWKT('POINT(1 2 3 4)'));st_m------4(1 row)``

#### ST_MemSize

Returns the amount of memory space a geometry takes.

``//语法integer ST_MemSize(geometry geomA);//示例SELECT pg_size_pretty(SUM(ST_MemSize(the_geom))) as totgeomsum,pg_size_pretty(SUM(CASE WHEN town = 'BOSTON' THEN ST_MemSize(the_geom) ELSE 0 END)) As ←-bossum,CAST(SUM(CASE WHEN town = 'BOSTON' THEN ST_MemSize(the_geom) ELSE 0 END)*1.00 /SUM(ST_MemSize(the_geom))*100 As numeric(10,2)) As perbosFROM towns;totgeomsum bossum perbos---------- ------ ------1522 kB 30 kB 1.99``

#### ST_NDims

Returns the coordinate dimension of a geometry.

``//语法integer ST_NDims(geometry g1);//示例SELECT ST_NDims(ST_GeomFromText('POINT(1 1)')) As d2point,ST_NDims(ST_GeomFromEWKT('POINT(1 1 2)')) As d3point,ST_NDims(ST_GeomFromEWKT('POINTM(1 1 0.5)')) As d2pointm;d2point | d3point | d2pointm---------+---------+----------2 | 3 | 3``

#### ST_NPoints

Returns the coordinate dimension of a geometry.

``//语法integer ST_NDims(geometry g1);//示例SELECT ST_NDims(ST_GeomFromText('POINT(1 1)')) As d2point,ST_NDims(ST_GeomFromEWKT('POINT(1 1 2)')) As d3point,ST_NDims(ST_GeomFromEWKT('POINTM(1 1 0.5)')) As d2pointm;d2point | d3point | d2pointm---------+---------+----------2 | 3 | 3``

#### ST_NPoints

Returns the number of points (vertices) in a geometry.

``//语法integer ST_NPoints(geometry g1);//示例SELECT ST_NPoints(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 ←-29.07)'));--result4``

#### ST_NRings

Returns the number of rings in a polygonal geometry.

``//语法integer ST_NRings(geometry geomA);//示例SELECT ST_NRings(the_geom) As Nrings, ST_NumInteriorRings(the_geom) As ninterringsFROM (SELECT ST_GeomFromText('POLYGON((1 2, 3 4, 5 6, 1 2))') As the_geom) As foo ←- ;nrings | ninterrings--------+-------------1 | 0(1 row)``

#### ST_NumGeometries

Returns the number of elements in a geometry collection.

``//语法integer ST_NumGeometries(geometry geom);//示例SELECT ST_NumGeometries(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 ←-29.31,77.29 29.07)'));--result1``

#### ST_NumInteriorRings

Returns the number of interior rings (holes) of a Polygon.

``//语法integer ST_NumInteriorRings(geometry a_polygon)//示例SELECT gid, field1, field2, ST_NumInteriorRings(the_geom) AS numholesFROM sometable;``

#### ST_NumInteriorRings

Returns the number of interior rings (holes) of a Polygon.

``//语法integer ST_NumInteriorRings(geometry a_polygon);//示例SELECT gid, field1, field2, ST_NumInteriorRings(the_geom) AS numholesFROM sometable;``

#### ST_NumInteriorRing

Returns the number of interior rings (holes) of a Polygon. Aias for ST_NumInteriorRings.

``//语法integer ST_NumInteriorRing(geometry a_polygon);//示例SELECT ST_NumPatches(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)) )'));--result6``

#### ST_NumPoints

Returns the number of points in a LineString or CircularString.

``//语法integer ST_NumPoints(geometry g1);//示例SELECT ST_NumPoints(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 ←-29.07)'));--result4``

#### ST_PatchN

Returns the Nth geometry (face) of a PolyhedralSurface.

``//语法geometry ST_PatchN(geometry geomA, integer n);//示例SELECT ST_AsEWKT(ST_PatchN(geom, 2)) As geomewktFROM (VALUES (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)) )')) ) As ←-foo(geom);geomewkt---+-----------------------------------------POLYGON((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0))``

#### ST_PointN

Returns the Nth point in the fifirst LineString or circular LineString in a geometry.

``//语法geometry ST_PointN(geometry a_linestring, integer n);//示例SELECT ST_AsText(ST_PointN(column1,generate_series(1, ST_NPoints(column1))))FROM ( VALUES ('LINESTRING(0 0, 1 1, 2 2)'::geometry) ) AS foo;st_astext------------POINT(0 0)POINT(1 1)POINT(2 2)(3 rows)``

#### ST_Points

Returns a MultiPoint containing all the coordinates of a geometry.

``//语法geometry ST_Points( geometry geom );//示例SELECT ST_AsText(ST_Points('POLYGON Z ((30 10 4,10 30 5,40 40 6, 30 10))'));--resultMULTIPOINT Z (30 10 4,10 30 5,40 40 6, 30 10 4)``

#### ST_StartPoint

Returns the fifirst point of a LineString.

``//语法geometry ST_StartPoint(geometry geomA);//示例SELECT ST_AsText(ST_StartPoint('LINESTRING(0 1, 0 2)'::geometry));st_astext------------POINT(0 1)(1 row)``

#### ST_Summary

Returns a text summary of the contents of a geometry.

``//语法text ST_Summary(geometry g);text ST_Summary(geography g);//示例SELECT ST_Summary(ST_GeomFromText('LINESTRING(0 0, 1 1)')) as geom,ST_Summary(ST_GeogFromText('POLYGON((0 0, 1 1, 1 2, 1 1, 0 0))')) geog;geom | geog-----------------------------+--------------------------LineString[B] with 2 points | Polygon[BGS] with 1 rings| ring 0 has 5 points:(1 row)``

#### ST_X

Returns the X coordinate of a Point.

``//语法float ST_X(geometry a_point);//示例SELECT ST_X(ST_GeomFromEWKT('POINT(1 2 3 4)'));st_x------1(1 row)``

#### ST_Y

Returns the Y coordinate of a Point.

``//语法float ST_Y(geometry a_point);//示例SELECT ST_Y(ST_GeomFromEWKT('POINT(1 2 3 4)'));st_y------2(1 row)``

#### ST_Z

Returns the Z coordinate of a Point.

``//语法float ST_Z(geometry a_point);//示例SELECT ST_Z(ST_GeomFromEWKT('POINT(1 2 3 4)'));st_z------3(1 row)``

#### ST_Zmflflag

Returns a code indicating the ZM coordinate dimension of a geometry.

``//语法smallint ST_Zmflag(geometry geomA);//示例SELECT ST_Zmflag(ST_GeomFromEWKT('LINESTRING(1 2, 3 4)'));st_zmflag-----------0``

### Geometry Editors

Add a point to a LineString.

``//语法geometry ST_AddPoint(geometry linestring, geometry point);geometry ST_AddPoint(geometry linestring, geometry point, integer position);//示例UPDATE sometableSET the_geom = ST_AddPoint(the_geom, ST_StartPoint(the_geom))FROM sometableWHERE ST_IsClosed(the_geom) = false;--Adding point to a 3-d lineSELECT ST_AsEWKT(ST_AddPoint(ST_GeomFromEWKT('LINESTRING(0 0 1, 1 1 1)'), ST_MakePoint(1, 2, 3)));--resultst_asewkt----------LINESTRING(0 0 1,1 1 1,1 2 3)``

#### ST_CollectionExtract

Given a (multi)geometry, return a (multi)geometry consisting only of elements of the specifified type.

``//语法geometry ST_CollectionExtract(geometry collection, integer type);//示例-- Constants: 1 == POINT, 2 == LINESTRING, 3 == POLYGONSELECT ST_AsText(ST_CollectionExtract(ST_GeomFromText('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(0 0)))'),1));st_astext---------------MULTIPOINT(0 0)(1 row)SELECT ST_AsText(ST_CollectionExtract(ST_GeomFromText('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(LINESTRING(0 0, 1 1)),LINESTRING(2 2, 3 3))'),2));st_astext---------------MULTILINESTRING((0 0, 1 1), (2 2, 3 3))(1 row)``

#### ST_CollectionHomogenize

Given a geometry collection, return the "simplest" representation of the contents.

``//语法geometry ST_CollectionHomogenize(geometry collection);//示例SELECT ST_AsText(ST_CollectionHomogenize('GEOMETRYCOLLECTION(POINT(0 0))'));st_astext------------POINT(0 0)(1 row)SELECT ST_AsText(ST_CollectionHomogenize('GEOMETRYCOLLECTION(POINT(0 0),POINT(1 1))'));st_astext---------------------MULTIPOINT(0 0,1 1)(1 row)``

#### ST_Force2D

Force the geometries into a "2-dimensional mode".

``//语法geometry ST_Force2D(geometry geomA);//示例SELECT ST_AsEWKT(ST_Force2D(ST_GeomFromEWKT('CIRCULARSTRING(1 1 2, 2 3 2, 4 5 2, 6 7 2, 5 6 ←-2)')));st_asewkt-------------------------------------CIRCULARSTRING(1 1,2 3,4 5,6 7,5 6)SELECT ST_AsEWKT(ST_Force2D('POLYGON((0 0 2,0 5 2,5 0 2,0 0 2),(1 1 2,3 1 2,1 3 2,1 1 2)) ←-'));st_asewkt----------------------------------------------POLYGON((0 0,0 5,5 0,0 0),(1 1,3 1,1 3,1 1))``

#### ST_Force3D

Force the geometries into XYZ mode. This is an alias for ST_Force3DZ.

``//语法geometry ST_Force3D(geometry geomA);//示例--Nothing happens to an already 3D geometrySELECT ST_AsEWKT(ST_Force3D(ST_GeomFromEWKT('CIRCULARSTRING(1 1 2, 2 3 2, 4 5 2, 6 7 2, 5 6 2)')));st_asewkt-----------------------------------------------CIRCULARSTRING(1 1 2,2 3 2,4 5 2,6 7 2,5 6 2)SELECT ST_AsEWKT(ST_Force3D('POLYGON((0 0,0 5,5 0,0 0),(1 1,3 1,1 3,1 1))'));st_asewkt--------------------------------------------------------------POLYGON((0 0 0,0 5 0,5 0 0,0 0 0),(1 1 0,3 1 0,1 3 0,1 1 0))``

#### ST_Force3DZ

Force the geometries into XYZ mode.

``//语法geometry ST_Force3DZ(geometry geomA);//示例--Nothing happens to an already 3D geometrySELECT ST_AsEWKT(ST_Force3DZ(ST_GeomFromEWKT('CIRCULARSTRING(1 1 2, 2 3 2, 4 5 2, 6 7 2, 56 2)')));st_asewkt-----------------------------------------------CIRCULARSTRING(1 1 2,2 3 2,4 5 2,6 7 2,5 6 2)SELECT ST_AsEWKT(ST_Force3DZ('POLYGON((0 0,0 5,5 0,0 0),(1 1,3 1,1 3,1 1))'));st_asewkt--------------------------------------------------------------POLYGON((0 0 0,0 5 0,5 0 0,0 0 0),(1 1 0,3 1 0,1 3 0,1 1 0))``

#### ST_Force3DM

ST_Force3DM — Force the geometries into XYM mode.

``//语法geometry ST_Force3DM(geometry geomA);//示例--Nothing happens to an already 3D geometrySELECT ST_AsEWKT(ST_Force3DM(ST_GeomFromEWKT('CIRCULARSTRING(1 1 2, 2 3 2, 4 5 2, 6 7 2, 56 2)')));st_asewkt------------------------------------------------CIRCULARSTRINGM(1 1 0,2 3 0,4 5 0,6 7 0,5 6 0)SELECT ST_AsEWKT(ST_Force3DM('POLYGON((0 0 1,0 5 1,5 0 1,0 0 1),(1 1 1,3 1 1,1 3 1,1 1 1))'));st_asewkt---------------------------------------------------------------POLYGONM((0 0 0,0 5 0,5 0 0,0 0 0),(1 1 0,3 1 0,1 3 0,1 1 0))``

#### ST_Force4D

Force the geometries into XYZM mode.

``//语法geometry ST_Force4D(geometry geomA);//示例--Nothing happens to an already 3D geometrySELECT ST_AsEWKT(ST_Force4D(ST_GeomFromEWKT('CIRCULARSTRING(1 1 2, 2 3 2, 4 5 2, 6 7 2, 5 62)')));st_asewkt---------------------------------------------------------CIRCULARSTRING(1 1 2 0,2 3 2 0,4 5 2 0,6 7 2 0,5 6 2 0)SELECT ST_AsEWKT(ST_Force4D('MULTILINESTRINGM((0 0 1,0 5 2,5 0 3,0 0 4),(1 1 1,3 1 1,1 3 1,1 1 1))'));st_asewkt--------------------------------------------------------------------------------------MULTILINESTRING((0 0 0 1,0 5 0 2,5 0 0 3,0 0 0 4),(1 1 0 1,3 1 0 1,1 3 0 1,1 1 0 1))``

#### ST_ForcePolygonCCW

Orients all exterior rings counter-clockwise and all interior rings clockwise.

``//语法geometry **ST_ForcePolygonCCW** ( geometry geom );``

#### ST_ForceCollection

Convert the geometry into a GEOMETRYCOLLECTION.

``//语法geometry ST_ForceCollection(geometry geomA);//示例SELECT ST_AsEWKT(ST_ForceCollection('POLYGON((0 0 1,0 5 1,5 0 1,0 0 1),(1 1 1,3 1 1,1 3 ←-1,1 1 1))'));st_asewkt----------------------------------------------------------------------------------GEOMETRYCOLLECTION(POLYGON((0 0 1,0 5 1,5 0 1,0 0 1),(1 1 1,3 1 1,1 3 1,1 1 1)))SELECT ST_AsText(ST_ForceCollection('CIRCULARSTRING(220227 150406,2220227 150407,220227 ←-150406)'));st_astext--------------------------------------------------------------------------------GEOMETRYCOLLECTION(CIRCULARSTRING(220227 150406,2220227 150407,220227 150406))(1 row)-- POLYHEDRAL example --SELECT ST_AsEWKT(ST_ForceCollection('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)))'))st_asewkt----------------------------------------------------------------------------------GEOMETRYCOLLECTION(POLYGON((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0)),POLYGON((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)),POLYGON((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0)),POLYGON((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0)),POLYGON((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0)),POLYGON((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1)))``

#### ST_ForcePolygonCW

Orients all exterior rings clockwise and all interior rings counter-clockwise.

``//语法geometry ST_ForcePolygonCW ( geometry geom );``

#### ST_ForceSFS

``//语法geometry ST_ForceSFS(geometry geomA);geometry ST_ForceSFS(geometry geomA, text version);``

#### ST_ForceRHR

Force the orientation of the vertices in a polygon to follow the Right-Hand-Rule.

``//语法geometry ST_ForceRHR(geometry g);//示例SELECT ST_AsEWKT(ST_ForceRHR( 'POLYGON((0 0 2, 5 0 2, 0 5 2, 0 0 2),(1 1 2, 1 3 2, 3 1 2, 1 1 2))'));st_asewkt--------------------------------------------------------------POLYGON((0 0 2,0 5 2,5 0 2,0 0 2),(1 1 2,3 1 2,1 3 2,1 1 2))(1 row)``

#### ST_ForceCurve

Upcast a geometry into its curved type, if applicable.

``//语法geometry ST_ForceCurve(geometry g);//示例SELECT ST_AsText(ST_ForceCurve( 'POLYGON((0 0 2, 5 0 2, 0 5 2, 0 0 2),(1 1 2, 1 3 2, 3 1 2, 1 1 2))'::geometry));st_astext----------------------------------------------------------------------CURVEPOLYGON Z ((0 0 2,5 0 2,0 5 2,0 0 2),(1 1 2,1 3 2,3 1 2,1 1 2))(1 row)``

#### ST_LineMerge

Return a (set of) LineString(s) formed by sewing together a MULTILINESTRING.

``//语法geometry ST_LineMerge(geometry amultilinestring);//示例SELECT ST_AsText(ST_LineMerge(ST_GeomFromText('MULTILINESTRING((-29 -27,-30 -29.7,-36 -31,-45 -33),(-45 -33,-46 -32))')));st_astext-------------------------------------------------------------------------------------------------- ←-LINESTRING(-29 -27,-30 -29.7,-36 -31,-45 -33,-46 -32)(1 row)--If can't be merged - original MULTILINESTRING is returnedSELECT ST_AsText(ST_LineMerge(ST_GeomFromText('MULTILINESTRING((-29 -27,-30 -29.7,-36 -31,-45 -33),(-45.2 -33.2,-46 -32)) ←-')));st_astext----------------MULTILINESTRING((-45.2 -33.2,-46 -32),(-29 -27,-30 -29.7,-36 -31,-45 -33))-- example with Z dimensionSELECT ST_AsText(ST_LineMerge(ST_GeomFromText('MULTILINESTRING((-29 -27 11,-30 -29.7 10,-36 -31 5,-45 -33 6), (-29 -27 ←-12,-30 -29.7 5), (-45 -33 1,-46 -32 11))')));st_astext-------------------------------------------------------------------------------------------------- ←-LINESTRING Z (-30 -29.7 5,-29 -27 11,-30 -29.7 10,-36 -31 5,-45 -33 1,-46 -32 11)(1 row)``

#### ST_Multi

Return the geometry as a MULTI* geometry.

``//语法geometry ST_Multi(geometry g1);//示例SELECT ST_AsText(ST_Multi(ST_GeomFromText('POLYGON((743238 2967416,743238 2967450,743265 2967450,743265.625 2967416,743238 2967416))')));st_astextPostGIS 3.0.5dev Manual 170 / 841--------------------------------------------------------------------------------------------------MULTIPOLYGON(((743238 2967416,743238 2967450,743265 2967450,743265.625 2967416,743238 2967416)))(1 row)``

#### ST_Normalize

Return the geometry in its canonical form.

``//语法geometry ST_Normalize(geometry geom);//示例SELECT ST_AsText(ST_Normalize(ST_GeomFromText( 'GEOMETRYCOLLECTION(POINT(2 3),MULTILINESTRING((0 0, 1 1),(2 2, 3 3)),POLYGON((0 10,0 0,10 0,10 10,0 10),(4 2,2 2,2 4,4 4,4 2),(6 8,8 8,8 6,6 6,6 8)))')));st_astext---------------------------------------------------------------------------------------------------------------------------------------------------- ←-GEOMETRYCOLLECTION(POLYGON((0 0,0 10,10 10,10 0,0 0),(6 6,8 6,8 8,6 8,6 6),(2 2,4 2,4 4,2 ←-4,2 2)),MULTILINESTRING((2 2,3 3),(0 0,1 1)),POINT(2 3))(1 row)``

#### ST_QuantizeCoordinates

Sets least signifificant bits of coordinates to zero.

``//语法geometry ST_QuantizeCoordinates ( geometry g , int prec_x , int prec_y , int prec_z , int prec_m );//示例SELECT ST_AsText(ST_QuantizeCoordinates('POINT (100.123456 0)'::geometry, 4));st_astext-------------------------POINT(100.123455047607 0)WITH test AS (SELECT 'POINT (123.456789123456 123.456789123456)'::geometry AS geom)SELECTdigits,encode(ST_QuantizeCoordinates(geom, digits), 'hex'),ST_AsText(ST_QuantizeCoordinates(geom, digits))FROM test, generate_series(15, -15, -1) AS digits;digits | encode | st_astext--------+--------------------------------------------+------------------------------------------15 | 01010000005f9a72083cdd5e405f9a72083cdd5e40 | POINT(123.456789123456 ←-123.456789123456)14 | 01010000005f9a72083cdd5e405f9a72083cdd5e40 | POINT(123.456789123456 ←-123.456789123456)13 | 01010000005f9a72083cdd5e405f9a72083cdd5e40 | POINT(123.456789123456 ←-123.456789123456)12 | 01010000005c9a72083cdd5e405c9a72083cdd5e40 | POINT(123.456789123456 ←-123.456789123456)11 | 0101000000409a72083cdd5e40409a72083cdd5e40 | POINT(123.456789123456 ←-123.456789123456)10 | 0101000000009a72083cdd5e40009a72083cdd5e40 | POINT(123.456789123455 ←-123.456789123455)9 | 0101000000009072083cdd5e40009072083cdd5e40 | POINT(123.456789123418 ←-123.456789123418)8 | 0101000000008072083cdd5e40008072083cdd5e40 | POINT(123.45678912336 ←-123.45678912336)7 | 0101000000000070083cdd5e40000070083cdd5e40 | POINT(123.456789121032 ←-123.456789121032)6 | 0101000000000040083cdd5e40000040083cdd5e40 | POINT(123.456789076328 ←-123.456789076328)5 | 0101000000000000083cdd5e40000000083cdd5e40 | POINT(123.456789016724 ←-123.456789016724)4 | 0101000000000000003cdd5e40000000003cdd5e40 | POINT(123.456787109375 ←-123.456787109375)3 | 0101000000000000003cdd5e40000000003cdd5e40 | POINT(123.456787109375 ←-123.456787109375)2 | 01010000000000000038dd5e400000000038dd5e40 | POINT(123.45654296875 ←-123.45654296875)1 | 01010000000000000000dd5e400000000000dd5e40 | POINT(123.453125 123.453125)0 | 01010000000000000000dc5e400000000000dc5e40 | POINT(123.4375 123.4375)-1 | 01010000000000000000c05e400000000000c05e40 | POINT(123 123)-2 | 01010000000000000000005e400000000000005e40 | POINT(120 120)-3 | 010100000000000000000058400000000000005840 | POINT(96 96)-4 | 010100000000000000000058400000000000005840 | POINT(96 96)-5 | 010100000000000000000058400000000000005840 | POINT(96 96)-6 | 010100000000000000000058400000000000005840 | POINT(96 96)-7 | 010100000000000000000058400000000000005840 | POINT(96 96)-8 | 010100000000000000000058400000000000005840 | POINT(96 96)-9 | 010100000000000000000058400000000000005840 | POINT(96 96)-10 | 010100000000000000000058400000000000005840 | POINT(96 96)-11 | 010100000000000000000058400000000000005840 | POINT(96 96)-12 | 010100000000000000000058400000000000005840 | POINT(96 96)-13 | 010100000000000000000058400000000000005840 | POINT(96 96)-14 | 010100000000000000000058400000000000005840 | POINT(96 96)-15 | 010100000000000000000058400000000000005840 | POINT(96 96)``

#### ST_RemovePoint

Remove point from a linestring.

``//语法geometry ST_RemovePoint(geometry linestring, integer offset);//示例--guarantee no LINESTRINGS are closed--by removing the end point. The below assumes the_geom is of type LINESTRINGUPDATE sometableSET the_geom = ST_RemovePoint(the_geom, ST_NPoints(the_geom) - 1)FROM sometableWHERE ST_IsClosed(the_geom) = true;``

#### ST_Reverse

Return the geometry with vertex order reversed.

``//语法geometry ST_Reverse(geometry g1);//示例SELECT ST_AsText(the_geom) as line, ST_AsText(ST_Reverse(the_geom)) As reverselineFROM(SELECT ST_MakeLine(ST_MakePoint(1,2),ST_MakePoint(1,10)) As the_geom) as foo;--resultline | reverseline---------------------+----------------------LINESTRING(1 2,1 10) | LINESTRING(1 10,1 2)``

#### ST_Segmentize

Return a modifified geometry/geography having no segment longer than the given distance.

``//语法geometry ST_Segmentize(geometry geom, float max_segment_length);geography ST_Segmentize(geography geog, float max_segment_length);//示例SELECT ST_AsText(ST_Segmentize(ST_GeomFromText('MULTILINESTRING((-29 -27,-30 -29.7,-36 -31,-45 -33),(-45 -33,-46 -32))'),5));st_astext-------------------------------------------------------------------------------------------------- ←-MULTILINESTRING((-29 -27,-30 -29.7,-34.886615700134 -30.758766735029,-36 -31,-40.8809353009198 -32.0846522890933,-45 -33),(-45 -33,-46 -32))(1 row)SELECT ST_AsText(ST_Segmentize(ST_GeomFromText('POLYGON((-29 28, -30 40, -29 28))'),10));st_astext-----------------------POLYGON((-29 28,-29.8304547985374 37.9654575824488,-30 40,-29.1695452014626 ←-30.0345424175512,-29 28))(1 row)``

#### ST_SetPoint

Replace point of a linestring with a given point.

``//语法geometry ST_SetPoint(geometry linestring, integer zerobasedposition, geometry point);//示例--Change first point in line string from -1 3 to -1 1SELECT ST_AsText(ST_SetPoint('LINESTRING(-1 2,-1 3)', 0, 'POINT(-1 1)'));st_astext-----------------------LINESTRING(-1 1,-1 3)---Change last point in a line string (lets play with 3d linestring this time)SELECT ST_AsEWKT(ST_SetPoint(foo.the_geom, ST_NumPoints(foo.the_geom) - 1, ST_GeomFromEWKT ←-('POINT(-1 1 3)')))FROM (SELECT ST_GeomFromEWKT('LINESTRING(-1 2 3,-1 3 4, 5 6 7)') As the_geom) As foo;st_asewkt-----------------------LINESTRING(-1 2 3,-1 3 4,-1 1 3)SELECT ST_AsText(ST_SetPoint(g, -3, p))FROM ST_GEomFromText('LINESTRING(0 0, 1 1, 2 2, 3 3, 4 4)') AS g , ST_PointN(g,1) as p;st_astext-----------------------LINESTRING(0 0,1 1,0 0,3 3,4 4)``

#### ST_SnapToGrid

Snap all points of the input geometry to a regular grid.

``//语法geometry ST_SnapToGrid(geometry geomA, float originX, float originY, float sizeX, float sizeY);geometry ST_SnapToGrid(geometry geomA, float sizeX, float sizeY);geometry ST_SnapToGrid(geometry geomA, float size);geometry ST_SnapToGrid(geometry geomA, geometry pointOrigin, float sizeX, float sizeY, float sizeZ, float sizeM);//示例--Snap your geometries to a precision grid of 10^-3UPDATE mytableSET the_geom = ST_SnapToGrid(the_geom, 0.001);SELECT ST_AsText(ST_SnapToGrid(ST_GeomFromText('LINESTRING(1.1115678 2.123, 4.111111 3.2374897, 4.11112 3.23748667)'),0.001));st_astext-------------------------------------LINESTRING(1.112 2.123,4.111 3.237)--Snap a 4d geometrySELECT ST_AsEWKT(ST_SnapToGrid(ST_GeomFromEWKT('LINESTRING(-1.1115678 2.123 2.3456 1.11111,4.111111 3.2374897 3.1234 1.1111, -1.11111112 2.123 2.3456 1.1111112)'),ST_GeomFromEWKT('POINT(1.12 2.22 3.2 4.4444)'),0.1, 0.1, 0.1, 0.01) );st_asewkt------------------------------------------------------------------------------LINESTRING(-1.08 2.12 2.3 1.1144,4.12 3.22 3.1 1.1144,-1.08 2.12 2.3 1.1144)--With a 4d geometry - the ST_SnapToGrid(geom,size) only touches x and y coords but keeps mand z the sameSELECT ST_AsEWKT(ST_SnapToGrid(ST_GeomFromEWKT('LINESTRING(-1.1115678 2.123 3 2.3456,4.111111 3.2374897 3.1234 1.1111)'),0.01) );st_asewkt---------------------------------------------------------LINESTRING(-1.11 2.12 3 2.3456,4.11 3.24 3.1234 1.1111)``

#### ST_Snap

Snap segments and vertices of input geometry to vertices of a reference geometry.

``//语法geometry ST_Snap(geometry input, geometry reference, float tolerance);//示例SELECT ST_AsText(ST_Snap(line, poly, ST_Distance(poly,line)*1.01)) AS linesnappedFROM (SELECTST_GeomFromText('MULTIPOLYGON(((26 125, 26 200, 126 200, 126 125,26 125),(51 150, 101 150, 76 175, 51 150 )) ,((151 100, 151 200, 176 175, 151100)))') As poly,ST_GeomFromText('LINESTRING (5107, 54 84, 101 100)') As line) As foo;linesnapped----------------------------------------LINESTRING(5 107,26 125,54 84,101 100)SELECT ST_AsText(ST_Snap(line, poly, ST_Distance(poly,line)*1.25)) AS linesnappedFROM (SELECTST_GeomFromText('MULTIPOLYGON((( 26 125, 26 200, 126 200, 126 125,26 125 ),(51 150, 101 150, 76 175, 51 150 )) ,((151 100, 151 200, 176 175, 151100 )))') As poly,ST_GeomFromText('LINESTRING (5107, 54 84, 101 100)') As line) As foo;linesnapped---------------------------------------LINESTRING(26 125,54 84,101 100)``

#### ST_SwapOrdinates

Returns a version of the given geometry with given ordinate values swapped.

``//语法geometry ST_SwapOrdinates(geometry geom, cstring ords);//示例-- Scale M value by 2SELECT ST_AsText(ST_SwapOrdinates(ST_Scale(ST_SwapOrdinates(g,'xm'),2, 1),'xm')) FROM ( SELECT 'POINT ZM (0 0 0 2)'::geometry g ) foo;st_astext--------------------POINT ZM (0 0 0 4)``

### Geometry Validation(几何图形验证)

#### ST_IsValid

Tests if a geometry is well-formed in 2D.

``//语法boolean ST_IsValid(geometry g);boolean ST_IsValid(geometry g, integer flags);//示例SELECT ST_IsValid(ST_GeomFromText('LINESTRING(0 0, 1 1)')) As good_line,ST_IsValid(ST_GeomFromText('POLYGON((0 0, 1 1, 1 2, 1 1, 0 0))')) As bad_poly--resultsNOTICE: Self-intersection at or near point 0 0good_line | bad_poly-----------+----------t | f``

#### ST_IsValidDetail

Returns a valid_detail row stating if a geometry is valid, and if not a reason why and a location.

``//语法valid_detail ST_IsValidDetail(geometry geom, integer flags);//示例--First 3 Rejects from a successful quintuplet experimentSELECT gid, reason(ST_IsValidDetail(the_geom)), ST_AsText(location(ST_IsValidDetail( ←-the_geom))) as locationFROM(SELECT ST_MakePolygon(ST_ExteriorRing(e.buff), array_agg(f.line)) As the_geom, gidFROM (SELECT ST_Buffer(ST_MakePoint(x1*10,y1), z1) As buff, x1*10 + y1*100 + z1*1000 As gidFROM generate_series(-4,6) x1CROSS JOIN generate_series(2,5) y1CROSS JOIN generate_series(1,8) z1WHERE x1 > y1*0.5 AND z1 < x1*y1) As eINNER JOIN (SELECT ST_Translate(ST_ExteriorRing(ST_Buffer(ST_MakePoint(x1*10,y1), z1)),y1 ←- *1, z1*2) As lineFROM generate_series(-3,6) x1CROSS JOIN generate_series(2,5) y1CROSS JOIN generate_series(1,10) z1WHERE x1 > y1*0.75 AND z1 < x1*y1) As fON (ST_Area(e.buff) > 78 AND ST_Contains(e.buff, f.line))GROUP BY gid, e.buff) As quintuplet_experimentWHERE ST_IsValid(the_geom) = falseORDER BY gidLIMIT 3;gid | reason | location------+-------------------+-------------5330 | Self-intersection | POINT(32 5)5340 | Self-intersection | POINT(42 5)5350 | Self-intersection | POINT(52 5)--simple exampleSELECT * FROM ST_IsValidDetail('LINESTRING(220227 150406,2220227 150407,222020 150410)');valid | reason | location-------+--------+----------t | |``

#### ST_IsValidReason

Returns text stating if a geometry is valid, or a reason for invalidity.

``//语法text ST_IsValidReason(geometry geomA, integer flags);text ST_IsValidReason(geometry geomA);//示例--First 3 Rejects from a successful quintuplet experimentSELECT gid, ST_IsValidReason(the_geom) as validity_infoFROM(SELECT ST_MakePolygon(ST_ExteriorRing(e.buff), array_agg(f.line)) As the_geom, gidFROM (SELECT ST_Buffer(ST_MakePoint(x1*10,y1), z1) As buff, x1*10 + y1*100 + z1*1000 As gidFROM generate_series(-4,6) x1CROSS JOIN generate_series(2,5) y1CROSS JOIN generate_series(1,8) z1WHERE x1 > y1*0.5 AND z1 < x1*y1) As eINNER JOIN (SELECT ST_Translate(ST_ExteriorRing(ST_Buffer(ST_MakePoint(x1*10,y1), z1)),y1 ←- *1, z1*2) As lineFROM generate_series(-3,6) x1CROSS JOIN generate_series(2,5) y1CROSS JOIN generate_series(1,10) z1WHERE x1 > y1*0.75 AND z1 < x1*y1) As fON (ST_Area(e.buff) > 78 AND ST_Contains(e.buff, f.line))GROUP BY gid, e.buff) As quintuplet_experimentWHERE ST_IsValid(the_geom) = falseORDER BY gidLIMIT 3;gid | validity_info------+--------------------------5330 | Self-intersection [32 5]5340 | Self-intersection [42 5]5350 | Self-intersection [52 5]--simple exampleSELECT ST_IsValidReason('LINESTRING(220227 150406,2220227 150407,222020 150410)');st_isvalidreason------------------Valid Geometry``

### Spatial Reference System Functions

#### ST_SetSRID

Set the SRID on a geometry to a particular integer value.

``//语法geometry ST_SetSRID(geometry geom, integer srid);//示例SELECT ST_SetSRID(ST_Point(-123.365556, 48.428611),4326) As wgs84long_lat;-- the ewkt representation (wrap with ST_AsEWKT) -SRID=4326;POINT(-123.365556 48.428611)``

#### ST_SRID

Returns the spatial reference identififier for the ST_Geometry as defifined in spatial_ref_sys table.

``//语法integer ST_SRID(geometry g1);//示例SELECT ST_SRID(ST_GeomFromText('POINT(-71.1043 42.315)',4326));--result4326``

#### ST_Transform

Return a new geometry with its coordinates transformed to a different spatial reference system.

``//语法geometry ST_Transform(geometry g1, integer srid);geometry ST_Transform(geometry geom, text to_proj);geometry ST_Transform(geometry geom, text from_proj, text to_proj);geometry ST_Transform(geometry geom, text from_proj, integer to_srid);//示例SELECT ST_AsText(ST_Transform(ST_GeomFromText('POLYGON((743238 2967416,743238 2967450,743265 2967450,743265.625 2967416,743238 2967416))',2249),4326)) As wgs_geom;wgs_geom---------------------------POLYGON((-71.1776848522251 42.3902896512902,-71.1776843766326 42.3903829478009,-71.1775844305465 42.3903826677917,-71.1775825927231 42.3902893647987,-71.1776848522251 42.3902896512902));(1 row)--3D Circular String exampleSELECT ST_AsEWKT(ST_Transform(ST_GeomFromEWKT('SRID=2249;CIRCULARSTRING(743238 2967416 ←-1,743238 2967450 2,743265 2967450 3,743265.625 2967416 3,743238 2967416 4)'),4326));st_asewkt--------------------------------------------------------------------------------------SRID=4326;CIRCULARSTRING(-71.1776848522251 42.3902896512902 1,-71.1776843766326 ←-42.3903829478009 2,-71.1775844305465 42.3903826677917 3,-71.1775825927231 42.3902893647987 3,-71.1776848522251 42.3902896512902 4)CREATE INDEX idx_the_geom_26986_parcelsON parcelsUSING gist(ST_Transform(the_geom, 26986))WHERE the_geom IS NOT NULL;``

### Geometry Input-WKT

#### ST_BdPolyFromText

Construct a Polygon given an arbitrary collection of closed linestrings as a MultiLineString Well-Known

text representation.

``//语法geometry ST_BdPolyFromText(text WKT, integer srid);``

#### ST_BdMPolyFromText

Construct a MultiPolygon given an arbitrary collection of closed linestrings as a MultiLineString text

representation Well-Known text representation.、

``//语法geometry ST_BdMPolyFromText(text WKT, integer srid);``

#### ST_GeogFromText

Return a specifified geography value from Well-Known Text representation or extended (WKT).

``//语法geography ST_GeogFromText(text EWKT);//示例--- converting lon lat coords to geographyALTER TABLE sometable ADD COLUMN geog geography(POINT,4326);UPDATE sometable SET geog = ST_GeogFromText('SRID=4326;POINT(' || lon || ' ' || lat || ')');--- specify a geography point using EPSG:4267, NAD27SELECT ST_AsEWKT(ST_GeogFromText('SRID=4267;POINT(-77.0092 38.889588)'));``

#### ST_GeographyFromText

Return a specifified geography value from Well-Known Text representation or extended (WKT).

``//语法geography ST_GeographyFromText(text EWKT);``

#### ST_GeomCollFromText

Makes a collection Geometry from collection WKT with the given SRID. If SRID is not given, it

defaults to 0.

``//语法geometry ST_GeomCollFromText(text WKT, integer srid);geometry ST_GeomCollFromText(text WKT);//示例SELECT ST_GeomCollFromText('GEOMETRYCOLLECTION(POINT(1 2),LINESTRING(1 2, 3 4))');``

#### ST_GeomFromEWKT

Return a specifified ST_Geometry value from Extended Well-Known Text representation (EWKT).

``//语法geometry ST_GeomFromEWKT(text EWKT);//示例SELECT ST_GeomFromEWKT('SRID=4269;LINESTRING(-71.160281 42.258729,-71.160837 ←-42.259113,-71.161144 42.25932)');SELECT ST_GeomFromEWKT('SRID=4269;MULTILINESTRING((-71.160281 42.258729,-71.160837 ←-42.259113,-71.161144 42.25932))');SELECT ST_GeomFromEWKT('SRID=4269;POINT(-71.064544 42.28787)');SELECT ST_GeomFromEWKT('SRID=4269;POLYGON((-71.1776585052917 ←-42.3902909739571,-71.1776820268866 42.3903701743239,-71.1776063012595 42.3903825660754,-71.1775826583081 42.3903033653531,-71.1776585052917 42.3902909739571))');SELECT ST_GeomFromEWKT('SRID=4269;MULTIPOLYGON(((-71.1031880899493 42.3152774590236,-71.1031627617667 42.3152960829043,-71.102923838298 42.3149156848307,-71.1023097974109 42.3151969047397,-71.1019285062273 42.3147384934248,-71.102505233663 42.3144722937587,-71.10277487471 42.3141658254797,-71.103113945163 42.3142739188902,-71.10324876416 42.31402489987,-71.1033002961013 42.3140393340215,-71.1033488797549 42.3139495090772,-71.103396240451 42.3138632439557,-71.1041521907712 42.3141153348029,-71.1041411411543 42.3141545014533,-71.1041287795912 42.3142114839058,-71.1041188134329 42.3142693656241,-71.1041112482575 42.3143272556118,-71.1041072845732 42.3143851580048,-71.1041057218871 42.3144430686681,-71.1041065602059 42.3145009876017,-71.1041097995362 42.3145589148055,-71.1041166403905 42.3146168544148,-71.1041258822717 42.3146748022936,-71.1041375307579 42.3147318674446,-71.1041492906949 42.3147711126569,-71.1041598612795 42.314808571739,-71.1042515013869 42.3151287620809,-71.1041173835118 42.3150739481917,-71.1040809891419 42.3151344119048,-71.1040438678912 42.3151191367447,-71.1040194562988 42.3151832057859,-71.1038734225584 42.3151140942995,-71.1038446938243 42.3151006300338,-71.1038315271889 42.315094347535,-71.1037393329282 42.315054824985,-71.1035447555574 42.3152608696313,-71.1033436658644 42.3151648370544,-71.1032580383161 42.3152269126061,-71.103223066939 42.3152517403219,-71.1031880899493 42.3152774590236)),((-71.1043632495873 42.315113108546,-71.1043583974082 42.3151211109857,-71.1043443253471 42.3150676015829,-71.1043850704575 42.3150793250568,-71.1043632495873 ←-42.315113108546)))');--3d circular stringSELECT ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)');--Polyhedral Surface exampleSELECT 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)))');``

#### ST_GeometryFromText

Return a specifified ST_Geometry value from Well-Known Text representation (WKT). This is an alias

name for ST_GeomFromText.

``//语法geometry ST_GeometryFromText(text WKT);geometry ST_GeometryFromText(text WKT, integer srid);``

#### ST_GeomFromText

Return a specifified ST_Geometry value from Well-Known Text representation (WKT).

``//语法geometry ST_GeomFromText(text WKT);geometry ST_GeomFromText(text WKT, integer srid);//示例SELECT ST_GeomFromText('LINESTRING(-71.160281 42.258729,-71.160837 42.259113,-71.161144 42.25932)');SELECT ST_GeomFromText('LINESTRING(-71.160281 42.258729,-71.160837 42.259113,-71.161144 42.25932)',4269);SELECT ST_GeomFromText('MULTILINESTRING((-71.160281 42.258729,-71.160837 ←-42.259113,-71.161144 42.25932))');SELECT ST_GeomFromText('POINT(-71.064544 42.28787)');SELECT ST_GeomFromText('POLYGON((-71.1776585052917 42.3902909739571,-71.1776820268866 ←-42.3903701743239,-71.1776063012595 42.3903825660754,-71.1775826583081 42.3903033653531,-71.1776585052917 42.3902909739571))');SELECT ST_GeomFromText('MULTIPOLYGON(((-71.1031880899493 42.3152774590236,-71.1031627617667 42.3152960829043,-71.102923838298 42.3149156848307,-71.1023097974109 42.3151969047397,-71.1019285062273 42.3147384934248,-71.102505233663 42.3144722937587,-71.10277487471 42.3141658254797,-71.103113945163 42.3142739188902,-71.10324876416 42.31402489987,-71.1033002961013 42.3140393340215,-71.1033488797549 42.3139495090772,-71.103396240451 42.3138632439557,-71.1041521907712 42.3141153348029,-71.1041411411543 42.3141545014533,-71.1041287795912 42.3142114839058,-71.1041188134329 42.3142693656241,-71.1041112482575 42.3143272556118,-71.1041072845732 42.3143851580048,-71.1041057218871 42.3144430686681,-71.1041065602059 42.3145009876017,-71.1041097995362 42.3145589148055,-71.1041166403905 42.3146168544148,-71.1041258822717 42.3146748022936,-71.1041375307579 42.3147318674446,-71.1041492906949 42.3147711126569,-71.1041598612795 42.314808571739,-71.1042515013869 42.3151287620809,-71.1041173835118 42.3150739481917,-71.1040809891419 42.3151344119048,-71.1040438678912 42.3151191367447,-71.1040194562988 42.3151832057859,-71.1038734225584 42.3151140942995,-71.1038446938243 42.3151006300338,-71.1038315271889 42.315094347535,-71.1037393329282 42.315054824985,-71.1035447555574 42.3152608696313,-71.1033436658644 42.3151648370544,-71.1032580383161 42.3152269126061,-71.103223066939 42.3152517403219,-71.1031880899493 42.3152774590236)),((-71.1043632495873 42.315113108546,-71.1043583974082 42.3151211109857,-71.1043443253471 42.3150676015829,-71.1043850704575 42.3150793250568,-71.1043632495873 42.315113108546)))',4326);SELECT ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)');``

#### ST_LineFromText

Makes a Geometry from WKT representation with the given SRID. If SRID is not given, it defaults to 0.

``//语法geometry ST_LineFromText(text WKT);geometry ST_LineFromText(text WKT, integer srid);//示例SELECT ST_LineFromText('LINESTRING(1 2, 3 4)') AS aline, ST_LineFromText('POINT(1 2)') AS null_return;aline | null_return------------------------------------------------010200000002000000000000000000F ... | t``

#### ST_MLineFromText

Return a specifified ST_MultiLineString value from WKT representation.

``//语法geometry ST_MLineFromText(text WKT, integer srid);geometry ST_MLineFromText(text WKT);//示例SELECT ST_MLineFromText('MULTILINESTRING((1 2, 3 4), (4 5, 6 7))');``

#### ST_MPointFromText

Makes a Geometry from WKT with the given SRID. If SRID is not given, it defaults to 0.

``//语法geometry ST_MPointFromText(text WKT, integer srid);geometry ST_MPointFromText(text WKT);//示例SELECT ST_MPointFromText('MULTIPOINT(1 2, 3 4)');SELECT ST_MPointFromText('MULTIPOINT(-70.9590 42.1180, -70.9611 42.1223)', 4326);``

#### ST_MPolyFromText

Makes a MultiPolygon Geometry from WKT with the given SRID. If SRID is not given, it defaults to 0.

``//语法geometry ST_MPolyFromText(text WKT, integer srid);geometry ST_MPolyFromText(text WKT);//示例SELECT ST_MPolyFromText('MULTIPOLYGON(((0 0 1,20 0 1,20 20 1,0 20 1,0 0 1),(5 5 3,5 7 3,7 73,7 5 3,5 5 3)))');SELECt ST_MPolyFromText('MULTIPOLYGON(((-70.916 42.1002,-70.9468 42.0946,-70.976542.0872,-70.9754 42.0875,-70.9749 42.0879,-70.9752 42.0881,-70.9754 42.0891,-70.975842.0894,-70.9759 42.0897,-70.9759 42.0899,-70.9754 42.0902,-70.9756 42.0906,-70.975342.0907,-70.9753 42.0917,-70.9757 42.0924,-70.9755 42.0928,-70.9755 42.0942,-70.975142.0948,-70.9755 42.0953,-70.9751 42.0958,-70.9751 42.0962,-70.9759 42.0983,-70.976742.0987,-70.9768 42.0991,-70.9771 42.0997,-70.9771 42.1003,-70.9768 42.1005,-70.97742.1011,-70.9766 42.1019,-70.9768 42.1026,-70.9769 42.1033,-70.9775 42.1042,-70.977342.1043,-70.9776 42.1043,-70.9778 42.1048,-70.9773 42.1058,-70.9774 42.1061,-70.9779 42.1065,-70.9782 42.1078,-70.9788 42.1085,-70.9798 42.1087,-70.9806 42.109,-70.9807 42.1093,-70.9806 42.1099,-70.9809 42.1109,-70.9808 42.1112,-70.9798 42.1116,-70.9792 42.1127,-70.979 42.1129,-70.9787 42.1134,-70.979 42.1139,-70.9791 42.1141,-70.998742.1116,-71.0022 42.1273,-70.9408 42.1513,-70.9315 42.1165,-70.916 42.1002)))',4326);``

#### ST_PointFromText

Makes a point Geometry from WKT with the given SRID. If SRID is not given, it defaults to unknown.

``//语法geometry ST_PointFromText(text WKT);geometry ST_PointFromText(text WKT, integer srid);//示例SELECT ST_PointFromText('POINT(-71.064544 42.28787)');SELECT ST_PointFromText('POINT(-71.064544 42.28787)', 4326);``

#### ST_PolygonFromText

Makes a Geometry from WKT with the given SRID. If SRID is not given, it defaults to 0.

``//语法geometry ST_PolygonFromText(text WKT);geometry ST_PolygonFromText(text WKT, integer srid);//示例SELECT ST_PolygonFromText('POLYGON((-71.1776585052917 42.3902909739571,-71.1776820268866 42.3903701743239,-71.1776063012595 42.3903825660754,-71.1775826583081 42.3903033653531,-71.1776585052917 42.3902909739571))');st_polygonfromtext------------------010300000001000000050000006...SELECT ST_PolygonFromText('POINT(1 2)') IS NULL as point_is_notpoly;point_is_not_poly----------t``

#### ST_WKTToSQL

Return a specifified ST_Geometry value from Well-Known Text representation (WKT). This is an alias name

for ST_GeomFromText.

``//语法geometry ST_WKTToSQL(text WKT);``

### Geometry Input-WKB

#### ST_GeogFromWKB

Creates a geography instance from a Well-Known Binary geometry representation (WKB) or extended

Well Known Binary (EWKB).

``//语法geography ST_GeogFromWKB(bytea wkb);//示例--Although bytea rep contains single \, these need to be escaped when inserting into a tableSELECT ST_AsText(ST_GeogFromWKB(E'\\001\\002\\000\\000\\000\\002\\000\\000\\000\\037\\205\\353Q ←-\\270~\\\\\\300\\323Mb\\020X\\231C@\\020X9\\264\\310~\\\\\\300)\\\\\\217\\302\\365\\230 C@'));st_astext------------------------------------------------------LINESTRING(-113.98 39.198,-113.981 39.195)(1 row)``

#### ST_GeomFromEWKB

Return a specifified ST_Geometry value from Extended Well-Known Binary representation (EWKB).

``//语法geometry ST_GeomFromEWKB(bytea EWKB);//示例SELECT ST_GeomFromEWKB(E'\\001\\002\\000\\000 \\255\\020\\000\\000\\003\\000\\000\\000\\344 J=\\013B\\312Q\\300n\\303(\\010\\036!E@''\\277E''K\\312Q\\300\\366{b\\235*!E@\\225|\\354.P\\312Q\\300p\\231\\323e1!E@');set standard_conforming_strings = on;SELECT ST_GeomFromEWKB('\001\002\000\000 \255\020\000\000\003\000\000\000\344J=\012\013B\312Q\300n\303(\010\036!E@''\277E''K\012\312Q\300\366{b\235*!E@\225|\354.P\312Q\012\300 p\231\323e1')``

#### ST_GeomFromWKB

Creates a geometry instance from a Well-Known Binary geometry representation (WKB) and optional

SRID.

``//语法geometry ST_GeomFromWKB(bytea geom);geometry ST_GeomFromWKB(bytea geom, integer srid);//示例--Although bytea rep contains single \, these need to be escaped when inserting into a ←-table-- unless standard_conforming_strings is set to on.SELECT ST_AsEWKT(ST_GeomFromWKB(E'\\001\\002\\000\\000\\000\\002\\000\\000\\000\\037\\205\\353Q ←-\\270~\\\\\\300\\323Mb\\020X\\231C@\\020X9\\264\\310~\\\\\\300)\\\\\\217\\302\\365\\230 ←-C@',4326));st_asewkt------------------------------------------------------SRID=4326;LINESTRING(-113.98 39.198,-113.981 39.195)(1 row)SELECTST_AsText(ST_GeomFromWKB(ST_AsEWKB('POINT(2 5)'::geometry) ));st_astext------------POINT(2 5)(1 row)``

#### ST_LineFromWKB

Makes a LINESTRING from WKB with the given SRID.

``//语法geometry ST_LineFromWKB(bytea WKB);geometry ST_LineFromWKB(bytea WKB, integer srid);//示例SELECT ST_LineFromWKB(ST_AsBinary(ST_GeomFromText('LINESTRING(1 2, 3 4)'))) AS aline,ST_LineFromWKB(ST_AsBinary(ST_GeomFromText('POINT(1 2)'))) IS NULL AS null_return;aline | null_return------------------------------------------------010200000002000000000000000000F ... | t``

#### ST_LinestringFromWKB

Makes a geometry from WKB with the given SRID.

``//语法geometry ST_LinestringFromWKB(bytea WKB);geometry ST_LinestringFromWKB(bytea WKB, integer srid);//示例SELECTST_LineStringFromWKB(ST_AsBinary(ST_GeomFromText('LINESTRING(1 2, 3 4)'))) AS aline,ST_LinestringFromWKB(ST_AsBinary(ST_GeomFromText('POINT(1 2)'))) IS NULL AS null_return;aline | null_return------------------------------------------------010200000002000000000000000000F ... | t``

#### ST_PointFromWKB

Makes a geometry from WKB with the given SRID.

``//语法geometry ST_GeomFromWKB(bytea geom);geometry ST_GeomFromWKB(bytea geom, integer srid);//示例SELECTST_AsText(ST_PointFromWKB(ST_AsEWKB('POINT(2 5)'::geometry) ));st_astext------------POINT(2 5)(1 row)SELECTST_AsText(ST_PointFromWKB(ST_AsEWKB('LINESTRING(2 5, 2 6)'::geometry) ));st_astext-----------(1 row)``

#### ST_WKBToSQL

Return a specifified ST_Geometry value from Well-Known Binary representation (WKB). This is an alias

name for ST_GeomFromWKB that takes no srid.

``//语法geometry ST_WKBToSQL(bytea WKB);//语法geometry ST_WKBToSQL(bytea WKB);``

Bayanbulake

2021/11/26  阅读：20  主题：自定义主题1