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

.GetFeature()和.GetNextFeature()是Python/GDAL库中获取feature特性的函数,但因为实现方法不一样形成执行速度差异很大,特别须要遍历整个对象的feature时。python

使用.GetFeature()的代码片断:app

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)

执行结果:指针

缘由分析:code

对于顺次遍历feature的状况,如如今需得到feature(i)则:对象

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

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

附录-整个代码:io

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)
相关文章
相关标签/搜索