将知名的二进制线串记录写入geopackage / sqlite时出现问题

时间:2019-07-19 11:09:48

标签: python gis qgis wkb geopackage

我在将线串写入地理软件包中的众所周知的二进制(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等中正常显示。

0 个答案:

没有答案