2017-05-23 2 views
0

모양 파일 세트가 있습니다. 그리고 QGis에 모든 레이어를로드했습니다. 모든 레이어의 지형지 물을 선택하고 특정 지형의 지오메트리와 비교하려고합니다. 는 다음 코드 프로그램은 다음과 같은 오류를 반환QGis 벡터 레이어의 모든 레이어의 기능을 얻는 방법

layers = self.QgsMapLayerRegistry.instance().mapLayers() 
iter = layer.getFeatures() 
for feature in iter: 
    geom_is = feature.geometry() 
    iter_1 = layers.getFeatures() 
    for feat in iter_1: 
     geom_all = feat.geometry() 
     if geom_is == geom_all: 
      check_passed = True 
     else: 
      check_passed = False 
return check_passed 

시도 : 'DICT'개체가이를 더 속성 'getFeatures 없다'

+0

... 그런데 무슨 일이 일어 났습니까? – asongtoruin

+0

@asongtoruin 프로그램은 다음 오류를 반환합니다. 'dict'객체에 'getFeatures'속성이 없습니다. –

답변

0
  1. 난 당신의 코드에 정의 된 "레이어"를 볼 수 없습니다 . 내가 더 일찍 정의했다고 생각해?

  2. 라인에서 5 코드는 말합니다 : layer**s**.getFeatures() 따라서 오류 : AttributeError는 '딕셔너리'객체가 더 속성 'getFeatures' 층은 DICT 형 객체입니다 있습니다. 프로젝트의 모든 레이어 (기능 제외)가 포함되어 있습니다.

귀하의 문제를 해결하려면 QgsFeatures가 dict가 아닌 레이어를 가져와야한다고 생각합니다. 과 같이, 모든 레이어를 통해 당신은 ITER를 필요한 모든 기능 형상을 수집 한 후

layers = self.QgsMapLayerRegistry.instance().mapLayers().values() 

: 내 제안에 대한 첫 번째 라인을 변경하는 것

allFeatures = [] 
for l in layers: 
    for f in l.getFeatures(): 
    allFeatures.append(f.geometry()) 

유일한 왼쪽은 셀프 체크를 처리하는 것입니다. 도움이 필요하면 알려주세요. 건배!

관련 문제