Monday 28 September 2015

pyqgis - How to import for QgsVectorLayerJoinInfo in QGIS3 (python)?


I am trying to join layers programmatically following the answers in the GIS.SE question - Join table field with shapefile programatically (via PyQgis)? :


# Get input (csv) and target (Shapefile) layers
shp=iface.activeLayer()
csv=iface.mapCanvas().layers()[0]


# Set properties for the join
shpField='code'
csvField='codigo'
joinObject = QgsVectorJoinInfo()
#...

But I get an error about QgsVectorJoinInfo not defined. I tried (unsuccessfully) to import it with:


from qgis.core import QgsVectorJoinInfo


(because the documentation linked above says that QgsVectorJoinInfo is in the "core" library).


How should I import it properly or otherwise make the above code work?


(In general, how to tell from documentation which library to import?)



Answer



The class has been renamed from QgsVectorJoinInfo to QgsVectorLayerJoinInfo.


You now need to call each join function with their associated parameter:


#...
csvField = 'id'
shpField = 'ID'
joinObject = QgsVectorLayerJoinInfo()

joinObject.setJoinFieldName(csvField)
joinObject.setTargetFieldName(shpField)
joinObject.setJoinLayerId(csv.id())
joinObject.setUsingMemoryCache(True)
joinObject.setJoinLayer(csv)
shp.addJoin(joinObject)

Example:


Example


No comments:

Post a Comment

arcpy - Changing output name when exporting data driven pages to JPG?

Is there a way to save the output JPG, changing the output file name to the page name, instead of page number? I mean changing the script fo...