Post GIS 函数解析

1,584 阅读10分钟

Post GIS geometry 类型

PostgreSQL 通过 PostGIS 扩展提供了对地理空间数据的支持,其中包括 geometry 类型,这是一种用于存储和操作地理空间数据的数据类型。geometry 类型可以用来表示各种地理空间对象,如点(Point)、线(LineString)、多边形(Polygon)、多点(MultiPoint)、多线(MultiLineString)、多边形集合(MultiPolygon)、几何集合(GeometryCollection)等。

geometry类型的基本属性:

  • 维度:geometry 可以是二维的(X,Y)或三维的(X,Y,Z),甚至四维的(X,Y,Z,M),其中 M 表示测量值。
  • SRID:空间参考系统标识符(SRID)用于指定坐标系,如 WGS84(EPSG:4326)或 UTM 33N(EPSG:32633)。

常见的 geometry 子类型

  • Point:表示一个单一的位置。
  • LineString:表示一系列连续的点组成的线。
  • Polygon:表示一个闭合的线环,可以定义一个区域。
  • MultiPoint:表示多个独立的点。
  • MultiLineString:表示多条独立的线。
  • MultiPolygon:表示多个独立的多边形。
  • GeometryCollection:表示一个几何体的集合,可以包含上述任意类型的几何体。

PostGIS中,可以使用 ST_GeomFromTextST_GeomFromGeoJSON 函数来将文本或 GeoJSON 格式的几何数据转换为 geometry 类型。也可以使用ST_AsTextST_AsGeoJSONST_ZST_Transformgeometry 类型的数据转换回文本或 GeoJSON 格式。

ST_GeomFromText

描述:用于将 Well-Known Text (WKT) 格式的几何数据转换成 PostGISgeometry 类型。WKT 是一种文本格式,用于表示地理空间数据,包括点、线、多边形等几何对象。

格式:ST_GeomFromText(text wkt, integer srid)

  • wkt:一个包含 WKT 格式的几何数据的字符串。
  • srid:空间参考系统标识符 (SRID),用于指定几何数据的坐标系统。例如,4326 代表 WGS84 坐标系统。
INSERT INTO my_table (geom) VALUES (ST_GeomFromText('POINT(10 20)', 4326));

ST_GeomFromGeoJSON

描述:ST_GeomFromGeoJSONPostGIS 中的一个函数,用于将 GeoJSON 格式的地理空间数据转换为 PostGISgeometrygeography 类型。GeoJSON 是一种基于 JSON 的开放标准格式,用于表示地理空间数据,包括点、线、多边形、多点、多线、多边形集合等。

格式:ST_GeomFromGeoJSON(text geojson[, boolean oriented])

  • geojson:一个包含 GeoJSON 格式的地理空间数据的字符串。
  • oriented:可选参数,布尔值,用于控制输出的几何体是否应被重新排序以匹配 PostGIS 的内部方向约定。默认值为 true
`INSERT INTO my_table (geom) VALUES (ST_GeomFromGeoJSON('{"type":"Point","coordinates":[10,20]}'));`

ST_GeomFromWKB

描述:ST_GeomFromWKBPostGIS 中的一个函数,用于将 Well-Known Binary (WKB) 格式的地理空间数据转换为 geometry 类型。WKB 是一种二进制格式,用于表示地理空间数据,包括点、线、多边形等几何对象。相比于文本格式(如 WKT),WKB 格式通常更紧凑,适合于在网络上传输或在数据库中存储。

格式:ST_GeomFromWKB(bytea wkb, integer srid)

  • wkb:一个包含 WKB 格式的地理空间数据的字节数组。
  • srid:空间参考系统标识符 (SRID),用于指定几何数据的坐标系统。例如,4326 代表 WGS84 坐标系统。
INSERT INTO my_table (geom) VALUES (ST_GeomFromWKB('\x0101000020E610000066BC4C63B7A654C0241421C46F16540', 4326));

INSERT INTO my_table (geom) VALUES (ST_GeomFromWKB('\x0102000020E61000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

ST_AsText

描述:ST_AsText 函数将一个 geometrygeography 类型的列转换为 WKT(Well-Known Text)格式的字符串。WKT 是一种文本格式,用于表示几何对象,如点、线、多边形等。例如,一个点可以表示为 POINT(10 20)

SELECT ST_AsText(your_geometry_column) FROM your_table;

ST_AsGeoJSON

描述:ST_AsGeoJSON 函数将一个 geometry 或 geography 类型的列转换为 GeoJSON 格式的字符串。GeoJSON 是一种用于表示地理空间数据的 JSON 格式,常用于 Web 映射应用中。

SELECT ST_AsGeoJSON(your_geometry_column) FROM your_table;

ST_Z

描述:ST_Z 函数用于从一个三维(XYZ)的 geometry 或 geography 对象中提取 Z 坐标值。这通常用于获取点、线或多边形的高度信息。

SELECT ST_Z(your_3d_geometry_column) FROM your_table;

ST_Transform

ST_Transform 函数用于将一个 geometrygeography 对象从一个坐标参考系统(CRS)转换到另一个坐标参考系统。这对于在不同投影系统之间进行转换非常有用,例如从 UTMWGS84 或反之亦然。

# 这里 4326 是 WGS84 投影的 EPSG 代码。
SELECT ST_Transform(your_geometry_column, 4326) FROM your_table;

总结

  1. ST_GeomFromTextST_GeomFromGeoJSON 主要用于输入几何数据,前者输入 WKT 格式,后者输入 GeoJSON 格式。
  2. ST_AsTextST_AsGeoJSON 主要用于输出几何数据,前者输出 WKT 格式,后者输出 GeoJSON 格式。
  3. ST_Z 用于从三维几何体中提取 Z 坐标。
  4. ST_Transform 用于坐标系之间的转换,对于地理空间分析和映射至关重要。