Python/GDAL库中.GetNextFeature()与.GetFeature()执行速度对比

.GetFeature()和.GetNextFeature()是Python/GDAL库中获取feature特性的函数,但由于实现方法不同造成执行速度差别很大,特别需要遍历整个对象的feature时。

使用.GetFeature()的代码片段:

time_array = []
featureCount = layer.GetFeatureCount()
for i in range(featureCount):
    time_t1 = time.time()
    feature = layer.GetFeature(i)
    time_array.append(time.time()-time_t1)

使用.GetNextFeature()的代码片段:

time_array = []
featureCount = layer.GetFeatureCount()
for i in range(featureCount):
    time_t1 = time.time()
    #feature = layer.GetFeature(i)

    feature = layer.GetNextFeature()
    time_array.append(time.time()-time_t1)

执行结果:

142530_3Bcu_251951.png

原因分析:

对于顺次遍历feature的情况,如现在需获得feature(i)则:

对于.GetFeature(),其初始指针都是从0开始,因此遍历顺序为0,1,...,i,共读取i+1次

对于.GetNextFeature(),当前指针指向feature(i+1),此时只需要将指针下移1次,即读取1次

附录-整个代码:

from osgeo import gdal, ogrimport time


# 防止中文乱码

gdal.SetConfigOption('DXF_ENCODING', 'utf-8')

# 注册所有的驱动

ogr.RegisterAll()

# 数据格式的驱动

driver = ogr.GetDriverByName("DXF")

ds = driver.Open("test.dxf")

layer = ds.GetLayerByIndex(0)

print u'要素个数=%d' % layer.GetFeatureCount()

cad_entities = []

time_t1 = time.time()
f1 = layer.GetFeature(0)
print time.time()-time_t1

time_array = []

featureCount = layer.GetFeatureCount()
for i in range(featureCount):
    time_t1 = time.time()
    #feature = layer.GetFeature(i)

    feature = layer.GetNextFeature()
    time_array.append(time.time()-time_t1)

转载于:https://my.oschina.net/u/251951/blog/363851

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值