def parse_input_definition(param: QgsProcessingParameterDefinition, kwargs, context: MapContext = None) -> WPSInput: """ Convert processing input to File Input """ typ = param.type() if typ == 'crs': kwargs['data_type'] = 'string' return LiteralInput(**kwargs) elif typ == "extent": return parse_extent_input(param, kwargs, context) elif isinstance(param, GeometryParameterTypes): kwargs['supported_formats'] = [ Format.from_definition(FORMATS.GEOJSON), Format.from_definition(FORMATS.GML), Format.from_definition(FORMATS.WKT) ] if isinstance(param, QgsProcessingParameterGeometry): # Add metadata from requiered geometryTypes kwargs['metadata'].extend( Metadata('processing:geometryType', QgsWkbTypes.geometryDisplayString(geomtype)) \ for geomtype in param.geometryTypes() ) if param.allowMultipart(): kwargs['metadata'].append( Metadata('processing:allowMultipart')) return ComplexInput(**kwargs) return None
def parse_point_input( param: QgsProcessingParameterDefinition, kwargs) -> ComplexInput: """ Convert processing point input to complex input """ if isinstance(param, QgsProcessingParameterPoint): kwargs['supported_formats'] = [Format.from_definition(FORMATS.GEOJSON), Format.from_definition(FORMATS.GML)] return ComplexInput(**kwargs)
def test_geometry_script(outputdir, data): """ Test geometry script """ alg = _find_algorithm('script:testinputgeometry') inputs = { p.name(): [parse_input_definition(p)] for p in alg.parameterDefinitions() } outputs = { p.name(): parse_output_definition(p) for p in alg.outputDefinitions() } inp = inputs['INPUT'][0] inp.data_format = Format.from_definition(FORMATS.WKT) inp.data = 'CRS=EPSG:4326;MULTIPOINT((3.5 5.6), (4.8 10.5))' # Load source project source = QgsProject() rv = source.read(str(data/'france_parts.qgs')) assert rv == True context = Context(source, outputdir) feedback = QgsProcessingFeedback() parameters = dict( input_to_processing(ident, inp, alg, context) for ident,inp in inputs.items() ) # Check marshalled value value = parameters['INPUT'] assert isinstance( value, QgsReferencedGeometry ) assert value.wkbType() == QgsWkbTypes.MultiPoint context.wms_url = "http://localhost/wms/?MAP=test/{name}.qgs".format(name=alg.name()) # Run algorithm with chdir(outputdir): results = run_algorithm(alg, parameters=parameters, feedback=feedback, context=context, outputs=outputs) out = json.loads(outputs.get('OUTPUT').data) assert out['type'] == 'MultiPoint'
def test_point_input_wkt(): """ Test input point from wkt """ param = QgsProcessingParameterPoint("POINT") inp = parse_input_definition(param) assert isinstance(inp,ComplexInput) assert inp.as_reference == False inp.data_format = Format.from_definition(FORMATS.WKT) inp.data = 'CRS=EPSG:4326;POINT(6 10)' assert inp.data_format.mime_type == FORMATS.WKT.mime_type value = geometryio.input_to_point( inp ) assert isinstance( value, QgsReferencedPointXY )
def test_point_input_json(): """ Test input point from json """ param = QgsProcessingParameterPoint("POINT") inp = parse_input_definition(param) assert isinstance(inp,ComplexInput) assert inp.as_reference == False inp.data_format = Format.from_definition(FORMATS.GEOJSON) inp.data = '{"coordinates":[4.0,42.0],"type":"Point"}' assert inp.data_format.mime_type == FORMATS.GEOJSON.mime_type value = geometryio.input_to_point( inp ) assert isinstance( value, QgsGeometry )
def test_point_input_gml(): """ Test input point from gml """ param = QgsProcessingParameterPoint("POINT") inp = parse_input_definition(param) assert isinstance(inp, ComplexInput) assert inp.as_reference == False inp.data_format = Format.from_definition(FORMATS.GML) inp.data = '<gml:Point srsName="EPSG:4326"><gml:coordinates>4,42</gml:coordinates></gml:Point>' assert inp.data_format.mime_type == FORMATS.GML.mime_type value = input_to_point(inp) assert isinstance(value, (QgsGeometry, QgsReferencedPointXY))
def test_nocrs_input_wkt(): """ Test input point from wkt """ param = QgsProcessingParameterPoint("POINT") inp = parse_input_definition(param) assert isinstance(inp,ComplexInput) assert inp.as_reference == False inp.data_format = Format.from_definition(FORMATS.WKT) inp.data = 'POINT(6 10)' assert inp.data_format.mime_type == FORMATS.WKT.mime_type value = geometryio.input_to_point( inp ) assert isinstance( value, QgsGeometry ) assert value.wkbType() == QgsWkbTypes.Point
def test_multipoint_input_wkt(): """ Test input point from gml """ param = QgsProcessingParameterPoint("GEOM") inp = parse_input_definition(param) assert isinstance(inp,ComplexInput) assert inp.as_reference == False inp.data_format = Format.from_definition(FORMATS.WKT) inp.data = 'CRS=EPSG:4326;MULTIPOINT((3.5 5.6), (4.8 10.5))' assert inp.data_format.mime_type == FORMATS.WKT.mime_type value = geometryio.input_to_geometry( inp ) assert isinstance( value, QgsReferencedGeometry ) assert value.wkbType() == QgsWkbTypes.MultiPoint
def test_multipoint_input_json(): """ Test input point from json """ param = QgsProcessingParameterPoint("GEOM") inp = parse_input_definition(param) assert isinstance(inp,ComplexInput) assert inp.as_reference == False inp.data_format = Format.from_definition(FORMATS.GEOJSON) inp.data = '{"coordinates":[[10, 40], [40, 30], [20, 20], [30, 10]],"type":"MultiPoint"}' assert inp.data_format.mime_type == FORMATS.GEOJSON.mime_type value = geometryio.input_to_geometry( inp ) assert isinstance( value, QgsGeometry ) assert value.wkbType() == QgsWkbTypes.MultiPoint
def test_linestring_input_gml(): """ Test input point from gml """ param = QgsProcessingParameterGeometry("GEOM") inp = parse_input_definition(param) assert isinstance(inp,ComplexInput) assert inp.as_reference == False inp.data_format = Format.from_definition(FORMATS.GML) inp.data = ('<gml:LineString srsName="EPSG:4326">' '<gml:coordinates>45.67,88.56 55.56,89.44</gml:coordinates>' '</gml:LineString>') assert inp.data_format.mime_type == FORMATS.GML.mime_type value = geometryio.input_to_geometry( inp ) assert isinstance( value, QgsReferencedGeometry ) assert value.wkbType() == QgsWkbTypes.LineString
def test_geometry_crs_json(): """ Test passing crs from json """ param = QgsProcessingParameterGeometry("GEOM") inp = parse_input_definition(param) assert isinstance(inp,ComplexInput) assert inp.as_reference == False inp.data_format = Format.from_definition(FORMATS.GEOJSON) inp.data = ('{ "geometry": {"coordinates":[445277.96, 5160979.44],"type":"Point"},' ' "crs": { ' ' "type": "name", ' ' "properties": { "name": "EPSG:3785" }' '}}') assert inp.data_format.mime_type == FORMATS.GEOJSON.mime_type value = geometryio.input_to_geometry( inp ) assert isinstance( value, QgsReferencedGeometry ) assert value.crs().authid() == "EPSG:3785" assert value.wkbType() == QgsWkbTypes.Point
# Map processing source types to string SourceTypes = { QgsProcessing.TypeMapLayer: 'TypeMapLayer', QgsProcessing.TypeVectorAnyGeometry: 'TypeVectorAnyGeometry', QgsProcessing.TypeVectorPoint: 'TypeVectorPoint', QgsProcessing.TypeVectorLine: 'TypeVectorLine', QgsProcessing.TypeVectorPolygon: 'TypeVectorPolygon', QgsProcessing.TypeRaster: 'TypeRaster', QgsProcessing.TypeFile: 'TypeFile', QgsProcessing.TypeVector: 'TypeVector', QgsProcessing.TypeMesh: 'TypeMesh', } # Allowed inputs formats RASTER_INPUT_FORMATS = (Format.from_definition(FORMATS.NETCDF), Format.from_definition(FORMATS.GEOTIFF)) VECTOR_INPUT_FORMATS = (Format.from_definition(FORMATS.GEOJSON), Format.from_definition(FORMATS.GML), Format.from_definition(FORMATS.SHP)) # ------------------------------------ # Processing parameters -> WPS input # ------------------------------------ def get_layers_type(param: QgsProcessingParameterDefinition, kwargs) -> None: """ Set datatype as metadata """ datatypes = []