为什么可以匀称地解析这个“无效的”众所周知的二进制文件?

罗里

我正在尝试解析“众所周知的二进制”,一种地理信息系统(GIS)中使用的几何对象的二进制编码。我正在使用ESRI的此规范(与esri的结果相同)。我有Osmosis输入数据,它是一种分析OpenStreetMap数据的工具,特别是pgsimp-dump格式,该格式提供了二进制的十六进制表示。

ESRI文档说,a只能有21个Point字节,字节顺序应只有1个字节,typeid的uint32应该有4个字节,double x的数目应该是8个,double y的数目应该是8个。

这个(十六进制)示例就是渗透的一个示例:0101000020E6100000DB81DF2B5F7822C0DFBB7262B4744A40,它的长度为25个字节。

身材匀称一个python程序来解析WKB(ETC),这是基于流行的C库GEOS 能够解析这个字符串:

>>> import shapely.wkb
>>> shapely.wkb.loads("0101000020E6100000DB81DF2B5F7822C0DFBB7262B4744A40", hex=True)
<shapely.geometry.point.Point object at 0x7f221f2581d0>

当我要求Shapely从中解析然后转换为WKB时,我得到21个字节。

>>> shapely.wkb.loads("0101000020E6100000DB81DF2B5F7822C0DFBB7262B4744A40", hex=True).wkb.encode("hex").upper()
'0101000000DB81DF2B5F7822C0DFBB7262B4744A40'

区别在于中间的4个字节,对于typeif = d,这3个字节出现在uint32中

01010000**20E61000**00DB81DF2B5F7822C0DFBB7262B4744A40

为什么无效的WKB可以通过形状/地理解析此WKB?这些字节是什么意思?

迈克·T

GEOS /匀称使用WKT / WKB的扩展变体称为EWKT / EWKB,其记录由PostGIS的。如果可以访问PostGIS,则可以在这里查看发生了什么:

SELECT ST_AsEWKT('0101000020E6100000DB81DF2B5F7822C0DFBB7262B4744A40'::geometry);

返回EWKT SRID=4326;POINT(-9.2351011 52.9117549)因此,额外的数据是空间参考标识符或SRID。特别是WGS 84的EPSG:4326

Shapely不支持SRID,但是有一些技巧,例如:

from shapely import geos
geos.WKBWriter.defaults['include_srid'] = True

现在应该制作wkbwkb_hex输出包含SRID的EWKB。默认值为False,它将为2D几何图形输出ISO WKB(但对于3D几何图形则不输出)。

因此,看来您的目标是将EWKB转换为ISO WKB,您只能将GEOS / Shapely用于2D几何。如果您具有3D(Z或M)或4D(ZM)几何形状,则只有PostGIS能够执行此转换。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

解析二进制文件。什么是现代方式?

来自分类Dev

Haskell:懒惰地读取二进制文件

来自分类Dev

为什么剥离的二进制文件在反汇编的文件中仍然可以包含库调用信息?

来自分类Dev

应用提交:无效的二进制文件-无效的签名

来自分类Dev

为什么我的二进制文件可以在Windows 8上运行而不能在Windows 7上运行?

来自分类Dev

为什么我的二进制文件可以在Windows 8上运行而不能在Windows 7上运行?

来自分类Dev

为什么以二进制格式写入文件会导致文件大小不同?

来自分类Dev

ITMS 9000:您上传的二进制文件无效

来自分类Dev

为什么添加“ const”可以解决“无效的操作数到二进制表达式”

来自分类Dev

为什么git索引文件是二进制的?

来自分类Dev

为什么我遇到段错误(二进制数据解析)c

来自分类Dev

为什么可执行二进制文件包含包含的头文件的路径?

来自分类Dev

二进制文件被拒绝,因为无效的符号链接,有什么想法吗?

来自分类Dev

Java 8:为什么我不能将这个二进制字符串解析为一个长整数?

来自分类Dev

为什么GCC根据文件创建共享对象而不是可执行二进制文件?

来自分类Dev

cat为什么更改二进制文件的内容?

来自分类Dev

为什么在版本控制系统中应将.pbxproj文件视为二进制文件?

来自分类Dev

为什么写此二进制文件会切断文件的结尾?

来自分类Dev

为什么“二进制文件”不在原始二进制文件中?

来自分类Dev

为什么我的二进制搜索树无效删除功能无法正常工作?

来自分类Dev

在lua中解析文件的二进制文件

来自分类Dev

Haskell:用二进制懒惰地读取二进制文件

来自分类Dev

应用提交:无效的二进制文件-无效的签名

来自分类Dev

为什么我的二进制文件可以在Windows 8上运行而不能在Windows 7上运行?

来自分类Dev

为什么这个二进制文件似乎不可执行?

来自分类Dev

C无效二进制文件中的错误消息

来自分类Dev

为什么我不能正确地以二进制形式打印数字?

来自分类Dev

它有什么方法可以读取二进制文件并像这个python代码一样替换groovy中的文本?

来自分类Dev

为什么忽略二进制文件是最佳做法?

Related 相关文章

  1. 1

    解析二进制文件。什么是现代方式?

  2. 2

    Haskell:懒惰地读取二进制文件

  3. 3

    为什么剥离的二进制文件在反汇编的文件中仍然可以包含库调用信息?

  4. 4

    应用提交:无效的二进制文件-无效的签名

  5. 5

    为什么我的二进制文件可以在Windows 8上运行而不能在Windows 7上运行?

  6. 6

    为什么我的二进制文件可以在Windows 8上运行而不能在Windows 7上运行?

  7. 7

    为什么以二进制格式写入文件会导致文件大小不同?

  8. 8

    ITMS 9000:您上传的二进制文件无效

  9. 9

    为什么添加“ const”可以解决“无效的操作数到二进制表达式”

  10. 10

    为什么git索引文件是二进制的?

  11. 11

    为什么我遇到段错误(二进制数据解析)c

  12. 12

    为什么可执行二进制文件包含包含的头文件的路径?

  13. 13

    二进制文件被拒绝,因为无效的符号链接,有什么想法吗?

  14. 14

    Java 8:为什么我不能将这个二进制字符串解析为一个长整数?

  15. 15

    为什么GCC根据文件创建共享对象而不是可执行二进制文件?

  16. 16

    cat为什么更改二进制文件的内容?

  17. 17

    为什么在版本控制系统中应将.pbxproj文件视为二进制文件?

  18. 18

    为什么写此二进制文件会切断文件的结尾?

  19. 19

    为什么“二进制文件”不在原始二进制文件中?

  20. 20

    为什么我的二进制搜索树无效删除功能无法正常工作?

  21. 21

    在lua中解析文件的二进制文件

  22. 22

    Haskell:用二进制懒惰地读取二进制文件

  23. 23

    应用提交:无效的二进制文件-无效的签名

  24. 24

    为什么我的二进制文件可以在Windows 8上运行而不能在Windows 7上运行?

  25. 25

    为什么这个二进制文件似乎不可执行?

  26. 26

    C无效二进制文件中的错误消息

  27. 27

    为什么我不能正确地以二进制形式打印数字?

  28. 28

    它有什么方法可以读取二进制文件并像这个python代码一样替换groovy中的文本?

  29. 29

    为什么忽略二进制文件是最佳做法?

热门标签

归档