Я пытаюсь разобрать Well Known Binary двоичное кодирование объектов геометрии, используемых в географических информационных системах (ГИС). Я использую this spec from ESRI (те же результаты here from esri). У меня есть входные данные от Osmosis - инструмент для анализа данных OpenStreetMap, в частности pgsimp-dump format, который дает шестнадцатеричное представление двоичного файла.Почему красивое/геофолическое синтаксическое разборку это «недопустимое» хорошо известное двоичное?
Документы ESRI говорят, что должно быть только 21 байт для Point
, 1 байт для порядка байтов, 4 для uint32 для typeid и 8 для double x и 8 для double y.
Пример из осмоса - это пример (шестнадцатеричный): 0101000020E6100000DB81DF2B5F7822C0DFBB7262B4744A40
, длина которого составляет 25 байт.
Shapely программа питон для разбора ВКБ (и т.д.), который основан на популярной библиотеке 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 байта в середине, которые появляются 3 байта в uint32 для typeif = д
01010000**20E61000**00DB81DF2B5F7822C0DFBB7262B4744A40
Почему стройные/GEOS разобрать этот ВКБ, когда он недействителен ВКБ? Что означают эти байты?