Ejemplo n.º 1
0
    def use_active_layer(self):
        """
        Loads coordinates extent of the active layer.
        """
        iface.actionPan().trigger()
        layers = iface.mapCanvas().layers()
        chosen_layer = str(self.layersBox.currentText())
        for layer in layers:
            if str(layer.name()) == chosen_layer:
                crs = self.format_crs_str(layer.crs().authid())
                ex_layer = layer.extent()
                east = round(ex_layer.xMaximum(), 1)
                north = round(ex_layer.yMaximum(), 1)
                west = round(ex_layer.xMinimum(), 1)
                south = round(ex_layer.yMinimum(), 1)
                spatial_extent = {
                    "west": west,
                    "east": east,
                    "north": north,
                    "south": south,
                    "crs": crs
                }
                str_format = str(spatial_extent).replace("'", '"')
                self.processgraphSpatialExtent.setText(str_format)

        if not iface.activeLayer():
            self.iface.messageBar().pushMessage(
                "Please open a new layer to get extent from.", duration=5)
Ejemplo n.º 2
0
    def set_canvas(self):
        """
        Reads the coordinates of the drawings into the spatial extent variable.
        """
        iface.actionPan().trigger()
        if iface.activeLayer():
            crs = self.format_crs_str(iface.activeLayer().crs().authid())
            extent = iface.mapCanvas().extent()
            self.east = round(extent.xMaximum(), 2)
            self.north = round(extent.yMaximum(), 2)
            self.west = round(extent.xMinimum(), 2)
            self.south = round(extent.yMinimum(), 2)
            spatial_extent = {
                "west": self.west,
                "east": self.east,
                "north": self.north,
                "south": self.south,
                "crs": crs
            }

            str_format = str(spatial_extent).replace("'", '"')
            self.processgraphSpatialExtent.setText(str_format)
        elif not iface.activeLayer():
            self.iface.messageBar().pushMessage(
                "Please open a new layer to get extent from.", duration=5)
Ejemplo n.º 3
0
 def draw(self):
     """
     Starts the drawiong process e.g. if the user needs to interact with the map.
     """
     if str(self.extentBox.currentText()) == "Draw Rectangle":
         if iface.activeLayer():
             QMainWindow.hide(self)
             self.parent().hide()
             if self.parent().parent():
                 self.parent().parent().hide()
             self.drawRectangle = DrawRectangle(iface.mapCanvas(), self)
             iface.mapCanvas().setMapTool(self.drawRectangle)
         else:
             iface.actionPan().trigger()
             self.parent().show()
             QMainWindow.show(self)
             self.iface.messageBar().pushMessage(
                 "Please open a new layer to get extent from.", duration=5)
     elif str(self.extentBox.currentText()) == "Draw Polygon":
         if iface.activeLayer():
             self.drawBtn.setVisible(True)
             QMainWindow.hide(self)
             self.parent().hide()
             if self.parent().parent():
                 self.parent().parent().hide()
             self.drawPolygon = DrawPolygon(iface.mapCanvas(), self)
             iface.mapCanvas().setMapTool(self.drawPolygon)
         else:
             iface.actionPan().trigger()
             self.parent().show()
             QMainWindow.show(self)
             self.iface.messageBar().pushMessage(
                 "Please open a new layer to get extent from.", duration=5)
Ejemplo n.º 4
0
    def selection_changed(self) -> None:

        try:
            # Obtenim una llista de les Features seleccionades a la capa activa del mapa
            layer = iface.activeLayer()
            if not layer: return
            selected_features = layer.selectedFeatures()

            # Revisem si l'usuari no ha seleccionat res, en aquest cas deixem d'executar
            if len(selected_features) == 0:
                return

            # Get primary key
            field_id = tools_gw.execute_procedure('gw_fct_getpkeyfield',
                                                  f"'{layer.name()}'")

            list_ids = []
            # Desem l'ID de l'últim Feature seleccionat i ho mostrem a la consola
            for i in selected_features:
                attr_id = i.attribute(field_id)
                list_ids.append(attr_id)

            tools_qt.set_widget_text(self.dlg, self.dlg.lbl_selected_items,
                                     ','.join(list_ids))

        except Exception as e:
            tools_log.log_warning(f"Exception: {type(e).__name__}, {e}")

        finally:
            # Tanquem la subscripció de l'event per evitar la duplicació
            iface.mapCanvas().selectionChanged.disconnect(
                self.selection_changed)
            iface.actionPan().trigger()
