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_GeomFromText 和 ST_GeomFromGeoJSON 函数来将文本或 GeoJSON 格式的几何数据转换为 geometry 类型。也可以使用ST_AsText、ST_AsGeoJSON、ST_Z 和 ST_Transform 将 geometry 类型的数据转换回文本或 GeoJSON 格式。
ST_GeomFromText
描述:用于将 Well-Known Text (WKT) 格式的几何数据转换成 PostGIS 的 geometry 类型。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_GeomFromGeoJSON 是 PostGIS 中的一个函数,用于将 GeoJSON 格式的地理空间数据转换为 PostGIS 的 geometry 或 geography 类型。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_GeomFromWKB 是 PostGIS 中的一个函数,用于将 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 函数将一个 geometry 或 geography 类型的列转换为 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 函数用于将一个 geometry 或 geography 对象从一个坐标参考系统(CRS)转换到另一个坐标参考系统。这对于在不同投影系统之间进行转换非常有用,例如从 UTM 到 WGS84 或反之亦然。
# 这里 4326 是 WGS84 投影的 EPSG 代码。
SELECT ST_Transform(your_geometry_column, 4326) FROM your_table;
总结
ST_GeomFromText和ST_GeomFromGeoJSON主要用于输入几何数据,前者输入WKT格式,后者输入GeoJSON格式。ST_AsText和ST_AsGeoJSON主要用于输出几何数据,前者输出WKT格式,后者输出GeoJSON格式。ST_Z用于从三维几何体中提取Z坐标。ST_Transform用于坐标系之间的转换,对于地理空间分析和映射至关重要。