感谢scai的回答,我弄明白了。
在gdal.org/1.11/ogr/drv_osm.html中提到的交错阅读所需的特殊阅读模式被翻译成了一个可以在下面找到的工作python示例。
这是如何提取在.osm.pbf文件中有“市容=酒馆”标签
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-loop,因为当使用交错读取方法时,不可能获得集合的特征计数。
更多关于这段代码为什么能起作用的原因将不胜感激。