Skip to content

Instantly share code, notes, and snippets.

@kauevestena
Created August 8, 2023 21:25
Show Gist options
  • Save kauevestena/8094a17abf511eb7cea4493db431dfa8 to your computer and use it in GitHub Desktop.
Save kauevestena/8094a17abf511eb7cea4493db431dfa8 to your computer and use it in GitHub Desktop.
QGIS Model Builder - Python Conversion not generating unique dict keys, version 3.32
<!DOCTYPE model>
<Option type="Map">
<Option type="Map" name="children">
<Option type="Map" name="native:creategrid_1">
<Option type="bool" value="true" name="active"/>
<Option name="alg_config"/>
<Option type="QString" value="native:creategrid" name="alg_id"/>
<Option type="QString" value="" name="color"/>
<Option type="Map" name="comment">
<Option type="QString" value="" name="color"/>
<Option type="QString" value="" name="component_description"/>
<Option type="double" value="60" name="component_height"/>
<Option type="double" value="320" name="component_pos_x"/>
<Option type="double" value="115" name="component_pos_y"/>
<Option type="double" value="100" name="component_width"/>
<Option type="bool" value="true" name="outputs_collapsed"/>
<Option type="bool" value="true" name="parameters_collapsed"/>
</Option>
<Option type="QString" value="Create grid" name="component_description"/>
<Option type="double" value="30" name="component_height"/>
<Option type="double" value="191" name="component_pos_x"/>
<Option type="double" value="165" name="component_pos_y"/>
<Option type="double" value="200" name="component_width"/>
<Option name="dependencies"/>
<Option type="QString" value="native:creategrid_1" name="id"/>
<Option name="outputs"/>
<Option type="bool" value="true" name="outputs_collapsed"/>
<Option type="bool" value="true" name="parameters_collapsed"/>
<Option type="Map" name="params">
<Option type="List" name="CRS">
<Option type="Map">
<Option type="int" value="2" name="source"/>
<Option type="QgsCoordinateReferenceSystem" name="static_value">
<spatialrefsys nativeFormat="Wkt">
<wkt>PROJCRS["WGS 84 / Pseudo-Mercator",BASEGEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4326]],CONVERSION["Popular Visualisation Pseudo-Mercator",METHOD["Popular Visualisation Pseudo Mercator",ID["EPSG",1024]],PARAMETER["Latitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8801]],PARAMETER["Longitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8802]],PARAMETER["False easting",0,LENGTHUNIT["metre",1],ID["EPSG",8806]],PARAMETER["False northing",0,LENGTHUNIT["metre",1],ID["EPSG",8807]]],CS[Cartesian,2],AXIS["easting (X)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["northing (Y)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Web mapping and visualisation."],AREA["World between 85.06°S and 85.06°N."],BBOX[-85.06,-180,85.06,180]],ID["EPSG",3857]]</wkt>
<proj4>+proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs</proj4>
<srsid>3857</srsid>
<srid>3857</srid>
<authid>EPSG:3857</authid>
<description>WGS 84 / Pseudo-Mercator</description>
<projectionacronym>merc</projectionacronym>
<ellipsoidacronym>EPSG:7030</ellipsoidacronym>
<geographicflag>false</geographicflag>
</spatialrefsys>
</Option>
</Option>
</Option>
<Option type="List" name="EXTENT">
<Option type="Map">
<Option type="int" value="2" name="source"/>
<Option type="QString" value="-5480642.350500000,-5480470.144600000,-2931638.432600000,-2931487.092100000 [EPSG:3857]" name="static_value"/>
</Option>
</Option>
<Option type="List" name="HOVERLAY">
<Option type="Map">
<Option type="int" value="2" name="source"/>
<Option type="double" value="0" name="static_value"/>
</Option>
</Option>
<Option type="List" name="HSPACING">
<Option type="Map">
<Option type="int" value="2" name="source"/>
<Option type="double" value="5" name="static_value"/>
</Option>
</Option>
<Option type="List" name="TYPE">
<Option type="Map">
<Option type="int" value="2" name="source"/>
<Option type="int" value="0" name="static_value"/>
</Option>
</Option>
<Option type="List" name="VOVERLAY">
<Option type="Map">
<Option type="int" value="2" name="source"/>
<Option type="double" value="0" name="static_value"/>
</Option>
</Option>
<Option type="List" name="VSPACING">
<Option type="Map">
<Option type="int" value="2" name="source"/>
<Option type="double" value="5" name="static_value"/>
</Option>
</Option>
</Option>
</Option>
<Option type="Map" name="native:creategrid_2">
<Option type="bool" value="true" name="active"/>
<Option name="alg_config"/>
<Option type="QString" value="native:creategrid" name="alg_id"/>
<Option type="QString" value="" name="color"/>
<Option type="Map" name="comment">
<Option type="QString" value="" name="color"/>
<Option type="QString" value="" name="component_description"/>
<Option type="double" value="60" name="component_height"/>
<Option type="double" value="439" name="component_pos_x"/>
<Option type="double" value="145" name="component_pos_y"/>
<Option type="double" value="100" name="component_width"/>
<Option type="bool" value="true" name="outputs_collapsed"/>
<Option type="bool" value="true" name="parameters_collapsed"/>
</Option>
<Option type="QString" value="Create grid" name="component_description"/>
<Option type="double" value="30" name="component_height"/>
<Option type="double" value="511" name="component_pos_x"/>
<Option type="double" value="168" name="component_pos_y"/>
<Option type="double" value="200" name="component_width"/>
<Option name="dependencies"/>
<Option type="QString" value="native:creategrid_2" name="id"/>
<Option name="outputs"/>
<Option type="bool" value="true" name="outputs_collapsed"/>
<Option type="bool" value="true" name="parameters_collapsed"/>
<Option type="Map" name="params">
<Option type="List" name="CRS">
<Option type="Map">
<Option type="int" value="2" name="source"/>
<Option type="QgsCoordinateReferenceSystem" name="static_value">
<spatialrefsys nativeFormat="Wkt">
<wkt>PROJCRS["WGS 84 / Pseudo-Mercator",BASEGEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4326]],CONVERSION["Popular Visualisation Pseudo-Mercator",METHOD["Popular Visualisation Pseudo Mercator",ID["EPSG",1024]],PARAMETER["Latitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8801]],PARAMETER["Longitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8802]],PARAMETER["False easting",0,LENGTHUNIT["metre",1],ID["EPSG",8806]],PARAMETER["False northing",0,LENGTHUNIT["metre",1],ID["EPSG",8807]]],CS[Cartesian,2],AXIS["easting (X)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["northing (Y)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Web mapping and visualisation."],AREA["World between 85.06°S and 85.06°N."],BBOX[-85.06,-180,85.06,180]],ID["EPSG",3857]]</wkt>
<proj4>+proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs</proj4>
<srsid>3857</srsid>
<srid>3857</srid>
<authid>EPSG:3857</authid>
<description>WGS 84 / Pseudo-Mercator</description>
<projectionacronym>merc</projectionacronym>
<ellipsoidacronym>EPSG:7030</ellipsoidacronym>
<geographicflag>false</geographicflag>
</spatialrefsys>
</Option>
</Option>
</Option>
<Option type="List" name="EXTENT">
<Option type="Map">
<Option type="int" value="2" name="source"/>
<Option type="QString" value="-5480642.350500000,-5480470.144600000,-2931638.432600000,-2931487.092100000 [EPSG:3857]" name="static_value"/>
</Option>
</Option>
<Option type="List" name="HOVERLAY">
<Option type="Map">
<Option type="int" value="2" name="source"/>
<Option type="double" value="0" name="static_value"/>
</Option>
</Option>
<Option type="List" name="HSPACING">
<Option type="Map">
<Option type="int" value="2" name="source"/>
<Option type="double" value="17" name="static_value"/>
</Option>
</Option>
<Option type="List" name="TYPE">
<Option type="Map">
<Option type="int" value="2" name="source"/>
<Option type="int" value="0" name="static_value"/>
</Option>
</Option>
<Option type="List" name="VOVERLAY">
<Option type="Map">
<Option type="int" value="2" name="source"/>
<Option type="double" value="0" name="static_value"/>
</Option>
</Option>
<Option type="List" name="VSPACING">
<Option type="Map">
<Option type="int" value="2" name="source"/>
<Option type="double" value="2" name="static_value"/>
</Option>
</Option>
</Option>
</Option>
<Option type="Map" name="native:mergevectorlayers_1">
<Option type="bool" value="true" name="active"/>
<Option name="alg_config"/>
<Option type="QString" value="native:mergevectorlayers" name="alg_id"/>
<Option type="QString" value="" name="color"/>
<Option type="Map" name="comment">
<Option type="QString" value="" name="color"/>
<Option type="QString" value="" name="component_description"/>
<Option type="double" value="60" name="component_height"/>
<Option type="double" value="931" name="component_pos_x"/>
<Option type="double" value="223" name="component_pos_y"/>
<Option type="double" value="100" name="component_width"/>
<Option type="bool" value="true" name="outputs_collapsed"/>
<Option type="bool" value="true" name="parameters_collapsed"/>
</Option>
<Option type="QString" value="Merge vector layers" name="component_description"/>
<Option type="double" value="30" name="component_height"/>
<Option type="double" value="345" name="component_pos_x"/>
<Option type="double" value="275" name="component_pos_y"/>
<Option type="double" value="200" name="component_width"/>
<Option name="dependencies"/>
<Option type="QString" value="native:mergevectorlayers_1" name="id"/>
<Option type="Map" name="outputs">
<Option type="Map" name="MERGED">
<Option type="QString" value="native:mergevectorlayers_1" name="child_id"/>
<Option type="QString" value="" name="color"/>
<Option type="Map" name="comment">
<Option type="QString" value="" name="color"/>
<Option type="QString" value="" name="component_description"/>
<Option type="double" value="60" name="component_height"/>
<Option type="double" value="0" name="component_pos_x"/>
<Option type="double" value="0" name="component_pos_y"/>
<Option type="double" value="100" name="component_width"/>
<Option type="bool" value="true" name="outputs_collapsed"/>
<Option type="bool" value="true" name="parameters_collapsed"/>
</Option>
<Option type="QString" value="MERGED" name="component_description"/>
<Option type="double" value="30" name="component_height"/>
<Option type="double" value="350" name="component_pos_x"/>
<Option type="double" value="378" name="component_pos_y"/>
<Option type="double" value="200" name="component_width"/>
<Option type="invalid" name="default_value"/>
<Option type="bool" value="false" name="mandatory"/>
<Option type="QString" value="MERGED" name="name"/>
<Option type="QString" value="OUTPUT" name="output_name"/>
<Option type="bool" value="true" name="outputs_collapsed"/>
<Option type="bool" value="true" name="parameters_collapsed"/>
</Option>
</Option>
<Option type="bool" value="true" name="outputs_collapsed"/>
<Option type="bool" value="true" name="parameters_collapsed"/>
<Option type="Map" name="params">
<Option type="List" name="CRS">
<Option type="Map">
<Option type="int" value="2" name="source"/>
<Option type="QgsCoordinateReferenceSystem" name="static_value">
<spatialrefsys nativeFormat="Wkt">
<wkt>PROJCRS["WGS 84 / Pseudo-Mercator",BASEGEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4326]],CONVERSION["Popular Visualisation Pseudo-Mercator",METHOD["Popular Visualisation Pseudo Mercator",ID["EPSG",1024]],PARAMETER["Latitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8801]],PARAMETER["Longitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8802]],PARAMETER["False easting",0,LENGTHUNIT["metre",1],ID["EPSG",8806]],PARAMETER["False northing",0,LENGTHUNIT["metre",1],ID["EPSG",8807]]],CS[Cartesian,2],AXIS["easting (X)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["northing (Y)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Web mapping and visualisation."],AREA["World between 85.06°S and 85.06°N."],BBOX[-85.06,-180,85.06,180]],ID["EPSG",3857]]</wkt>
<proj4>+proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs</proj4>
<srsid>3857</srsid>
<srid>3857</srid>
<authid>EPSG:3857</authid>
<description>WGS 84 / Pseudo-Mercator</description>
<projectionacronym>merc</projectionacronym>
<ellipsoidacronym>EPSG:7030</ellipsoidacronym>
<geographicflag>false</geographicflag>
</spatialrefsys>
</Option>
</Option>
</Option>
<Option type="List" name="LAYERS">
<Option type="Map">
<Option type="QString" value="native:creategrid_1" name="child_id"/>
<Option type="QString" value="OUTPUT" name="output_name"/>
<Option type="int" value="1" name="source"/>
</Option>
<Option type="Map">
<Option type="QString" value="native:creategrid_2" name="child_id"/>
<Option type="QString" value="OUTPUT" name="output_name"/>
<Option type="int" value="1" name="source"/>
</Option>
</Option>
</Option>
</Option>
</Option>
<Option type="Map" name="designerParameterValues">
<Option type="QgsProcessingOutputLayerDefinition" name="merged">
<Option type="Map">
<Option type="Map" name="create_options">
<Option type="QString" value="UTF-8" name="fileEncoding"/>
</Option>
<Option type="Map" name="sink">
<Option type="bool" value="true" name="active"/>
<Option type="int" value="1" name="type"/>
<Option type="QString" value="TEMPORARY_OUTPUT" name="val"/>
</Option>
</Option>
</Option>
</Option>
<Option name="groupBoxes"/>
<Option name="help"/>
<Option type="QString" value="Version2" name="internal_version"/>
<Option name="modelVariables"/>
<Option type="QString" value="" name="model_group"/>
<Option type="QString" value="model" name="model_name"/>
<Option type="QString" value="" name="outputGroup"/>
<Option name="outputOrder"/>
<Option type="Map" name="parameterDefinitions">
<Option type="Map" name="merged">
<Option type="bool" value="true" name="create_by_default"/>
<Option type="int" value="-1" name="data_type"/>
<Option type="invalid" name="default"/>
<Option type="invalid" name="defaultGui"/>
<Option type="QString" value="MERGED" name="description"/>
<Option type="int" value="0" name="flags"/>
<Option type="QString" value="" name="help"/>
<Option type="Map" name="metadata">
<Option type="QString" value="native:mergevectorlayers_1" name="_modelChildId"/>
<Option type="QString" value="MERGED" name="_modelChildOutputName"/>
<Option type="QString" value="native" name="_modelChildProvider"/>
</Option>
<Option type="QString" value="merged" name="name"/>
<Option type="QString" value="sink" name="parameter_type"/>
<Option type="bool" value="false" name="supports_append"/>
<Option type="bool" value="true" name="supports_non_file_outputs"/>
</Option>
</Option>
<Option name="parameterOrder"/>
<Option name="parameters"/>
</Option>
"""
Model exported as python.
Name : model
Group :
With QGIS : 33201
"""
from qgis.core import QgsProcessing
from qgis.core import QgsProcessingAlgorithm
from qgis.core import QgsProcessingMultiStepFeedback
from qgis.core import QgsProcessingParameterFeatureSink
from qgis.core import QgsCoordinateReferenceSystem
import processing
class Model(QgsProcessingAlgorithm):
def initAlgorithm(self, config=None):
self.addParameter(QgsProcessingParameterFeatureSink('Merged', 'MERGED', type=QgsProcessing.TypeVectorAnyGeometry, createByDefault=True, defaultValue=None))
def processAlgorithm(self, parameters, context, model_feedback):
# Use a multi-step feedback, so that individual child algorithm progress reports are adjusted for the
# overall progress through the model
feedback = QgsProcessingMultiStepFeedback(3, model_feedback)
results = {}
outputs = {}
# Create grid
alg_params = {
'CRS': QgsCoordinateReferenceSystem('EPSG:3857'),
'EXTENT': '-5480642.350500000,-5480470.144600000,-2931638.432600000,-2931487.092100000 [EPSG:3857]',
'HOVERLAY': 0,
'HSPACING': 17,
'TYPE': 0, # Point
'VOVERLAY': 0,
'VSPACING': 2,
'OUTPUT': QgsProcessing.TEMPORARY_OUTPUT
}
outputs['CreateGrid'] = processing.run('native:creategrid', alg_params, context=context, feedback=feedback, is_child_algorithm=True)
feedback.setCurrentStep(1)
if feedback.isCanceled():
return {}
# Create grid
alg_params = {
'CRS': QgsCoordinateReferenceSystem('EPSG:3857'),
'EXTENT': '-5480642.350500000,-5480470.144600000,-2931638.432600000,-2931487.092100000 [EPSG:3857]',
'HOVERLAY': 0,
'HSPACING': 5,
'TYPE': 0, # Point
'VOVERLAY': 0,
'VSPACING': 5,
'OUTPUT': QgsProcessing.TEMPORARY_OUTPUT
}
outputs['CreateGrid'] = processing.run('native:creategrid', alg_params, context=context, feedback=feedback, is_child_algorithm=True)
feedback.setCurrentStep(2)
if feedback.isCanceled():
return {}
# Merge vector layers
alg_params = {
'CRS': QgsCoordinateReferenceSystem('EPSG:3857'),
'LAYERS': [outputs['CreateGrid']['OUTPUT'],outputs['CreateGrid']['OUTPUT']],
'OUTPUT': parameters['Merged']
}
outputs['MergeVectorLayers'] = processing.run('native:mergevectorlayers', alg_params, context=context, feedback=feedback, is_child_algorithm=True)
results['Merged'] = outputs['MergeVectorLayers']['OUTPUT']
return results
def name(self):
return 'model'
def displayName(self):
return 'model'
def group(self):
return ''
def groupId(self):
return ''
def createInstance(self):
return Model()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment