def addImage(): layer = QgsCore.QgsRasterLayer(file_image, os.path.split(file_image)[-1]) geomTransf = QgsCore.QgsGeometry(geom) ct = QgsCore.QgsCoordinateTransform(v_crs, layer.crs()) geomTransf.transform(ct) wkt_geom = geomTransf.exportToWkt() layer.setCustomProperty('wkt_geom', wkt_geom) layer.setCustomProperty('date', acquired) layer.setCustomProperty('id_table', id_table) layer.setCustomProperty('id_image', id_image) QgsCore.QgsMapLayerRegistry.instance().addMapLayer( layer, addToLegend=False) self.catalog['ltg'].addLayer(layer) self.legendRasterGeom.setLayer(layer)
def changeMarker(self, strListExtent): if not self.__showMarker: return # left, bottom, right, top left, bottom, right, top = [ float(item) for item in strListExtent.split(',') ] pointCenter = core.QgsRectangle(core.QgsPoint(left, top), core.QgsPoint(right, bottom)).center() crsCanvas = self.__canvas.mapRenderer().destinationCrs() if self.__srsOL != crsCanvas: coodTrans = core.QgsCoordinateTransform(self.__srsOL, crsCanvas) pointCenter = coodTrans.transform( pointCenter, core.QgsCoordinateTransform.ForwardTransform) self.__refresh(pointCenter)
def highlight(self, geom, seconds=2): def removeRB(): rb.reset(True) self.canvas.scene().removeItem(rb) geomTransform = geom crsCanvas = self.canvas.mapSettings().destinationCrs() if not self.crs == crsCanvas: ct = QgsCore.QgsCoordinateTransform(self.crs, crsCanvas) geomTransform.transform(ct) rb = QgsGui.QgsRubberBand(self.canvas, QgsCore.QGis.Polygon) rb.setBorderColor(self.color) rb.setWidth(2) rb.setToGeometry(geomTransform, None) QtCore.QTimer.singleShot(seconds * 1000, removeRB)
def zoomToBBox(bboxFeats): def highlight(): def removeRB(): rb.reset( True ) self.canvas.scene().removeItem( rb ) rb = QgsGui.QgsRubberBand( self.canvas, QgsCore.QGis.Polygon) rb.setBorderColor( QtGui.QColor( 255, 0, 0 ) ) rb.setWidth( 2 ) rb.setToGeometry( QgsCore.QgsGeometry.fromRect( extent ), None ) QtCore.QTimer.singleShot( 2000, removeRB ) crsCanvas = self.canvas.mapSettings().destinationCrs() ct = QgsCore.QgsCoordinateTransform( self.layerPolygon.crs(), crsCanvas ) extent = ct.transform( bboxFeats ) self.canvas.setExtent( extent ) self.canvas.zoomByFactor( 1.05 ) self.canvas.refresh() highlight()
def apdockChangeVisibility(self,vis): if not vis: self.position.reset() self.aperture.reset() self.disableControlShape() try: self.StreetviewAction.setIcon(QtGui.QIcon(":/plugins/go2streetview/res/icoStreetview_gray.png")) #self.StreetviewAction.setDisabled(True) except: pass else: self.StreetviewAction.setEnabled(True) self.StreetviewAction.setIcon(QtGui.QIcon(":/plugins/go2streetview/res/icoStreetview.png")) self.setPosition() if self.infoBoxManager.isEnabled() and self.apdockwidget.widget() != self.dumView: infoLayer = self.infoBoxManager.getInfolayer() toInfoLayerProjection = core.QgsCoordinateTransform(core.QgsCoordinateReferenceSystem(4326),infoLayer.crs(), core.QgsProject.instance()) self.enableControlShape(toInfoLayerProjection.transform(core.QgsPointXY(self.pointWgs84)))
def CreateTMS_GDAL_WMS(self): @QtCore.pyqtSlot(dict) def finished(message): self.thread.quit() self.worker.finished.disconnect(finished) self._sortNameGroupCatalog() self._endProcessing("Create TMS", message['totalError']) self._setGroupCatalog('TMS') r = self._startProcess(self.worker.kill) if not r['isOk']: return iterFeat = r['iterFeat'] path_tms = os.path.join(self.settings['path'], 'tms') if not os.path.exists(path_tms): os.makedirs(path_tms) cr3857 = QgsCore.QgsCoordinateReferenceSystem( 3857, QgsCore.QgsCoordinateReferenceSystem.EpsgCrsId) ctTMS = QgsCore.QgsCoordinateTransform(self.layer.crs(), cr3857) self.worker.finished.connect(finished) data = { 'pluginName': CatalogPL.pluginName, 'getURL': API_PlanetLabs.getURL_TMS, 'user_pwd': { 'user': API_PlanetLabs.validKey, 'pwd': '' }, 'path': path_tms, 'ltgCatalog': self.catalog['ltg'], 'id_layer': self.layer.id(), 'ctTMS': ctTMS, 'iterFeat': iterFeat # feat: 'id', 'acquired', 'meta_json' } self.worker.setting(data) self.worker.stepProgress.connect(self.mbcancel.step) self.thread.start() # Start Worker
def chooseLayer(self): self.dlg = ChooseLayerDialog() self.dlg.show() result = self.dlg.exec_() if result: # get layer instance from comboBox layer = self.dlg.layer # If "use selected features only" create extent from selected features if self.dlg.selectionCheckBox.isChecked(): f_count = layer.selectedFeatureCount() features = layer.selectedFeatures() box = features[0].geometry().boundingBox() for i in range(1, f_count): fbbox = features[i].geometry().boundingBox() box.combineExtentWith(fbbox) else: # No features selected get bounding box of entire layer box = layer.extent() source_crs = layer.crs() dest_crs = core.QgsCoordinateReferenceSystem(4326) if source_crs != dest_crs: transform = core.QgsCoordinateTransform( source_crs, dest_crs, core.QgsProject.instance()) extent = transform.transformBoundingBox(box) else: extent = box self.xMin.setValue(extent.xMinimum()) self.xMax.setValue(extent.xMaximum()) self.yMin.setValue(extent.yMinimum()) self.yMax.setValue(extent.yMaximum()) self.toolSelect.drawRect(extent.xMinimum(), extent.yMinimum(), extent.xMaximum(), extent.yMaximum()) return
def draw(self, renderContext): if self.CheckLayerExtent() == False : self.setLatLonGridCrsAndExtent() self.generateLatLonGrid() mapToPixel = renderContext.mapToPixel() proj = core.QgsProject.instance() # Default CRS: 3452 == EPSG:4326 srid = proj.readNumEntry('SpatialRefSys', '/ProjectCRSID', 3452)[0] crs = core.QgsCoordinateReferenceSystem(srid, core.QgsCoordinateReferenceSystem.InternalCrsId) xform = core.QgsCoordinateTransform(self.crs(), crs) self.dlg.symbol.startRender(renderContext) for line in self.ll_grid: polyline = QtGui.QPolygonF() for vertex in line: end = mapToPixel.transform(xform.transform(vertex)) polyline.append(QtCore.QPointF(end.x(), end.y())) if QGis.QGIS_VERSION_INT < 10800: self.dlg.symbol.renderPolyline(polyline, renderContext) else: self.dlg.symbol.renderPolyline(polyline, None, renderContext) if QGis.QGIS_VERSION_INT > 20200 : self.drawLabels(renderContext) self.dlg.symbol.stopRender(renderContext) return True
def reprojectGeometry(self, geom): # Defining the crs from src and destiny iface = self.getIface() canvas = iface.mapCanvas() epsg = canvas.mapSettings().destinationCrs().authid() crsSrc = core.QgsCoordinateReferenceSystem(epsg) #getting srid from something like 'EPSG:31983' layer = canvas.currentLayer() srid = layer.crs().authid() crsDest = core.QgsCoordinateReferenceSystem( srid) #here we have to put authid, not srid if srid != epsg: # Creating a transformer coordinateTransformer = core.QgsCoordinateTransform( crsSrc, crsDest, QgsProject.instance()) geomType = geom.type() # Transforming the points if geomType == core.QgsWkbTypes.LineGeometry: geomList = geom.asPolyline() elif geomType == core.QgsWkbTypes.PolygonGeometry: geomList = geom.asPolygon() newGeom = [] for j in range(len(geomList)): if geomType == core.QgsWkbTypes.LineGeometry: newGeom.append(coordinateTransformer.transform( geomList[j])) elif geomType == core.QgsWkbTypes.PolygonGeometry: line = geomList[j] for i in range(len(line)): point = line[i] newGeom.append(coordinateTransformer.transform(point)) if geomType == core.QgsWkbTypes.LineGeometry: return core.QgsGeometry.fromPolylineXY(newGeom) elif geomType == core.QgsWkbTypes.PolygonGeometry: return core.QgsGeometry.fromPolygonXY([newGeom]) return geom
def lineBuffer(self,p,polygons = None): dBuffer = self.infoBoxManager.getDistanceBuffer() infoLayer = self.infoBoxManager.getInfolayer() toInfoLayerProjection = core.QgsCoordinateTransform(self.iface.mapCanvas().mapSettings().destinationCrs(),infoLayer.crs(), core.QgsProject.instance()) toWGS84 = core.QgsCoordinateTransform(infoLayer.crs(),core.QgsCoordinateReferenceSystem(4326), core.QgsProject.instance()) # create layer and replicate fields bufferLayer = core.QgsVectorLayer("LineString?crs="+infoLayer.crs().toWkt(), "temporary_lines", "memory") #bufferLayer.setCrs(infoLayer.crs()) #This generates alert message bufferLayer.startEditing() bufferLayer.addAttribute(core.QgsField("id",QtCore.QVariant.String)) bufferLayer.addAttribute(core.QgsField("html",QtCore.QVariant.String)) bufferLayer.addAttribute(core.QgsField("icon",QtCore.QVariant.String)) bufferLayer.addAttribute(core.QgsField("fid",QtCore.QVariant.Int)) fetched = 0 cutBuffer = core.QgsGeometry.fromPointXY(toInfoLayerProjection.transform(core.QgsPointXY(p))).buffer(dBuffer*2,10) self.enableControlShape(toInfoLayerProjection.transform(core.QgsPointXY(p))) if not polygons: self.featsId = self.infoBoxManager.getContextFeatures(toInfoLayerProjection.transform(p)) for featId in self.featsId: feat = infoLayer.getFeatures(core.QgsFeatureRequest(featId)).__next__() if fetched < 1500: if infoLayer.geometryType() == core.QgsWkbTypes.PolygonGeometry: fGeom = feat.geometry().convertToType(core.QgsWkbTypes.LineGeometry) elif infoLayer.geometryType() == core.QgsWkbTypes.LineGeometry: fGeom = feat.geometry() if fGeom: #break on closest point on segment to pov to improve visibility closestResult = fGeom.closestSegmentWithContext(toInfoLayerProjection.transform(p)); fGeom.insertVertex(closestResult[1][0],closestResult[1][1],closestResult[2]) cGeom = fGeom.intersection(cutBuffer) if cGeom.isMultipart(): multigeom = cGeom.asMultiPolyline() for geom in multigeom: newGeom = core.QgsGeometry.fromPolylineXY(geom) newFeat = core.QgsFeature() newFeat.setGeometry(newGeom) newFeat.setAttributes([self.infoBoxManager.getInfoField(feat),self.infoBoxManager.getHtml(feat),self.infoBoxManager.getIconPath(feat),self.infoBoxManager.getFeatId(feat)]) bufferLayer.addFeature(newFeat) else: geom = cGeom.asPolyline() newGeom = core.QgsGeometry.fromPolylineXY(geom) newFeat = core.QgsFeature() newFeat.setGeometry(newGeom) newFeat.setAttributes([self.infoBoxManager.getInfoField(feat),self.infoBoxManager.getHtml(feat),self.infoBoxManager.getIconPath(feat),self.infoBoxManager.getFeatId(feat)]) bufferLayer.addFeature(newFeat) fetched = fetched + len(newGeom.asPolyline()) else: core.QgsMessageLog.logMessage("Null geometry!", tag="go2streetview", level=core.Qgis.Warning) else: core.QgsMessageLog.logMessage("fetched too much features..... 200 max", tag="go2streetview", level=core.Qgis.Warning) break bufferLayer.commitChanges() core.QgsMessageLog.logMessage("line context rebuilt: %s features" % bufferLayer.featureCount(), tag="go2streetview", level=core.Qgis.Info) #StreetView lines tmpfile = os.path.join(self.dirPath, "tmp", "tmp_lines.geojson") core.QgsVectorFileWriter.writeAsVectorFormat(bufferLayer, tmpfile,"UTF8", toWGS84, "GeoJSON") with open(tmpfile) as f: geojson = f.read().replace('\n', '') os.remove(tmpfile) js = """this.linesJson = %s""" % json.dumps(geojson) self.view.SV.page().mainFrame().evaluateJavaScript(js) self.view.BE.page().mainFrame().evaluateJavaScript(js) js = """this.readLinesJson() """ self.view.SV.page().mainFrame().evaluateJavaScript(js) self.view.BE.page().mainFrame().evaluateJavaScript(js) core.QgsMessageLog.logMessage("webview lines refreshed", tag="go2streetview", level=core.Qgis.Info)
def transformToWGS84(self, pPoint, srs): # transformation from the provided SRS to WGS84 crsSrc = core.QgsCoordinateReferenceSystem(srs) crsDest = core.QgsCoordinateReferenceSystem(4326) # WGS 84 xform = core.QgsCoordinateTransform(crsSrc, crsDest, core.QgsProject.instance()) return xform.transform(pPoint) # forward transformation: src -> dest
def _getExtent(canvas): crsCanvas = canvas.mapSettings().destinationCrs() layer = _getRasterLayer()['layer'] crsLayer = layer.crs() ctCanvas = QgsCore.QgsCoordinateTransform( crsLayer, crsCanvas ) return ctCanvas.transform( layer.extent() )