Example #1
0
 def add_point(self, point):
     self.points.append(point)
     self.band.addPoint(QgsPointXY(point))
     self.pointband.addPoint(QgsPointXY(point))
     self.capturing = True
     self.endcaptureaction.setEnabled(True)
     self.undoaction.setEnabled(True)
Example #2
0
    def testInputInDecimalMode(self):
        QTest.mouseClick(self.dw.inputAsDec, QtCore.Qt.LeftButton)

        self.dw.setInputPoint(QgsPointXY(1, 1))
        self.assertEqual(helperFormatCoordinates("1.000000000"),
                         self.dw.inLeftDec.text())
        self.assertEqual("E", self.dw.leftDirButton.text())
        self.assertEqual(helperFormatCoordinates("1.000000000"),
                         self.dw.inRightDec.text())
        self.assertEqual("N", self.dw.rightDirButton.text())

        self.dw.setInputPoint(QgsPointXY(-1, 1))
        self.assertEqual(helperFormatCoordinates("1.000000000"),
                         self.dw.inLeftDec.text())
        self.assertEqual("W", self.dw.leftDirButton.text())
        self.assertEqual(helperFormatCoordinates("1.000000000"),
                         self.dw.inRightDec.text())
        self.assertEqual("N", self.dw.rightDirButton.text())

        self.dw.setInputPoint(QgsPointXY(1, -1))
        self.assertEqual(helperFormatCoordinates("1.000000000"),
                         self.dw.inLeftDec.text())
        self.assertEqual("E", self.dw.leftDirButton.text())
        self.assertEqual(helperFormatCoordinates("1.000000000"),
                         self.dw.inRightDec.text())
        self.assertEqual("S", self.dw.rightDirButton.text())

        self.dw.setInputPoint(QgsPointXY(-1, -1))
        self.assertEqual(helperFormatCoordinates("1.000000000"),
                         self.dw.inLeftDec.text())
        self.assertEqual("W", self.dw.leftDirButton.text())
        self.assertEqual(helperFormatCoordinates("1.000000000"),
                         self.dw.inRightDec.text())
        self.assertEqual("S", self.dw.rightDirButton.text())
    def __init__(self, parent=None):
        QToolButton.__init__(self, parent)

        self.setToolTip(
            "Select point to define a longitudinal profile (ctrl for intermediate point) "
        )

        self.setText("Select profile from map")
        self.setCheckable(True)
        self.clicked.connect(self.picker_clicked)

        self.pick_mode = self.PICK_NO
        self.pick_layer = None

        self.vectorLayer = None
        self.meshLayer = None
        self.tracer = QgsTracer()
        self.tracer.setDestinationCrs(
            iface.mapCanvas().mapSettings().destinationCrs(),
            iface.mapCanvas().mapSettings().transformContext())
        self.temporaryTrace = []
        self.profileTrace = []

        self.firstVertex = QgsPointXY()
        self.firstVertexMarker = None
        self.profileHighlight = None

        self.tool = PickProfileTool(iface.mapCanvas())
        self.tool.picked.connect(self.on_picked)
        self.tool.setButton(self)
    def stop_picking(self):
        if self.pick_mode == self.PICK_MAP:
            iface.mapCanvas().unsetMapTool(self.tool)

        self.profileTrace.extend(self.temporaryTrace)
        self.temporaryTrace = []
        self.firstVertex = QgsPointXY()

        self.updateMarker()

        self.pick_mode = self.PICK_NO
Example #5
0
 def add_vertex_avg(self):
     # if turned on
     if roam.config.settings.get('gps_averaging', True):
         # if currently happening
         if roam.config.settings.get('gps_averaging_in_action', True):
             # start -> stop
             # averaging
             average_point = GPS.average_func(GPS.gpspoints)
             point = QgsPoint(average_point[0], average_point[1],
                              average_point[2])
             self.add_point(point)
             self.band.addPoint(QgsPointXY(point))
             # default settings
             vertex_or_point = ''
             in_action = False
             start_time = '0:00:00'
             roam.config.settings['gps_averaging_measurements'] = 0
             self.set_buttons_avg(True)
         else:
             # stop -> start
             # avg settings
             vertex_or_point = 'vertex'
             in_action = True
             start_time = datetime.now()
             self.set_buttons_avg(False)
         roam.config.settings['gps_vertex_or_point'] = vertex_or_point
         roam.config.settings['gps_averaging_in_action'] = in_action
         roam.config.settings['gps_averaging_start_time'] = start_time
         roam.config.save()
     else:
         self.add_vertex()
 def init_state(self):
     dirname = os.path.dirname(__file__)
     layer = QgsProject.instance().mapLayersByName('copy_energy_plant')[0]
     if layer.featureCount() < NUMB_ENERGY_PLANT:
         filename = os.path.join(dirname,
                                 'dataset/global_power_plant_database.csv')
         layer.startEditing()
         with open(filename, 'r') as file:
             reader = csv.reader(file)
             for i, row in enumerate(reader):
                 if i > 0 and row[7] == "Nuclear":
                     pr = layer.dataProvider()
                     # insert in attribute table
                     poly = QgsFeature(layer.fields())
                     poly.setAttribute("Country", row[0])
                     poly.setAttribute("count_long", row[1])
                     poly.setAttribute("name", row[2])
                     poly.setAttribute("qppd_idnr", row[3])
                     poly.setAttribute("cap_mw", row[4])
                     poly.setAttribute("latitude", row[5])
                     poly.setAttribute("longitude", row[6])
                     poly.setAttribute("Radiation", random.randint(1, 200))
                     poly.setGeometry(
                         QgsGeometry.fromPointXY(
                             QgsPointXY(float(row[6]), float(row[5]))))
                     pr.addFeatures([poly])
             layer.updateExtents()
             layer.commitChanges()
             layer.reload()
