感谢scai的回答,我得以弄清楚.
gdal.org/1.11/ogr/drv_osm.html中提到的交错阅读所需的特殊阅读模式被转换为可以在下面找到的python示例.
这是如何提取.osm.pbf文件中所有带有’amenity = pub’标签的功能的示例
import gdal, ogr
gdal.SetConfigOption('OGR_INTERLEAVED_READING', 'YES')
osm = ogr.Open('file.osm.pbf')
# Grab available layers in file
nLayerCount = osm.GetLayerCount()
thereIsDataInLayer = True
pubs = []
while thereIsDataInLayer:
thereIsDataInLayer = False
# Cycle through available layers
for iLayer in xrange(nLayerCount):
lyr=osm.GetLayer(iLayer)
# Get first feature from layer
feat = lyr.GetNextFeature()
while (feat is not None):
thereIsDataInLayer = True
#Do something with feature, in this case store them in a list
if feat.GetField('amenity') == 'pub':
pubs.append(feat)
#The destroy method is necessary for interleaved reading
feat.Destroy()
feat = lyr.GetNextFeature()
据我了解,需要使用while循环而不是for循环,因为使用交错读取方法时,不可能获得集合的特征数.
非常感谢您进一步澄清为什么这段代码如此工作.