AI摘要
可以,下面我给你做一张 PostGIS geometry 类型与 SRID 速查表,尽量写成你建表时可以直接照抄的形式。
先记住一个总公式:
geometry(几何类型[维度后缀], SRID)例如:
geometry(LineString, 4326)意思就是:二维 LineString 线对象,坐标参考系为 SRID 4326。PostGIS 官方文档说明,geometry 支持两个可选 type modifier:一个限制几何子类型,另一个限制 SRID;如果省略 SRID,则默认是 0。(PostGIS)
一、你最关心的:常见 geometry 类型有哪些
PostGIS 官方文档列出的常见 geometry 子类型包括:
POINTLINESTRINGPOLYGONMULTIPOINTMULTILINESTRINGMULTIPOLYGONGEOMETRYCOLLECTION
此外,官方还支持更高级一些的几何类型,例如 POLYHEDRALSURFACE、TRIANGLE、TIN,以及曲线类 CIRCULARSTRING、COMPOUNDCURVE、CURVEPOLYGON、MULTICURVE、MULTISURFACE。(PostGIS)
二、最常用的 geometry 类型速查表
1)基础二维类型
| 写法 | 含义 | 维度 | 示例 | 典型场景 |
|---|---|---|---|---|
geometry(Point, 4326) | 点 | XY | POINT(104.07 30.66) | 机房、站点、设备点、客户点 |
geometry(LineString, 4326) | 线 | XY | LINESTRING(104.07 30.66,104.08 30.67) | 光缆段、管道段、杆路线 |
geometry(Polygon, 4326) | 面 | XY | POLYGON((...)) | 维护区域、服务片区、园区边界 |
geometry(MultiPoint, 4326) | 多点集合 | XY | MULTIPOINT((...),(...)) | 一组散点资源 |
geometry(MultiLineString, 4326) | 多线集合 | XY | MULTILINESTRING((...),(...)) | 由多段组成的一条资源 |
geometry(MultiPolygon, 4326) | 多面集合 | XY | MULTIPOLYGON(((...)),((...))) | 多个不连续片区 |
geometry(GeometryCollection, 4326) | 混合几何集合 | 混合 | GEOMETRYCOLLECTION(...) | 少数复杂混合对象 |
这些类型都在 PostGIS 官方数据管理文档的 OGC Geometry 模型中列出,并给了对应的 WKT 示例。(PostGIS)
2)带维度后缀的类型
PostGIS 支持在几何类型后面加后缀:
Z:三维,XYZM:三维,XYM,其中 M 是测量值ZM:四维,XYZM
例如:
POINTZLINESTRINGMPOINTZMPOLYGONZM
官方文档明确写到:LINESTRINGM 允许三维线,并把第三维视为 measure;POINTZM 则要求四维 XYZM 数据。(PostGIS)
三、维度后缀怎么理解
下面这张表最实用。
| 后缀写法 | 实际坐标维度 | 含义 |
|---|---|---|
| 无后缀 | 2D | XY |
Z | 3D | XYZ |
M | 3D | XYM |
ZM | 4D | XYZM |
PostGIS 官方文档说明,坐标可以包含可选的 Z 和 M 值;Z 常用于高程,M 是 measure 值,可表示时间、距离、里程等。如果同时有 Z 和 M,则是四维。(PostGIS)
1)XY:普通二维
geometry(Point, 4326)
geometry(LineString, 4326)
geometry(Polygon, 4326)适合绝大多数业务 GIS 表。官方示例里也直接使用了 geometry(LINESTRING,3005) 这样的二维建表方式。(PostGIS)
2)XYZ:带高程
geometry(PointZ, 4326)
geometry(LineStringZ, 4326)
geometry(PolygonZ, 4326)适合有海拔、高度、楼层、杆塔高度等需求。官方示例给出了 geometry(POINTZ,3005) 和 geometry(LINESTRINGZ,4326)。(PostGIS)
3)XYM:带测量值
geometry(PointM, 4326)
geometry(LineStringM, 4326)适合线性参考、里程桩、时间序列轨迹点等场景。PostGIS 官方明确说明,LINESTRINGM 的第三维是 measure。(PostGIS)
4)XYZM:高程 + 测量值
geometry(PointZM, 4326)
geometry(LineStringZM, 4326)
geometry(PolygonZM, 4326)适合更复杂的三维工程与时空测量场景。官方示例里直接给出了 geometry(LINESTRINGZM) 以及 POINT ZM 的 WKT 示例。(PostGIS)
四、常见建表示例
1)站点表:点
CREATE TABLE res_site (
id bigserial PRIMARY KEY,
name varchar(200),
geom geometry(Point, 4326)
);这是最典型的二维点表写法。PostGIS 官方示例中也演示了 geometry(POINT) 的建表方式。(PostGIS)
2)光缆表:线
CREATE TABLE res_cable (
id bigserial PRIMARY KEY,
cable_name varchar(200),
geom geometry(LineString, 4326)
);这和你前面问的 geometry(LineString, 4326) 是同一种模式,只是换成业务表名。官方示例里同样给出了 geometry(LINESTRING,3005)。(PostGIS)
3)维护区表:面
CREATE TABLE res_region (
id bigserial PRIMARY KEY,
region_name varchar(200),
geom geometry(Polygon, 4326)
);如果一个维护区由多个不连续区域构成,则改成 MultiPolygon 更合适。官方几何模型里把 Polygon 和 MultiPolygon 都列为标准类型。(PostGIS)
4)带高程的杆塔点
CREATE TABLE res_pole (
id bigserial PRIMARY KEY,
name varchar(200),
geom geometry(PointZ, 4326)
);如果你要存“经度、纬度、海拔高度”,这就比普通 Point 更合适。官方示例支持这种 POINTZ 写法。(PostGIS)
5)带里程值的线路
CREATE TABLE res_route (
id bigserial PRIMARY KEY,
name varchar(200),
geom geometry(LineStringM, 4326)
);适合做“线路 + 里程桩”类模型,因为 M 可以作为测量值使用。(PostGIS)
五、SRID 常见代码表
这里是你建表时最常碰到的一部分。要注意:SRID 代码和 geometry 类型不是一回事。前者是坐标参考系编号,后者是图形形状。PostGIS 官方说明,几何对象与空间参考系统通过 SRID 关联;EPSG 则是最常见的标准来源。(PostGIS)
| SRID | 名称 | 类型 | 常见用途 |
|---|---|---|---|
0 | 无参考系/本地笛卡尔平面 | Local Cartesian | 未指定地理坐标,仅本地平面 |
4326 | WGS 84 | Geographic 2D | GPS、GeoJSON、通用经纬度 |
4979 | WGS 84 | Geographic 3D | 经纬度 + 高程 |
4978 | WGS 84 | Geocentric | 地心坐标 XYZ |
EPSG 官方资料明确写明:4326 是 WGS 84 Geographic 2D;EPSG 数据模型页还列出了 4979 为 WGS 84 Geographic 3D,4978 为 WGS 84 Geocentric。PostGIS 官方则说明,SRID 0 表示没有单位的无限笛卡尔平面。(EPSG)
六、你可以直接这样记
1)形状类型
- 点:
Point - 线:
LineString - 面:
Polygon - 多点:
MultiPoint - 多线:
MultiLineString - 多面:
MultiPolygon
这些是最常用的一组。(PostGIS)
2)维度后缀
- 不写:
XY Z:XYZM:XYMZM:XYZM
这是 PostGIS 官方定义的坐标维度限制方式。(PostGIS)
3)坐标系代码
4326:WGS84 二维经纬度4979:WGS84 三维经纬度0:无参考系本地平面
这些是 SRID,不是 geometry 类型。(EPSG)
七、结合你的资源系统,推荐怎么选
按你这种 机房、光缆、管道、杆路、片区、客户点 的场景,我建议:
第一层:先统一用二维
- 机房、站点、箱体:
geometry(Point, 4326) - 光缆、管道、杆路:
geometry(LineString, 4326) - 责任片区、服务区:
geometry(Polygon, 4326)
这是最稳妥、最好维护的起步方案。PostGIS 的二维 geometry 类型是最标准、最通用的建模方式。(PostGIS)
第二层:只有明确需要高程时再上 Z
例如:
- 杆塔高度
- 楼顶设备高度
- 三维管线
就用:
PointZLineStringZ
因为 Z 维一旦引入,后面的采集、展示、分析都要跟着规范。PostGIS 官方支持这些 3D 类型,但是否需要应该由业务决定。(PostGIS)
第三层:只有明确需要里程/测量值时再上 M
例如:
- 光缆沿线里程
- 巡检路径时间轴
- 轨迹测量值
就用:
PointMLineStringM
官方文档明确说明 M 是 measure 值,而不是高程。(PostGIS)
八、最实用的结论
你可以把下面这几组先背下来:
geometry(Point, 4326)
geometry(LineString, 4326)
geometry(Polygon, 4326)
geometry(MultiLineString, 4326)
geometry(PointZ, 4326)
geometry(LineStringM, 4326)
geometry(LineStringZM, 4326)其中:
- 前半部分决定“图形长什么样”
- 后半部分决定“坐标按什么参考系解释”
这正是 PostGIS 官方 geometry type modifier 的设计方式。(PostGIS)