2017-05-23 8 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 

プログラムは、次のエラーを返してみました: 「辞書」オブジェクトは、私はあなたのコードで定義された「層」を見ることができない無属性「getFeatures」

+0

...そして何が起こったのですか? – asongtoruin

+0

@ason​​gtoruinプログラムは次のエラーを返します: 'dict'オブジェクトに属性がありません 'getFeatures' –

答えて

0
  1. を持っているが。私はそれが以前に定義されていると推測します。これ layer**s**.getFeatures() エラー:行で

  2. あなたのコード5と言うはAttributeError:「辞書」オブジェクトが属性「getFeatures」 層を有しているが辞書型オブジェクトです。プロジェクトのすべてのレイヤー(フィーチャーではありません!!!)が含まれています。

あなたの問題を解決するには、QgsFeaturesとしてレイヤを取得する必要があると思います。そのように、すべての層を通じてあなたがITERをする必要がありますすべての機能のジオメトリを収集するために、その後

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

: 私の提案はに最初の行を変更することであろう

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

唯一のもの左はセルフチェックに注意することです。 これが役に立ったらお知らせください。 歓声!

関連する問題