Ejemplo n.º 5
0
def disconnect_signal_selection_changed():
    """ Disconnect signal selectionChanged """

    try:
        global_vars.canvas.selectionChanged.disconnect()
    except Exception:
        pass
    finally:
        iface.actionPan().trigger()
    def onDeselect(self):
        """Deselect features action."""
        layer = self.getActiveLayer()
        if layer:
            layer.removeSelection()

        # disable deselect/delete buttons
        self.actionDeselect.setEnabled(False)
        self.actionDelete.setEnabled(False)

        # select -> pan
        iface.actionPan().trigger()
Ejemplo n.º 7
0
    def edit_cancel_clicked(self):
        """
            When cancel clicked
        """
        if len(QgsProject.instance().mapLayersByName(
                "bulk_load_outlines")) > 0:
            if isinstance(self.change_instance,
                          bulk_load_changes.EditAttribute):
                try:
                    self.bulk_load_layer.selectionChanged.disconnect(
                        self.change_instance.selection_changed)
                except TypeError:
                    pass
            elif isinstance(self.change_instance,
                            bulk_load_changes.EditGeometry):
                try:
                    self.bulk_load_layer.geometryChanged.disconnect(
                        self.change_instance.geometry_changed)
                except TypeError:
                    pass
                try:
                    self.bulk_load_layer.featureAdded.disconnect()
                except TypeError:
                    pass
            elif isinstance(self.change_instance,
                            bulk_load_changes.AddBulkLoad):
                try:
                    self.bulk_load_layer.featureAdded.disconnect()
                except TypeError:
                    pass
                try:
                    self.bulk_load_layer.featureDeleted.disconnect()
                except TypeError:
                    pass
                try:
                    self.bulk_load_layer.geometryChanged.disconnect()
                except TypeError:
                    pass
                if self.polyline:
                    self.polyline.reset()
                if isinstance(self.circle_tool, PointTool):
                    self.circle_tool.canvas_clicked.disconnect()
                    self.circle_tool.mouse_moved.disconnect()
                    self.circle_tool.deactivate()
                iface.actionPan().trigger()

        iface.actionCancelEdits().trigger()

        self.setup_toolbar()

        self.change_instance = None
Ejemplo n.º 8
0
    def setup_main_toolbar(self):
        """ Set up the custom tool bar in its most basic state """
        try:
            iface.building_toolbar.clear()
            iface.building_toolbar.setObjectName(u"Building Tools")
            iface.building_toolbar.hide()

            # Choose necessary basic tools
            for nav in iface.mapNavToolToolBar().actions():
                if nav.objectName() in ["mActionPan"]:
                    iface.building_toolbar.addAction(nav)
        except AttributeError:
            # iface.building_toolbar hadn't been created yet
            pass
        iface.actionPan().trigger()
Ejemplo n.º 9
0
    def onDeselect(self):
        """Deselect features action."""
        layer = self.getActiveLayer()
        if layer:
            # deselect features manually (there is no trigger
            # available) if requested
            layer.setSelectedFeatures([
                feat.id() for feat in layer.selectedFeaturesIterator()
                if feat.id() < 0
            ])
        # disable deselect/delete buttons
        self.actionDeselect.setEnabled(False)
        self.actionDelete.setEnabled(False)

        # select -> pan
        iface.actionPan().trigger()
Ejemplo n.º 10
0
    def insert_shape(self):
        """
        Loads coordinates from an shapefile, starting a browsing prompt.
        """
        iface.actionPan().trigger()
        # get generic home directory
        home = expanduser("~")
        filter_type = "SHP Shape Files (*.shp);; All Files (*.*)"
        # get location of file
        root = QFileDialog.getOpenFileName(self, "Select a file", home,
                                           filter_type)

        vlayer = QgsVectorLayer(root[0])
        crs = self.format_crs_str(vlayer.crs().authid())
        if vlayer.isValid():
            # Trying to get the exact extend of the shapefile
            #     geo_json = {}
            #     for feature in vlayer.getFeatures():
            #         # warning(self.iface, feature.geometry().asJson())
            #         if not geo_json:
            #             geo_json = json.loads(feature.geometry().asJson())
            #         else:
            #             coords = geo_json.get("coordinates")
            #             if coords and isinstance(coords, list):
            #                 geo_json.get("coordinates").extend(json.loads(feature.geometry().asJson()))

            # self.processgraphSpatialExtent.setText(json.dumps(geo_json))
            # QgsVectorFileWriter.writeAsVectorFormat(vlayer, "F:\polygon.gpkg", "UTF-8", vlayer.crs(), "GeoJSON")
            extent = vlayer.extent()
            east = round(extent.xMaximum(), 1)
            north = round(extent.yMaximum(), 1)
            west = round(extent.xMinimum(), 1)
            south = round(extent.yMinimum(), 1)
            spatial_extent = {
                "west": west,
                "east": east,
                "north": north,
                "south": south,
                "crs": crs
            }
            str_format = str(spatial_extent).replace("'", '"')
            self.processgraphSpatialExtent.setText(str_format)
        else:
            error(self.iface, "Failed to load shapefile layer!")
