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)
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
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()
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
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)
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 )
def activate(self): self.pointband.reset(QgsWkbTypes.PointGeometry) self.pointband.addPoint(QgsPointXY(0, 0)) self.canvas.setCursor(self.cursor)
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()