Проблема записи хорошо известной двоичной записи строки в геопакет / sqlite
У меня проблемы с записью линейной строки в хорошо известную двоичную структуру (WKB) в геопакете
Я пытаюсь записать некоторые пространственные данные в геопакет, который является хорошо известным двоичным файлом в файле sqlite. Я не хочу использовать shapely, так как он имеет большую кривую зависимости и его трудно установить на многих машинах. Я предпочитаю придерживаться стандартного Python как можно больше. Мой код может создать базовую структуру таблиц в sqlite, и может создать таблицу точечных объектов в WKB без проблем. Они очень хорошо открываются в qgis и т. Д. Я борюсь с созданием действительных строк в WKB. Таблица создается и загружается в qgis без ошибок. Количество записей правильное, но геометрия не отображается. Я почти уверен, что у меня ошибка при создании WKB. Вот мой код...
###############################################################################
def createlinestring(vectors, srid=4326):
'''https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry#Well-known_binary'''
fmt = "<2sbbIbI%sd" % len(vectors)
flags = 0
flags = set_bit(flags,0) # little endian,
hdr = b"GP" # magic identifier, always GP
version = 0 # always 0 which means version 1 of geopackage
geometry_type = 2 # geometry type, 2 for linestring
count = len(vectors) # number of entries in this vector
wkb = struct.pack(fmt, hdr, version, geometry_type, srid, flags, count, *vectors)
return wkb
векторы представляет собой простой список координат [x0, y0, x1, y1,...]
Код для очков в ВКБ работает лакомство
###############################################################################
def createpoint(x,y,z=0, srid=4326):
'''https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry#Well-known_binary'''
fmt = "<2sbbIbIdd"
flags = 0
flags = set_bit(flags,0) # little endian byte order
hdr = b"GP" # magic identifier, always GP
version = 0 # always 0 which means version 1 of geopackage
geometry_type = 1 # geom type, 1 for points
count = 1
wkb = struct.pack(fmt, hdr, version, geometry_type, srid, flags, count, x,y)
return wkb
Я надеюсь, что векторы будут отображаться нормально в QGIS, ArcGIS и т. Д.