http://www.naturalearthdata.com/downloads/50m-cultural-vectors/ 에서 국가와 인구 통계 정보를 사용하여 파이썬에서 ogr을 사용하는 방법을 배우려고합니다 .. 이름이 지정된 국가의 지정된 버퍼 (ne_50m_admin_0_countries.shp의 기능 클래스 ADMIN에서 필터링 됨) 내에서 포인트 (ne_50m_populated_places.shp)를 찾기 위해 필터와 버퍼를 사용하려고합니다. 문제는 buffer ()에 사용할 단위를 이해하지 못하는 것 같습니다. 스크립트에서는 스크립트가 작동하는지 테스트하기 위해 임의의 값 10을 사용했습니다. 이 스크립트는 실행되지만 명명 된 국가 'Angola'의 카리브 지역 주변에서 채워진 장소를 반환합니다. 이상적으로는 500km와 같은 버퍼 거리를 지정할 수 있기를 원하지만 buffer ()가 국가 단위를 사용하고 있기 때문에 이해하는 방법을 해결할 수 없습니다 .wgs84 lat / long 형식입니다. . 이를 달성하는 방법에 대한 조언은 대단히 감사하겠습니다.
# 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()