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)
相關文章
相關標籤/搜索