Beispiel #1
0
 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()
Beispiel #5
0
    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)))
Beispiel #6
0
    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
Beispiel #8
0
    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
Beispiel #9
0
 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)
Beispiel #11
0
 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
Beispiel #12
0
 def _getExtent(canvas):
   crsCanvas = canvas.mapSettings().destinationCrs()
   layer = _getRasterLayer()['layer']
   crsLayer = layer.crs()
   ctCanvas = QgsCore.QgsCoordinateTransform( crsLayer, crsCanvas )
   return ctCanvas.transform( layer.extent() )