基于其他矢量图层属性(pyqgis)创建新字段

2024-10-03 17:16:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我想根据向量层“Buildings”和“Intersection”中的属性在vector layer“Join”中创建一个新字段,但是PyQgis返回了一系列工作编号,特别是字段“Intersection”的第一个特征值(我想错误在for循环的脚本/序列中)。你能帮帮我吗?在

featuresB=layerBuildings.getFeatures() 
featuresJ=layerJoin.getFeatures() 
featuresI=layerIntersection.getFeatures()    
for fJ in featuresJ:
    for fI in featuresI:
         for fB in featuresB:
             if fI.geometry().area()*2>=fB.geometry().area():
                print fI[field_x]
             else:
                print fJ[field_y]

Tags: infieldforfbarea向量fiprint
2条回答

我附上了一个小例子,下面是你想提出的想法。 但是如果不使用任何联合字段就可以覆盖值。在

我希望能对你的问题有所帮助或起到指导作用

from qgis.core import *
from qgis.gui import *
from PyQt4.QtCore import *
from PyQt4.QtGui import *

#TOC Layers
layerB = QgsMapLayerRegistry.instance().mapLayersByName('farmacias')[0]
layerJ = QgsMapLayerRegistry.instance().mapLayersByName('call2016')[0]
layerI = QgsMapLayerRegistry.instance().mapLayersByName('albergues')[0]

#Provider
provider = layerJ.dataProvider()
provider.addAttributes( [ QgsField('new_field', QVariant.String)])
layerJ.updateFields()

#Loop           
for j in layerJ.getFeatures():
    #print "Layer Join :" + str(j)
    for b in layerB.getFeatures():
        #print "Layer Buildings :" + str(b)
        for i in layerI.getFeatures():
            #print "Layer Intersection :" + str(i)
            #if "your condition"
            provider.changeAttributeValues({j.id() : {provider.fieldNameMap()['new_field'] : i[0]}})
            layerJ.updateFeature(j)

第二,你要求完整的代码:这里有一些小的改动:

joined_layer=QgsVectorLayer(path,name,"ogr") 
intersected_layer=QgsVectorLayer(path,name,"ogr") 

featuresJ=joined_layer.getFeatures() 
featuresI=intersected_layer.getFeatures() 
featuresB=Bld_layer.getFeatures() 

for fJ in featuresJ: 
   for fI in featuresI: 
     geomI=fI.geometry() #lo piglia 
     for fB in featuresB: geomB=fB.geometry() 
       if geomI.area()*2>=geomB.area():
          val= fI[1] 
       else: 
          val= fJ[2] 
       print val 

相关问题 更多 >