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

GeoJson

  • 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

 

posted @ 2022-12-06 16:17  一两米  阅读(276)  评论(0编辑  收藏  举报