Http://www.naturalearthdata.com/downloads/50m-cultural-vectors/ adresinden ülkeyi ve nüfuslu yer veri kümelerini kullanarak python'da ogr kullanmayı öğrenmeye çalışıyorum. Ben adlandırılmış bir ülkenin (ne_50m_admin_0_countries.shp özellik sınıfı ADMIN filtre) belirli bir arabellek içinde noktaları (ne_50m_populated_places.shp) bulmak için filtreleri ve arabellekleri kullanmaya çalışıyorum. Sorun, tampon () için hangi birimleri kullanacağımı anlamıyorum gibi görünüyor. Senaryoda ben sadece senaryonun çalışıp çalışmadığını test etmek için 10 keyfi değerini kullandım. Komut dosyası çalışır, ancak adlandırılmış 'Angola' ülkesi için Karayipler bölgesindeki nüfuslu yerleri döndürür. İdeal olarak, 500 km gibi bir arabellek mesafesi belirleyebilmek istiyorum, ancak bunu nasıl yapacağımı anlayamıyorum çünkü anlayışım buffer () wgs84 lat / long biçiminde olacak country.shp birimlerini kullanıyor . Bunu başarmak için yöntem önerileri çok takdir edilecektir.
# 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()