使用OSGeo或Shapely实现PostGIS EWKB几何的双向转换
使用OSGeo处理PostGIS几何的EWKB格式转换
针对你用PostGIS创建的SELECT 'POINT(1 2 3 2)'::geometry这个带M值的4D点,我来一步步演示怎么用OSGeo完成EWKB格式的读取和重新转换(实际场景里你可以在中间修改几何,这里只做格式转换演示):
首先,你需要导入必要的库,然后处理PostGIS返回的EWKB十六进制字符串,完整代码如下:
import binascii from osgeo import ogr # 假设这是PostGIS返回的完整EWKB十六进制字符串(补全你提供的片段) ewkb_hex = '01010000C0000000000000F03F000000000000004000000000000008400000000000000040' # 1. 将十六进制字符串解码为二进制数据 ewkb_bin = binascii.unhexlify(ewkb_hex) # 2. 用OGR读取二进制EWKB,解析为几何对象 geom = ogr.CreateGeometryFromWkb(ewkb_bin) # 这里可以添加几何修改逻辑,比如调整坐标值、修改几何类型等 # 3. 将几何重新导出为EWKB二进制数据,再转回十六进制字符串 new_ewkb_bin = geom.ExportToWkb(ogr.wkbExtended) new_ewkb_hex = binascii.hexlify(new_ewkb_bin).decode('utf-8') # 输出结果(如果没修改几何,会和原EWKB一致) print(new_ewkb_hex)
关键细节说明:
binascii.unhexlify和hexlify负责十六进制与二进制的双向转换,这是因为PostGIS返回的EWKB通常以十六进制字符串形式传输ogr.CreateGeometryFromWkb会自动识别EWKB的扩展格式(包括3D/4D坐标、空间参考信息等),无需额外配置- 导出时指定
ogr.wkbExtended参数,确保输出的是兼容PostGIS的标准EWKB格式
内容的提问来源于stack exchange,提问作者Thilo
相关产品推荐
相关产品推荐

