我正试图解析Well Known Binary地理信息系统(GIS)中使用的几何对象的二进制编码。我正在使用this spec from ESRI(结果相同here from esri)。我从Osmosis输入数据来解析OpenStreetMap数据,特别是pgsimp-dump format,它给出了二进制的十六进制表示。为什么可以修改/ geos解析这个'无效的'众所周知的二进制文件?
ESRI文档说,对于Point
,字节顺序应该只有21个字节,对于typeid应该只有4个字节,对于doubley应该只有8个字节,对于double y应该只有8个字节。
来自渗透的一个例子是这个(十六进制)的例子:0101000020E6100000DB81DF2B5F7822C0DFBB7262B4744A40
,它是25个字节长。
Shapely一个python程序来解析WKB(ETC),这是基于流行的C库GEOS是能够解析这个字符串:当我问匀称从此转换为解析
>>> import shapely.wkb
>>> shapely.wkb.loads("0101000020E6100000DB81DF2B5F7822C0DFBB7262B4744A40", hex=True)
<shapely.geometry.point.Point object at 0x7f221f2581d0>
WKB我得到了21个字节。
>>> shapely.wkb.loads("0101000020E6100000DB81DF2B5F7822C0DFBB7262B4744A40", hex=True).wkb.encode("hex").upper()
'0101000000DB81DF2B5F7822C0DFBB7262B4744A40'
的差是4个字节在中间,其中出现3个字节到UINT32为typeif = d
01010000**20E61000**00DB81DF2B5F7822C0DFBB7262B4744A40
为什么可以匀称/ GEOS解析这个WKB时,它的无效WKB?这些字节是什么意思?