我在将线串写入地理软件包中的众所周知的二进制(WKB)结构时遇到问题
我正在尝试将一些空间数据写入地理包,这是sqlite文件中的二进制文件。我不希望使用整形图形,因为它具有较大的依赖性曲线,并且已证明很难在许多机器上安装。我更喜欢尽可能地坚持标准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
vectors是一个简单的坐标列表[x0,y0,x1,y1,...]
指向WKB的代码很有效
###############################################################################
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等中正常显示。