def build_and_launch(title, qgs_geoms, diameter_tol, del_pol=False, del_hole=False, smooth_line=False): print(title) qgs_features = [] feedback = QgsProcessingFeedback() for qgs_geom in qgs_geoms: qgs_feature = QgsFeature() qgs_feature.setGeometry(qgs_geom) qgs_features.append(qgs_feature) rb_results = ReduceBend.reduce(qgs_features, diameter_tol, smooth_line, del_pol, del_hole, True, feedback) log = feedback.textLog() print (log) qgs_features_out = rb_results.qgs_features_out qgs_geoms_out = [] for qgs_feature_out in qgs_features_out: qgs_geoms_out.append(qgs_feature_out.geometry()) return qgs_geoms_out
def build_and_launch(title, qgs_geoms, tolerance): print(title) qgs_features = [] feedback = QgsProcessingFeedback() for qgs_geom in qgs_geoms: qgs_feature = QgsFeature() qgs_feature.setGeometry(qgs_geom) qgs_features.append(qgs_feature) rb_results = Simplify.douglas_peucker(qgs_features, tolerance, True, feedback) log = feedback.textLog() print (log) qgs_features_out = rb_results.qgs_features_out qgs_geoms_out = [] for qgs_feature_out in qgs_features_out: qgs_geoms_out.append(qgs_feature_out.geometry()) return qgs_geoms_out
def _export_basemap(self) -> bool: self.total_progress_updated.emit(0, 1, self.trUtf8("Creating base map…")) if not self._export_basemap_requirements_check(): return False project = QgsProject.instance() basemap_extent = self.area_of_interest.boundingBox() if basemap_extent.isNull() or not basemap_extent.isFinite(): self.warning.emit( self.tr("Failed to create basemap"), self.tr( "Cannot create basemap for the given area of interest."), ) return False if not self.project_configuration.base_map_layer.strip(): self.warning.emit( self.tr("Failed to create basemap"), self. tr("No basemap layer selected. Please check the project configuration." ).format(self.project_configuration.base_map_layer), ) return False extent = basemap_extent base_map_type = self.project_configuration.base_map_type if base_map_type == ProjectProperties.BaseMapType.SINGLE_LAYER: basemap_layer = project.mapLayer( self.project_configuration.base_map_layer) if not basemap_layer: self.warning.emit( self.tr("Failed to create basemap"), self. tr('Cannot find the configured base layer with id "{}". Please check the project configuration.' ).format(self.project_configuration.base_map_layer), ) return False # we need to transform the extent to match the one of the selected layer extent = QgsCoordinateTransform( QgsCoordinateReferenceSystem(self.area_of_interest_crs), project.crs(), project, ).transformBoundingBox(basemap_extent) elif base_map_type == ProjectProperties.BaseMapType.MAP_THEME: if not project.mapThemeCollection().hasMapTheme( self.project_configuration.base_map_theme): self.warning.emit( self.tr("Failed to create basemap"), self. tr('Cannot find the configured base theme with name "{}". Please check the project configuration.' ).format(self.project_configuration.base_map_theme), ) return False extent_string = "{},{},{},{}".format( extent.xMinimum(), extent.xMaximum(), extent.yMinimum(), extent.yMaximum(), ) alg = (QgsApplication.instance().processingRegistry(). createAlgorithmById("native:rasterize")) params = { "EXTENT": extent_string, "EXTENT_BUFFER": 0, "TILE_SIZE": self.project_configuration.base_map_tile_size, "MAP_UNITS_PER_PIXEL": self.project_configuration.base_map_mupp, "MAKE_BACKGROUND_TRANSPARENT": False, "OUTPUT": os.path.join(self.export_folder, "basemap.gpkg"), } if base_map_type == ProjectProperties.BaseMapType.SINGLE_LAYER: params["LAYERS"] = [self.project_configuration.base_map_layer] elif base_map_type == ProjectProperties.BaseMapType.MAP_THEME: params["MAP_THEME"] = self.project_configuration.base_map_theme feedback = QgsProcessingFeedback() context = QgsProcessingContext() context.setProject(QgsProject.instance()) results, ok = alg.run(params, context, feedback) if not ok: self.warning.emit(self.tr("Failed to create basemap"), feedback.textLog()) return False new_layer = QgsRasterLayer(results["OUTPUT"], self.tr("Basemap")) resample_filter = new_layer.resampleFilter() resample_filter.setZoomedInResampler(QgsCubicRasterResampler()) resample_filter.setZoomedOutResampler(QgsBilinearRasterResampler()) self.project_configuration.project.addMapLayer(new_layer, False) layer_tree = QgsProject.instance().layerTreeRoot() layer_tree.insertLayer(len(layer_tree.children()), new_layer) return True