Ejemplo n.º 11
0
    def draw_rect(self, x1, y1, x2, y2):
        """
        After drawing a rectangle it sets the coordinates for the spatial extent.
        :param x1: x coordinate of first point
        :param x2: x coordinate of second point
        :param y1: y coordinate of first point
        :param y2: y coordinate of second point
        """
        if iface.activeLayer():
            crs = self.format_crs_str(iface.activeLayer().crs().authid())

            spatial_extent = {}
            if x1 <= x2:
                spatial_extent["west"] = round(x1, 3)
                spatial_extent["east"] = round(x2, 3)
            elif x2 <= x1:
                spatial_extent["west"] = round(x2, 3)
                spatial_extent["east"] = round(x1, 3)
            else:
                return "Error: Draw a new rectangle"

            if y1 <= y2:
                spatial_extent["north"] = round(y2, 3)
                spatial_extent["south"] = round(y1, 3)
            elif y2 <= y1:
                spatial_extent["north"] = round(y1, 3)
                spatial_extent["south"] = round(y2, 3)
            else:
                return "Error: Draw a new rectangle"

            spatial_extent["crs"] = crs
            str_format = str(spatial_extent).replace("'", '"')
            self.processgraphSpatialExtent.setText(str_format)
            self.parent().show()
            QMainWindow.show(self)
        elif not iface.activeLayer():
            iface.actionPan().trigger()
            self.parent().show()
            QMainWindow.show(self)
            self.iface.messageBar().pushMessage(
                "Please open a new layer to get extent from.", duration=5)
Ejemplo n.º 12
0
def disconnect_snapping(action_pan=True, emit_point=None, vertex_marker=None):
    """ Select 'Pan' as current map tool and disconnect snapping """

    try:
        global_vars.canvas.xyCoordinates.disconnect()
    except TypeError as e:
        print(f"{type(e).__name__} --> {e}")

    if emit_point is not None:
        try:
            emit_point.canvasClicked.disconnect()
        except TypeError as e:
            print(f"{type(e).__name__} --> {e}")

    if vertex_marker is not None:
        try:
            vertex_marker.hide()
        except AttributeError as e:
            print(f"{type(e).__name__} --> {e}")

    if action_pan:
        iface.actionPan().trigger()
Ejemplo n.º 13
0
    def draw_poly(self, geometry):
        """
        After drawing a polygon it sets the coordinates for the spatial extent.
        :param geometry: Polygon geometry from QQGIS
        """
        if iface.activeLayer():
            # warning(self.iface, str(geometry.asJson()))
            # crs = iface.activeLayer().crs().authid()
            # polygons_bounding_tuples = geometry
            # polygons_bounding_json_string = polygons_bounding_tuples[0].asJson(
            #     1)  # this returns only the 4 desired points, rounded
            # polygons_bounding_json = json.loads(polygons_bounding_json_string)
            # values = []
            #
            # for points in polygons_bounding_json['coordinates']:
            #     values.append(points)
            #
            # point1 = values[0][0]  # longitude first position, latitude second position
            # point1_long = point1[0]
            # point1_lat = point1[1]
            # point2 = values[0][1]
            # point2_long = point2[0]
            # point2_lat = point2[1]
            # point3 = values[0][2]
            # point3_long = point3[0]
            # point3_lat = point3[1]
            # point4 = values[0][3]
            # point4_long = point4[0]
            # point4_lat = point4[1]
            #
            # self.processgraphSpatialExtent.setText(str(values))
            #
            # long = []
            # lat = []
            #
            # long.append([point1_long, point2_long, point3_long, point4_long])
            #
            # long_min = min(long[0])
            # long_max = max(long[0])
            # lat.append([point1_lat, point2_lat, point3_lat, point4_lat])
            # lat_min = min(lat[0])
            # lat_max = max(lat[0])
            #
            # spatial_extent = {"west": long_min, "east": long_max, "north": lat_max,
            #                   "south": lat_min, "crs": crs}
            #
            # str_format = str(spatial_extent).replace("'", '"')
            self.processgraphSpatialExtent.setText(geometry.asJson())
            self.parent().show()
            QMainWindow.show(self)

        elif not iface.activeLayer():
            iface.actionPan().trigger()
            self.parent().show()
            QMainWindow.show(self)
            self.iface.messageBar().pushMessage(
                "Please open a new layer to get extent from.", duration=5)

        else:
            iface.actionPan().trigger()
            self.parent().show()
            QMainWindow.show(self)
            self.iface.messageBar().pushMessage(
                "Please open a new layer to get extent from.", duration=5)
