Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gis 为什么shapely/geos可以解析这个';无效';著名的二进制?_Gis_Geospatial_Specifications_Geos_Shapely - Fatal编程技术网

Gis 为什么shapely/geos可以解析这个';无效';著名的二进制?

Gis 为什么shapely/geos可以解析这个';无效';著名的二进制?,gis,geospatial,specifications,geos,shapely,Gis,Geospatial,Specifications,Geos,Shapely,我试图解析地理信息系统(GIS)中使用的几何体对象的二进制编码。我正在使用(相同的结果)。我从一个工具输入数据来解析OpenStreetMap数据,特别是给出二进制十六进制表示的 ESRI文件指出,对于点,应该只有21个字节;对于字节顺序,应该有1个字节;对于uint32,应该有4个字节;对于双x,应该有8个字节;对于双y,应该有8个字节 渗透作用的一个示例是(十六进制)示例:0101000020e610000db81df2b5f7822c0dfbb7262b4744a40,长度为25字节 解析

我试图解析地理信息系统(GIS)中使用的几何体对象的二进制编码。我正在使用(相同的结果)。我从一个工具输入数据来解析OpenStreetMap数据,特别是给出二进制十六进制表示的

ESRI文件指出,对于
,应该只有21个字节;对于字节顺序,应该有1个字节;对于uint32,应该有4个字节;对于双x,应该有8个字节;对于双y,应该有8个字节

渗透作用的一个示例是(十六进制)示例:
0101000020e610000db81df2b5f7822c0dfbb7262b4744a40
,长度为25字节

解析WKB(etc)的python程序基于流行的C库能够解析此字符串:

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

差异是中间的4个字节,在UIT32中出现3个字节,用于Type I= D

01010000**20E61000**00DB81DF2B5F7822C0DFBB7262B4744A40

为什么shapely/geos可以在WKB无效时解析此WKB?这些字节意味着什么?

GEOS/Shapely使用了一个扩展的WKT/WKB变体,称为EWKT/EWKB,这是PostGIS提供的。如果您有权访问PostGIS,您可以看到这里发生了什么:

SELECT ST_AsEWKT('0101000020E6100000DB81DF2B5F7822C0DFBB7262B4744A40'::geometry);
返回EWKT
SRID=4326;点(-9.2351011 52.9117549)
。因此,额外的数据是空间参考标识符,或SRID。特别是WGS 84

然而,Shapely也有一些缺陷,例如:

from shapely import geos
geos.WKBWriter.defaults['include_srid'] = True
现在应使
wkb
wkb_hex
输出包含SRID的EWKB。默认值为
False
,这将输出二维几何图形的ISO WKB(但不用于三维几何图形)

因此,您的目标似乎是将EWKB转换为ISO WKB,这仅适用于二维几何图形的GEOS/Shapely。如果您有3D(Z或M)或4D(ZM)几何图形,则只有PostGIS能够进行此转换

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