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