微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从python写入现有的geopackage非常慢

如何解决从python写入现有的geopackage非常慢

我有一些代码从 python 调用 gdal.polygonize 在地理包中创建一个新层。如果 geopackage 尚不存在,我会使用 driver.CreateDataSource(my.gpkg) 创建它,并且一切正常。但是,如果 geopackage 已经存在,gdal.polygonize 调用将永远/永远不会完成。我希望有一些与我缺少的地理包结构相关的东西,并且有一个简单的修复方法。有什么想法吗?

相关代码

# Create vector
dst_driver,lyr_name = detect_ogr_driver(out_vec)  # returns the gpkg driver object and 'mylayer'
if lyr_name is not None:
    db = str(Path(out_vec).parent)  # path to geopackage,e.g. C:\temp\my.gpkg
    if not Path(db).exists():
        dst_ds = dst_driver.CreateDataSource(db)
    else:
        dst_ds = ogr.Open(db,update=True)
        existing_lyrs = [dst_ds.GetLayer(i).GetName()
                         for i in range(dst_ds.GetLayerCount())]
        if lyr_name in existing_lyrs:  # slowness persists regardless of if the layer exists and is deleted or does not exist
            logger.debug('Removing existing layer: {}'.format(Path(db) / lyr_name))
            dst_ds.DeleteLayer(lyr_name)
else:  # irrelevant,for creating formats like .shp or .geojson
    dst_ds = dst_driver.CreateDataSource(out_vec)
    # Drop extension for layer name
    lyr_name = os.path.basename(os.path.splitext(out_vec)[0])
dst_lyr = dst_ds.CreateLayer(lyr_name,srs=src_srs)
logger.debug('Vector layer SRS: {}'.format(dst_lyr.GetSpatialRef().ExportToWkt()))
field_dfn = ogr.FieldDefn(fieldname,ogr.OFTString)
dst_lyr.CreateField(field_dfn)
# polygonize
logger.debug('Vectorizing...')
status = gdal.polygonize(src_band,None,dst_lyr,[],callback=None) # hangs here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。