Example #7
0
    def getArrayfromLayer(self, layer):
        extent = layer.extent()
        width = int(extent.width())
        height = int(extent.height())
        res = np.zeros((height, width, layer.bandCount()))

        for j in range(width):
            for k in range(height):
                ident = layer.dataProvider().identify(
                    QgsPointXY(extent.xMinimum() + j,
                               extent.yMaximum() - k),
                    QgsRaster.IdentifyFormatValue)
                for i in range(layer.bandCount()):
                    res[k, j, i] = ident.results()[i + 1]
        return res
Example #8
0
    def saveCSV(self, filename, noWGS=False, header=None):
        delimiter = str(Config.CSV_DELIMITER.strip()[0])
        table=deepcopy(self.table)
        with open(filename[0], "w") as fo:
            writer = csv.writer(fo, delimiter=delimiter, dialect='excel')
            if type(header)==list:
                writer.writerow(header)
            for r in table:
                for i,c in enumerate(r):
                   r[i]=c.replace(".",",")
                writer.writerow(r)

        if not noWGS:
            table=deepcopy(self.table)
            with open(filename[0].split(".")[0]+"_WGS84.csv", "w") as fo:
                writer = csv.writer(fo, delimiter=delimiter, dialect='excel')
                if type(header) == list:
                    writer.writerow(header)
                for r in table:
                    pt=pointToWGS84(QgsPointXY(float(str(r[4]).replace(",",'.')),float(str(r[3]).replace(",","."))))
                    r[4],r[3]=str(pt.x()),str(pt.y())
                    for i,c in enumerate(r):
                        r[i]=c.replace(".",",")
                    writer.writerow(r)
Example #9
0
def toPointXY(array, index=0):
    """Gets the QgsPointXY from the array at the specified index."""
    return QgsPointXY(
        parseCoordinateValue(array[index + 1]),  # Longitude
        parseCoordinateValue(array[index + 0])  # Latitude
    )
Example #10
0
 def activate(self):
     self.pointband.reset(QgsWkbTypes.PointGeometry)
     self.pointband.addPoint(QgsPointXY(0, 0))
     self.canvas.setCursor(self.cursor)
Example #11
0
 def add_vertex(self):
     location = GPS.position
     self.add_point(location)
     # Add an extra point for the move band
     self.band.addPoint(QgsPointXY(location))
