def load_layer(self, id, param): """ Loads a layer which was specified as parameter. """ filepath = self.filepath_from_param(param) if 'in_place' in param and param['in_place']: # check if alg modifies layer in place tmpdir = tempfile.mkdtemp() self.cleanup_paths.append(tmpdir) path, file_name = os.path.split(filepath) base, ext = os.path.splitext(file_name) for file in glob.glob(os.path.join(path, '{}.*'.format(base))): shutil.copy(os.path.join(path, file), tmpdir) filepath = os.path.join(tmpdir, file_name) self.in_place_layers[id] = filepath if param['type'] in ('vector', 'table'): if filepath in self.vector_layer_params: return self.vector_layer_params[filepath] options = QgsVectorLayer.LayerOptions() options.loadDefaultStyle = False lyr = QgsVectorLayer(filepath, param['name'], 'ogr', options) self.vector_layer_params[filepath] = lyr elif param['type'] == 'raster': options = QgsRasterLayer.LayerOptions() options.loadDefaultStyle = False lyr = QgsRasterLayer(filepath, param['name'], 'gdal', options) self.assertTrue(lyr.isValid(), 'Could not load layer "{}" from param {}'.format(filepath, param)) QgsProject.instance().addMapLayer(lyr) return lyr
def __input_raster_layer(): options = QgsRasterLayer.LayerOptions() options.loadDefaultStyle = False return QgsRasterLayer(os.path.join(AlgorithmsTestBase.processingTestDataPath(), 'raster.tif'), "raster_input", 'gdal', options)
def createXYZLayer(self, layerType, name): # create XYZ layer with tms url as uri provider = 'wms' url = "type=xyz&url=" + layerType.xyzUrlConfig() layer = QgsRasterLayer(url, name, provider, QgsRasterLayer.LayerOptions()) layer.setCustomProperty('ol_layer_type', layerType.layerTypeName) return layer, layerType.xyzUrlConfig()
def testTransformContextIsSetInCtor(self): """Test transform context can be set from ctor""" rl = QgsRasterLayer(self.rpath, 'raster') self.assertFalse(rl.transformContext().hasTransform(QgsCoordinateReferenceSystem(4326), QgsCoordinateReferenceSystem(3857))) options = QgsRasterLayer.LayerOptions(transformContext=self.ctx) rl = QgsRasterLayer(self.rpath, 'raster', 'gdal', options) self.assertTrue(rl.transformContext().hasTransform(QgsCoordinateReferenceSystem(4326), QgsCoordinateReferenceSystem(3857)))
def load(fileName, name=None, crs=None, style=None, isRaster=False): """ Loads a layer/table into the current project, given its file. .. deprecated:: 3.0 Do not use, will be removed in QGIS 4.0 """ from warnings import warn warn("processing.load is deprecated and will be removed in QGIS 4.0", DeprecationWarning) if fileName is None: return if name is None: name = os.path.split(fileName)[1] if isRaster: options = QgsRasterLayer.LayerOptions() options.skipCrsValidation = True qgslayer = QgsRasterLayer(fileName, name, 'gdal', options) if qgslayer.isValid(): if crs is not None and qgslayer.crs() is None: qgslayer.setCrs(crs, False) if style is None: style = ProcessingConfig.getSetting( ProcessingConfig.RASTER_STYLE) qgslayer.loadNamedStyle(style) QgsProject.instance().addMapLayers([qgslayer]) else: raise RuntimeError( QCoreApplication.translate( 'dataobject', 'Could not load layer: {0}\nCheck the processing framework log to look for errors.' ).format(fileName)) else: options = QgsVectorLayer.LayerOptions() options.skipCrsValidation = True qgslayer = QgsVectorLayer(fileName, name, 'ogr', options) if qgslayer.isValid(): if crs is not None and qgslayer.crs() is None: qgslayer.setCrs(crs, False) if style is None: if qgslayer.geometryType() == QgsWkbTypes.PointGeometry: style = ProcessingConfig.getSetting( ProcessingConfig.VECTOR_POINT_STYLE) elif qgslayer.geometryType() == QgsWkbTypes.LineGeometry: style = ProcessingConfig.getSetting( ProcessingConfig.VECTOR_LINE_STYLE) else: style = ProcessingConfig.getSetting( ProcessingConfig.VECTOR_POLYGON_STYLE) qgslayer.loadNamedStyle(style) QgsProject.instance().addMapLayers([qgslayer]) return qgslayer
def load_layer(self, id, param): """ Loads a layer which was specified as parameter. """ filepath = self.filepath_from_param(param) if 'in_place' in param and param['in_place']: # check if alg modifies layer in place tmpdir = tempfile.mkdtemp() self.cleanup_paths.append(tmpdir) path, file_name = os.path.split(filepath) base, ext = os.path.splitext(file_name) for file in glob.glob(os.path.join(path, '{}.*'.format(base))): shutil.copy(os.path.join(path, file), tmpdir) filepath = os.path.join(tmpdir, file_name) self.in_place_layers[id] = filepath if param['type'] in ('vector', 'table'): gmlrex = r'\.gml\b' if re.search(gmlrex, filepath, re.IGNORECASE): # ewwwww - we have to force SRS detection for GML files, otherwise they'll be loaded # with no srs filepath += '|option:FORCE_SRS_DETECTION=YES' if filepath in self.vector_layer_params: return self.vector_layer_params[filepath] options = QgsVectorLayer.LayerOptions() options.loadDefaultStyle = False lyr = QgsVectorLayer(filepath, param['name'], 'ogr', options) self.vector_layer_params[filepath] = lyr elif param['type'] == 'raster': options = QgsRasterLayer.LayerOptions() options.loadDefaultStyle = False lyr = QgsRasterLayer(filepath, param['name'], 'gdal', options) self.assertTrue( lyr.isValid(), 'Could not load layer "{}" from param {}'.format(filepath, param)) QgsProject.instance().addMapLayer(lyr) return lyr
def createXYZLayer(self, layerType, name): # create XYZ layer with tms url as uri provider = "wms" # isinstance(P, (list, tuple, np.ndarray)) xyzUrls = layerType.xyzUrlConfig() layerName = name tilePixelRatio = layerType.tilePixelRatio coordRefSys = layerType.coordRefSys(self.canvasCrs()) self.setMapCrs(coordRefSys) if isinstance(xyzUrls, (list)): # create group layer root = QgsProject.instance().layerTreeRoot() layer = root.addGroup(layerType.groupName) i = 0 for xyzUrl in xyzUrls: tmsLayerName = layerName # https://github.com/qgis/QGIS/blob/master/src/providers/wms/qgsxyzconnectiondialog.cpp uri = "url=" + xyzUrl + "&zmax=18&zmin=0&type=xyz" if (tilePixelRatio > 0): uri = uri + "&tilePixelRatio=" + str(tilePixelRatio) if i > 0: tmsLayerName = layerName + " Label" tmsLayer = QgsRasterLayer(uri, tmsLayerName, provider, QgsRasterLayer.LayerOptions()) tmsLayer.setCustomProperty("ol_layer_type", tmsLayerName) layer.insertChildNode(0, QgsLayerTreeLayer(tmsLayer)) i = i + 1 if tmsLayer.isValid(): QgsProject.instance().addMapLayer(tmsLayer, False) self._ol_layers += [tmsLayer] # last added layer is new reference self.setReferenceLayer(tmsLayer) # add to XYT Tiles self.addToXYZTiles(tmsLayerName, xyzUrl, tilePixelRatio) else: uri = "url=" + xyzUrls + "&zmax=18&zmin=0&type=xyz" if (tilePixelRatio > 0): uri = uri + "&tilePixelRatio=" + str(tilePixelRatio) layer = QgsRasterLayer(uri, layerName, provider, QgsRasterLayer.LayerOptions()) layer.setCustomProperty("ol_layer_type", layerName) if layer.isValid(): QgsProject.instance().addMapLayer(layer) self._ol_layers += [layer] # last added layer is new reference self.setReferenceLayer(layer) # add to XYT Tiles self.addToXYZTiles(layerName, xyzUrls, tilePixelRatio) # reload connections to update Browser Panel content self.iface.reloadConnections() return layer, xyzUrls