Sto cercando di imparare come usare ogr in python usando i set di dati del paese e dei luoghi popolati da http://www.naturalearthdata.com/downloads/50m-cultural-vectors/. Sto tentando di utilizzare filtri e buffer per trovare punti (ne_50m_populated_places.shp) all'interno di un buffer specificato di un Paese denominato (filtrato dalla classe di caratteristiche ADMIN in ne_50m_admin_0_countries.shp). Il problema sembra essere che non capisco quali unità utilizzare per buffer (). Nello script ho semplicemente usato un valore arbitrario di 10 per verificare se lo script funziona. La sceneggiatura viene eseguita ma restituisce luoghi popolati da tutta la regione dei Caraibi per il paese denominato "Angola". Idealmente, voglio essere in grado di specificare una distanza di buffer, diciamo 500km, ma non riesco a capire come farlo poiché la mia comprensione è buffer () sta usando le unità di country.shp che saranno nel formato wgs84 lat / long . I consigli sul metodo per raggiungere questo obiettivo sarebbero molto apprezzati.
# import modules
import ogr, os, sys
## data source
os.chdir('C:/data/naturalearth/50m_cultural')
# get the shapefile driver
driver = ogr.GetDriverByName('ESRI Shapefile')
# open ne_50m_admin_0_countries.shp and get the layer
admin = driver.Open('ne_50m_admin_0_countries.shp')
if admin is None:
print 'Could not open ne_50m_admin_0_countries.shp'
sys.exit(1)
adminLayer = admin.GetLayer()
# open ne_50m_populated_places.shp and get the layer
pop = driver.Open('ne_50m_populated_places.shp')
if pop is None:
print 'could not open ne_50m_populated_places.shp'
sys.exit(1)
popLayer = pop.GetLayer()
# use an attribute filter to restrict ne_50m_admin_0_countries.shp to "Angola"
adminLayer.SetAttributeFilter("ADMIN = ANGOLA")
# get the Angola geometry and buffer it by 10 units
adminFeature = adminLayer.GetFeature(0)
adminGeom = adminFeature.GetGeometryRef()
bufferGeom = adminGeom.Buffer(10)
# use bufferGeom as a spatial filter on ne_50m_populated_places.shp to get all places
# within 10 units of Angola
popLayer.SetSpatialFilter(bufferGeom)
# loop through the remaining features in ne_50m_populated_places.shp and print their
# id values
popFeature = popLayer.GetNextFeature()
while popFeature:
print popFeature.GetField('NAME')
popFeature.Destroy()
popFeature = popLayer.GetNextFeature()
# close the shapefiles
admin.Destroy()
pop.Destroy()