class Profile1DPickerWidget(QToolButton):

    geometry_changed = pyqtSignal()

    PICK_NO, PICK_MAP, PICK_LAYER = range(3)

    def __init__(self, parent=None):
        QToolButton.__init__(self, parent)

        self.setToolTip(
            "Select point to define a longitudinal profile (ctrl for intermediate point) "
        )

        self.setText("Select profile from map")
        self.setCheckable(True)
        self.clicked.connect(self.picker_clicked)

        self.pick_mode = self.PICK_NO
        self.pick_layer = None

        self.vectorLayer = None
        self.meshLayer = None
        self.tracer = QgsTracer()
        self.tracer.setDestinationCrs(
            iface.mapCanvas().mapSettings().destinationCrs(),
            iface.mapCanvas().mapSettings().transformContext())
        self.temporaryTrace = []
        self.profileTrace = []

        self.firstVertex = QgsPointXY()
        self.firstVertexMarker = None
        self.profileHighlight = None

        self.tool = PickProfileTool(iface.mapCanvas())
        self.tool.picked.connect(self.on_picked)
        self.tool.setButton(self)

    def clear_geometries(self):
        self.firstVertex = QgsPointXY()
        self.temporaryTrace = []
        self.profileTrace = []
        self.clear_marker()
        self.geometry_changed.emit()

    def picker_clicked(self):
        was_active = (self.pick_mode == self.PICK_MAP)
        self.stop_picking()
        if not was_active:
            self.start_picking_map()

    def start_picking_map(self):
        self.pick_mode = self.PICK_MAP
        iface.mapCanvas().setMapTool(self.tool)
        self.clear_geometries()

    def stop_picking(self):
        if self.pick_mode == self.PICK_MAP:
            iface.mapCanvas().unsetMapTool(self.tool)

        self.profileTrace.extend(self.temporaryTrace)
        self.temporaryTrace = []
        self.firstVertex = QgsPointXY()

        self.updateMarker()

        self.pick_mode = self.PICK_NO

    def on_picked(self, point, finished, ctrl):
        if self.meshLayer is None:
            return

        if finished:  # no more updates
            self.stop_picking()
            return

        searchradius = self.tool.searchRadiusMU(iface.mapCanvas())
        vertexMapPosition = self.meshLayer.snapOnElement(
            QgsMesh.Vertex, point, searchradius)

        if not self.tracer.isPointSnapped(vertexMapPosition):
            return

        if self.firstVertex.isEmpty():
            self.firstVertex = vertexMapPosition
        else:
            if ctrl:  # Intermediate point
                if len(self.profileTrace) == 0:
                    lastVertex = self.firstVertex
                else:
                    lastVertex = self.profileTrace[-1]
                traceResult = self.tracer.findShortestPath(
                    lastVertex, vertexMapPosition)
                if not traceResult[1] == QgsTracer.ErrNone:
                    self.updateMarker()
                    self.geometry_changed.emit()
                    return
                newTrace = traceResult[0]
                newTrace.pop(0)
                self.profileTrace.extend(newTrace)
                self.firstVertex = vertexMapPosition
                self.temporaryTrace = []
            else:
                traceResult = self.tracer.findShortestPath(
                    self.firstVertex, vertexMapPosition)
                if not traceResult[1] == QgsTracer.ErrNone:
                    self.updateMarker()
                    self.geometry_changed.emit()
                    return
                self.temporaryTrace = traceResult[0]
                if not len(
                        self.profileTrace
                ) == 0:  # If a trace exists before the temporary one,
                    self.temporaryTrace.pop(
                        0
                    )  # remove the first element to avoid duplicate vertex

        self.updateMarker()

        self.geometry_changed.emit()

    def initializeTracer(self, meshLayer):

        self.meshLayer = meshLayer
        self.profileTrace = []
        self.newTrace = []

        if meshLayer is None:
            return

        mesh = QgsMesh()

        if meshLayer.dataProvider().contains(QgsMesh.Edge):
            meshLayer.dataProvider().populateMesh(mesh)

        self.vectorLayer = QgsVectorLayer("linestringZ", "meshLayer", "memory")
        self.vectorLayer.setCustomProperty("skipMemoryLayersCheck", 1)
        self.vectorLayer.setCrs(meshLayer.crs())
        self.vectorLayer.startEditing()

        field = QgsField("EdgeIndex", QVariant.Int)
        self.vectorLayer.addAttribute(field)

        edgeCount = mesh.edgeCount()
        for i in range(edgeCount):
            f = QgsFeature()
            edge = mesh.edge(i)
            p1 = mesh.vertex(edge[0])
            p2 = mesh.vertex(edge[1])
            line = QgsLineString(p1, p2)
            geometry = QgsGeometry(line)
            f.setGeometry(geometry)
            attrs = [i]
            f.setAttributes(attrs)
            self.vectorLayer.addFeature(f)

        self.vectorLayer.commitChanges()

        layers = [self.vectorLayer]
        self.tracer.setLayers(layers)
        self.tracer.init()

    def clear_marker(self):
        if self.firstVertexMarker is not None:
            iface.mapCanvas().scene().removeItem(self.firstVertexMarker)
            self.firstVertexMarker = None
        if self.profileHighlight is not None:
            iface.mapCanvas().scene().removeItem(self.profileHighlight)
            self.profileHighlight = None

    def updateMarker(self):
        self.clear_marker()
        if not self.firstVertex.isEmpty():
            self.firstVertexMarker = QgsVertexMarker(iface.mapCanvas())
            self.firstVertexMarker.setIconType(QgsVertexMarker.ICON_CIRCLE)
            self.firstVertexMarker.setPenWidth(2)
            self.firstVertexMarker.setFillColor(QColor(150, 150, 0, 150))
            self.firstVertexMarker.setCenter(self.firstVertex)

        trace = self.profile()
        if len(trace) > 1:
            geometry = QgsGeometry.fromPolylineXY(trace)
            self.profileHighlight = QgsHighlight(iface.mapCanvas(), geometry,
                                                 None)
            self.profileHighlight.setWidth(5)
            self.profileHighlight.setColor(QColor(255, 165, 0, 170))

    def profile(self):
        trace = self.profileTrace.copy()
        trace.extend(self.temporaryTrace)
        return trace
 def clear_geometries(self):
     self.firstVertex = QgsPointXY()
     self.temporaryTrace = []
     self.profileTrace = []
     self.clear_marker()
     self.geometry_changed.emit()