Ejemplo n.º 14
0
# coding: utf-8
from qgis.gui import QgsMapToolPan
from qgis.utils import iface

canvas = iface.mapCanvas()
map_tool_pan = QgsMapToolPan(canvas)

canvas.setMapTool(map_tool_pan)

# Reuse the existing QgsMapToolPan instead of creating another one
iface.actionPan().trigger()
Ejemplo n.º 15
0
 def closeEvent(self, event):
     # Deaktywacja skrótów klawiszowych:
     self.hk_vn = False
     self.hk_seq = False
     # Usunięcie połączenia z Google Earth Pro:
     self.ge = None
     # Odblokowanie messagebar'u:
     try:
         iface.messageBar().widgetAdded.disconnect(self.msgbar_blocker)
     except:
         pass
     try:
         self.proj.layersWillBeRemoved.disconnect(self.layers_removing)
         self.proj.legendLayersAdded.disconnect(self.layers_adding)
     except Exception as err:
         print(f"closeEvent/self.proj.disconnect: {err}")
     self.proj = None
     try:
         self.canvas.children().remove(self.side_dock)
         self.side_dock.deleteLater()
     except:
         pass
     try:
         self.canvas.children().remove(self.bottom_dock)
         self.bottom_dock.deleteLater()
     except:
         pass
     try:
         self.canvas.children().remove(self.seq_dock)
         self.seq_dock.deleteLater()
     except:
         pass
     try:
         self.canvas.children().remove(self.flag_panel)
         self.flag_panel.deleteLater()
     except:
         pass
     try:
         self.canvas.children().remove(self.parking_panel)
         self.parking_panel.deleteLater()
     except:
         pass
     try:
         self.canvas.children().remove(self.marsz_panel)
         self.marsz_panel.deleteLater()
     except:
         pass
     try:
         self.canvas.children().remove(self.wyr_panel)
         self.wyr_panel.deleteLater()
     except:
         pass
     try:
         self.canvas.children().remove(self.wn_panel)
         self.wn_panel.deleteLater()
     except:
         pass
     try:
         self.canvas.children().remove(self.export_panel)
         self.export_panel.deleteLater()
     except:
         pass
     try:
         self.canvas.children().remove(self.splash_screen)
         self.splash_screen.deleteLater()
     except:
         pass
     try:
         self.mt = None
     except Exception as err:
         print(f"closeEvent/self.mt: {err}")
     try:
         self.lyr = None
     except Exception as err:
         print(f"closeEvent/self.lyr: {err}")
     try:
         self.cfg = None
     except Exception as err:
         print(f"closeEvent/self.cfg: {err}")
     # Przełączenie na QGIS'owy maptool:
     map_tool_pan = QgsMapToolPan(self.canvas)
     self.canvas.setMapTool(map_tool_pan)
     iface.actionPan().trigger()
     try:
         self.obj = None
     except Exception as err:
         print(f"closeEvent/self.obj: {err}")
     try:
         self.app.removeEventFilter(self)
     except Exception as err:
         print(f"closeEvent/self.app.removeEventFilter: {err}")
     try:
         self.canvas.removeEventFilter(self)
     except Exception as err:
         print(f"closeEvent/self.canvas.removeEventFilter: {err}")
     self.closingPlugin.emit()
     event.accept()