2016-07-12 1 views
1

나는 필드 이름 목록을 가지고 있고이 코드를 사용하여 필드 값을 얻기 위해 노력하고 있어요 :방법을 사용하여 목록에서 벡터 레이어의 필드 값을 얻을 수 GDAL

from osgeo import osr,ogr, gdal 
shp="filepath" 
driver = ogr.GetDriverByName('ESRI Shapefile') 
dataSource = driver.Open(shp,0) 
layer=dataSource.GetLayer() 
list=['field1','field2','field3'] 
for i in layer: 
    ValList = [i.GetField(j) for j in list] 

내가 무엇입니까를 다음 오류 :

raise ValueError("Illegal field requested in GetField()") 
ValueError: Illegal field requested in GetField() 

그래서 목록에서 값을 가져 오려면 어떻게해야합니까?

+0

이 조각의 코드 (마지막 두 줄)을 사용하여 필드 이름을 인쇄 해보십시오 : https://pcjericks.github.io/py-gdalogr- cookbook/vector_layers.html # get-shapefile-fields-get-the-user-defined-fields. 잘못된 이름을 요구할 수도 있습니다. – Benjamin

답변

1
  1. list 변수 이름은 예약 된 Python 단어이므로 사용하지 마십시오.
  2. 코드가 잘 작동합니다. 필드 목록에서 오류가 발생한 것 같습니다.

이 나를 위해 잘 작동 :

from osgeo import ogr 

shp= "your_shapefile_path" 
driver = ogr.GetDriverByName('ESRI Shapefile') 

dataSource = driver.Open(shp, 0) 
layer = dataSource.GetLayer() 
list_field = ['existing_field'] 
for feature in layer: 
    values_list = [feature.GetField(j) for j in list_field] 
+0

제대로 작동하려면 코드 블록의 끝에 layer.ResetReading()을 추가해야했습니다 (for 루프의 일부로 들여 쓰지 않음). "기능 반복 (Iterate over Features)"섹션을 참조하십시오 (https://pcjericks.github.io/py-gdalogr-cookbook/vector_layers.html). –

관련 문제