.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)