当存在 SRID 时,PostGIS 不(仅)使用 WKB 标准,它使用支持 3d 和 SRID 的EWKB格式,而WKB 规范没有。将 WKB 视为一种轻量级的二进制二维数组,它是一种非常简单的格式。它不包括二进制表示中的高程或 SRID,在 OGC 标准空间参考系统中是元数据。以下是一些可能有助于了解您如何使用 WKB 和 EWKB 的交互类型:
moveable=> insert into my_table (some_other_geom) values (GeomFromText('POINT(4 5)'));
moveable=> insert into my_table (some_other_geom) values (GeomFromText('POINT(4 5)', 4326));
这给了你:
010100000000000000000010400000000000001440
0101000020E610000000000000000010400000000000001440
如你所见。如果您从十六进制值开始并想要添加 SRID 投影并存储为 EWKB,您可以执行以下一些变体:
==>insert into my_table (some_other_geom) values (ST_GeomFromWKB(decode('010100000000000000000010400000000000001440', 'hex'), 4326));
INSERT 0 1
或者:
moveable=> insert into my_table (some_other_geom) values (ST_GeomFromWKB(decode('010100000000000000000010400000000000001440', 'hex')));
INSERT 0 1
正如您所期望的那样,这些产量分别为:
0101000020E610000000000000000010400000000000001440
010100000000000000000010400000000000001440
其中 null-1
默认 SRID 与非 SRID 2d WKB 格式相同。一般来说,我认为使用 WKT、GeoJSON 和 KML 更安全,因为它们也是OGC (?) 1开放标准,并且 SQL 版本有一些需要更新的待定。正如 PostGIS 文档所建议的那样:“PostGIS 扩展格式目前是 OGC 的超集(每个有效的 WKB/WKT 都是有效的 EWKB/EWKT),但这在未来可能会有所不同,特别是如果 OGC 出现与我们的扩展冲突的新格式. 因此,您不应该依赖此功能!”
(1) 实际上不知道这些标准的一半是什么状态,但是 json、text 和 xml 似乎可能在任何给定应用程序的生命周期中都存在。