postGIS的几何图形常用函数
参考链接:https://zhuanlan.zhihu.com/p/62361189
https://zhuanlan.zhihu.com/p/146895238
1、读取对象的基本信息
我们可以使用读取几何图形元数据的函数获取每个对象的基本信息:
- ST_GeometryType(geometry) —— 返回几何图形的类型
- ST_NDims(geometry) —— 返回几何图形的维数
- ST_SRID(geometry) —— 返回几何图形的空间参考标识码
2、点(Points)
针对点的一些特定空间函数包括:
- ST_X(geometry) —— 返回X坐标
- ST_Y(geometry) —— 返回Y坐标
- ST_Z(geometry) —— 返回Z坐标
- ST_M(geometry) —— 返回M信息
3、线串(Linestring)
用于处理线串的一些特定空间函数包括:
- ST_Length(geometry) —— 返回线串的长度
- ST_StartPoint(geometry) —— 将线串的第一个坐标作为点返回
- ST_EndPoint(geometry) —— 将线串的最后一个坐标作为点返回
- ST_NPoints(geometry) —— 返回线串的坐标数量
4、多边形(Polygon)
关于多边形图形的一些特定空间函数包括:
- ST_Area(geometry) —— 返回多边形的面积
- ST_NRings(geometry) —— 返回多边形中环的数量(通常为1个,其他是孔)
- ST_ExteriorRing(geometry) —— 以线串的形式返回多边形最外面的环
- ST_InteriorRingN(geometry, n) —— 以线串形式返回指定的内部环
- ST_Perimeter(geometry) —— 返回所有环的长度
5、图形集合(Collection)
有四种图形集合(Collection)类型,它们将多个简单几何图形组合为图形集合:
- MultiPoint —— 点集合
- MultiLineString —— 线串集合
- MultiPolygon —— 多边形集合
- GeometryCollection —— 由任意几何图形(包括其他GeometryCollection)组成的异构集合
用于处理图形集合的一些特定空间函数:
- ST_NumGeometries(geometry) —— 返回集合中的组成部分的数量
- ST_GeometryN(geometry, n) —— 返回集合中指定的组成部分
- ST_Area(geometry) —— 返回集合中所有多边形组成部分的总面积
- ST_Length(geometry) —— 返回所有线段组成部分的总长度
6、几何图形输入和输出
PostGIS支持以多种格式进行几何图形的输入和输出。
①Well-known text(WKT)
- ST_GeomFromText(text, srid) —— 返回geometry
- ST_AsText(geometry) —— 返回text
- ST_AsEWKT(geometry) —— 返回text
②Well-known binary(WKB)
- ST_GeomFromWKB(bytea) —— 返回geometry
- ST_AsBinary(geometry) —— 返回bytea
- ST_AsEWKB(geometry) —— 返回bytea
③Geographic Mark-up Language(GML)
- ST_GeomFromGML(text) —— 返回geometry
- ST_ASGML(geometry) —— 返回text
④Keyhole Mark-up Language(KML)
- ST_GeomFromKML(text) —— 返回geometry
- ST_ASKML(geometry) —— 返回text
- ST_AsGeoJSON(geometry) —— 返回text
⑥Scalable Vector Graphics(SVG)
- ST_AsSVG(geometry) —— 返回text
7、更新投影
- ST_SRID(geometry) —— 查看空间数据的坐标系
- ST_SetSRID(geometry,SRID) —— 设置空间数据的坐标系
- UpdateGeometrySRID(table_name, column_name, srid) —— 更新空间数据表的坐标系
- ST_Transform(geometry, srid) —— 转换空间数据的坐标系
8、geography类型
为了将geometry数据加载到geography表中,首先需要将geometry转换到EPSG:4326(经度-longitude/纬度-latitude),然后再将其转换为geography。ST_Transform(geometry, srid)函数能将坐标转换为地理坐标,Geography(geometry)函数能将基于EPSG:4326的geometry数据类型转换为geography数据类型。
CREATE TABLE nyc_subway_stations_geog AS SELECT Geography(ST_Transform(geom,4326)) AS geog, name, routes FROM nyc_subway_stations;
在geography表上构建空间索引与在geometry表上构建空间索引完全相同:
CREATE INDEX nyc_subway_stations_geog_gix ON nyc_subway_stations_geog USING GIST (geog);
不同之处在于:geography空间索引将正确地处理覆盖极点或国际日期变更线的要素的查询,而geometry空间索引则不会。
对于geography类型,只有相关的少量空间函数:
- ST_AsText(geography) returns
text
- ST_GeographyFromText(text) returns
geography
- ST_AsBinary(geography) returns
bytea
- ST_GeogFromWKB(bytea) returns
geography
- ST_AsSVG(geography) returns
text
- ST_AsGML(geography) returns
text
- ST_AsKML(geography) returns
text
- ST_AsGeoJson(geography) returns
text
- ST_Distance(geography, geography) returns
double
- ST_DWithin(geography, geography, float8) returns
boolean
- ST_Area(geography) returns
double
- ST_Length(geography) returns
double
- ST_Covers(geography, geography) returns
boolean
- ST_CoveredBy(geography, geography) returns
boolean
- ST_Intersects(geography, geography) returns
boolean
- ST_Buffer(geography, float8) returns
geography
- ST_Intersection(geography, geography) returns
geography