Esempio n. 1
0
 def canvasMoveEvent(self, event):
     #Método para receber os eventos canvas move do Qgis
     #Parâmetro de entrada: event (Evento que chamou o método)
     if self.getRubberBand():
         endPoint = self.toMapCoordinates(event.pos())
     snapRubberBand = self.getSnapRubberBand()
     if not (self.getStopedState()):
         if snapRubberBand:
             snapRubberBand.hide()
             snapRubberBand.reset(
                 geometryType=core.QgsWkbTypes.PointGeometry)
             self.setSnapRubberBand(None)
         oldPoint = core.QgsPointXY(event.mapPoint())
         event.snapPoint()
         point = core.QgsPointXY(event.mapPoint())
         if oldPoint != point:
             self.createSnapCursor(point)
         if self.getRubberBand():
             if self.contadorVert == 0:
                 self.getRubberBand().addPoint(point)
                 self.contadorVert += 1
             else:
                 self.getRubberBand().addPoint(oldPoint)
     if self.getRubberBandToStopState():
         self.updateRubberBandToStopState(self.toMapCoordinates(
             event.pos()))
Esempio n. 2
0
 def catchJSevents(self,status):
     try:
         tmpPOV = json.JSONDecoder().decode(status)
     except:
         tmpPOV = None
     if tmpPOV:
         if tmpPOV["transport"] == "drag":
             self.refreshWidget(tmpPOV['lon'], tmpPOV['lat'])
         elif tmpPOV["transport"] == "view":
             self.httpConnecting = True
             if self.actualPOV["lat"] != tmpPOV["lat"] or self.actualPOV["lon"] != tmpPOV["lon"]:
                 self.actualPOV = tmpPOV
                 actualPoint = core.QgsPointXY(float(self.actualPOV['lon']),float(self.actualPOV['lat']))
                 if self.infoBoxManager.isEnabled():
                     #self.view.SV.settings().clearMemoryCaches()
                     #self.view.BE.settings().clearMemoryCaches()
                     self.writeInfoBuffer(self.transformToCurrentSRS(actualPoint))
             else:
                 self.actualPOV = tmpPOV
             self.setPosition()
         elif tmpPOV["transport"] == "mapCommand":
             feat = self.infoBoxManager.getInfolayer().getFeatures(core.QgsFeatureRequest(tmpPOV["fid"])).__next__()
             if tmpPOV["type"] == "edit":
                 self.iface.openFeatureForm(self.infoBoxManager.getInfolayer(),feat,True)
             if tmpPOV["type"] == "select":
                 self.infoBoxManager.getInfolayer().select(feat.id())
         elif tmpPOV["transport"] == "SVLocation":
             if tmpPOV["status"] == 'OK':
                 self.SVLocationResponse = core.QgsPointXY(tmpPOV["lon"],tmpPOV["lat"])
             else:
                 self.SVLocationResponse = "cucu" #core.QgsPointXY()
Esempio n. 3
0
 def pointBuffer(self,p):
     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("Point?crs="+infoLayer.crs().toWkt(), "temporary_points", "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))
     self.enableControlShape(toInfoLayerProjection.transform(core.QgsPointXY(p)))
     fetched = 0
     self.featsId = self.infoBoxManager.getContextFeatures(toInfoLayerProjection.transform(p))
     for featId in self.featsId:
         feat = infoLayer.getFeatures(core.QgsFeatureRequest(featId)).__next__()
         if fetched < 200:
             if infoLayer.geometryType() == core.QgsWkbTypes.PolygonGeometry:
                 fGeom = feat.geometry().pointOnSurface()
             elif infoLayer.geometryType() == core.QgsWkbTypes.PointGeometry:
                 fGeom = feat.geometry()
             if fGeom.isMultipart():
                 multipoint = fGeom.asMultiPoint()
                 point = multipoint[0]
             else:
                 point = fGeom.asPoint()
             fetched += 1
             newGeom = core.QgsGeometry.fromPointXY(core.QgsPointXY(point))
             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:
             core.QgsMessageLog.logMessage("fetched too much features..... 200 max", tag="go2streetview", level=core.Qgis.Warning)
             break
     bufferLayer.commitChanges()
     core.QgsMessageLog.logMessage("markers context rebuilt", tag="go2streetview", level=core.Qgis.Info)
     #StreetView markers
     tmpfile = os.path.join(self.dirPath,"tmp","tmp_markers.geojson")
     core.QgsVectorFileWriter.writeAsVectorFormat (bufferLayer, tmpfile,"UTF8",toWGS84,"GeoJSON")
     with open(tmpfile) as f:
         geojson = f.read().replace('\n','')
     os.remove(tmpfile)
     #js = geojson.replace("'",'')
     #js = js.replace("\n",'\n')
     js = """this.markersJson = %s""" % json.dumps(geojson)
     self.view.SV.page().mainFrame().evaluateJavaScript(js)
     self.view.BE.page().mainFrame().evaluateJavaScript(js)
     js = """this.readJson() """
     self.view.SV.page().mainFrame().evaluateJavaScript(js)
     self.view.BE.page().mainFrame().evaluateJavaScript(js)
     core.QgsMessageLog.logMessage("webview markers refreshed", tag="go2streetview", level=core.Qgis.Info)
Esempio n. 4
0
    def setPosition(self,forcePosition = None):
        #if self.apdockwidget.widget().__dict__ == self.dumView.__dict__ or not self.apdockwidget.isVisible():
        if not self.apdockwidget.isVisible():
          return
        try:
            actualWGS84 = core.QgsPointXY (float(self.actualPOV['lon']),float(self.actualPOV['lat']))
        except:
            return
        actualSRS = self.transformToCurrentSRS(actualWGS84)
        if self.checkFollow.isChecked():
            if float(self.actualPOV['heading'])>180:
                rotAngle = 360-float(self.actualPOV['heading'])
            else:
                rotAngle = -float(self.actualPOV['heading'])
            self.canvas.setRotation(rotAngle)
            self.canvas.setCenter(actualSRS)
            self.canvas.refresh()
        self.position.reset()
        self.position=gui.QgsRubberBand(self.iface.mapCanvas(),core.QgsWkbTypes.PointGeometry )
        self.position.setWidth( 4 )
        self.position.setIcon(gui.QgsRubberBand.ICON_CIRCLE)
        self.position.setIconSize(4)
        self.position.setColor(QtCore.Qt.blue)
        self.position.addPoint(actualSRS)
        CS = self.canvas.mapUnitsPerPixel()*25
        zoom = float(self.actualPOV['zoom'])
        fov = (3.9018*pow(zoom,2) - 42.432*zoom + 123)/100;
        A1x = actualSRS.x()-CS*math.cos(math.pi/2-fov)
        A2x = actualSRS.x()+CS*math.cos(math.pi/2-fov)
        A1y = actualSRS.y()+CS*math.sin(math.pi/2-fov)
        A2y = A1y
        self.aperture.reset()
        self.aperture=gui.QgsRubberBand(self.iface.mapCanvas(),core.QgsWkbTypes.LineGeometry )
        self.aperture.setWidth( 3 )
        self.aperture.setColor(QtCore.Qt.blue)
        self.aperture.addPoint(core.QgsPointXY(A1x,A1y))
        self.aperture.addPoint(actualSRS)
        self.aperture.addPoint(core.QgsPointXY(A2x,A2y))
        tmpGeom = self.aperture.asGeometry()
        angle = float(self.actualPOV['heading'])*math.pi/-180
        self.aperture.setToGeometry(self.rotateTool.rotate(tmpGeom,actualSRS,angle),self.dumLayer)
        self.updateSVOptions()


        self.gswBrowserUrl ="https://maps.google.com/maps?q=&layer=c&cbll="+str(self.actualPOV['lat'])+","+str(self.actualPOV['lon'])+"&cbp=12,"+str(self.actualPOV['heading'])+",0,0,0&z=18"
        #Sync Google map
        js = "this.map.setCenter(new google.maps.LatLng(%s, %s));" % (str(self.actualPOV['lat']),str(self.actualPOV['lon']))
        self.view.BE.page().mainFrame().evaluateJavaScript(js)
        js = "this.SVpov.setPosition(new google.maps.LatLng(%s, %s));" % (str(self.actualPOV['lat']),str(self.actualPOV['lon']))
        self.view.BE.page().mainFrame().evaluateJavaScript(js)
Esempio n. 5
0
 def canvasMoveEvent(self, event):
     if self.snapCursorRubberBand:
         self.snapCursorRubberBand.hide()
         self.snapCursorRubberBand.reset(
             geometryType=core.QgsWkbTypes.PointGeometry)
         self.snapCursorRubberBand = None
     oldPoint = core.QgsPointXY(event.mapPoint())
     event.snapPoint()
     point = core.QgsPointXY(event.mapPoint())
     if oldPoint != point:
         self.createSnapCursor(point)
     if self.startPoint:
         self.endPoint = core.QgsPointXY(event.mapPoint())
         self.showCircle(self.startPoint, self.endPoint)
    def drawRect(self, minx, miny, maxx, maxy):
        self.tmp_band.reset()  #(core.QGis.Polygon)

        point1 = core.QgsPointXY(minx, miny)
        point2 = core.QgsPointXY(minx, maxy)
        point3 = core.QgsPointXY(maxx, maxy)
        point4 = core.QgsPointXY(maxx, miny)

        self.tmp_band.addPoint(point1, False)
        self.tmp_band.addPoint(point2, False)
        self.tmp_band.addPoint(point3, False)
        self.tmp_band.addPoint(point4, False)  # true to update canvas
        self.tmp_band.addPoint(point1, True)
        self.tmp_band.show()
Esempio n. 7
0
 def place_rubberband(self, xmin, xmax, ymin, ymax):
     """place rubberband on the canvas"""
     try:
         self.rubberBand.reset()
         self.canvas.scene().removeItem(self.rubberBand)
     except:  #pylint: disable=bare-except
         pass
     self.rubberBand = RH.init_rubberband('grid', self.canvas, 'polygon')
     tempRect = QC.QgsRectangle(QC.QgsPointXY(xmin, ymin),
                                QC.QgsPointXY(xmax, ymax))
     tempGeom = QC.QgsGeometry.fromRect(tempRect)
     crs = QC.QgsCoordinateReferenceSystem(GH.PROJECTCRS)
     self.rubberBand.reset()
     self.rubberBand.setToGeometry(tempGeom, crs)
     self.rubberBand.show()
Esempio n. 8
0
 def calculate_geometry(self, dist, xmin, ymin, x, y, gridType):
     """calculate grid polygons"""
     points = []
     if (x + 1) * dist > self.xWidth and gridType == 'Kaartblad':
         xmax = xmin + x * dist + (self.xWidth - x * dist)
     else:
         xmax = xmin + (x + 1) * dist
     if (y + 1) * dist > self.yWidth and gridType == 'Kaartblad':
         ymax = ymin + y * dist + (self.yWidth - y * dist)
     else:
         ymax = ymin + (y + 1) * dist
     points.append(QC.QgsPointXY(xmin + x * dist, ymin + y * dist))
     points.append(QC.QgsPointXY(xmax, ymin + y * dist))
     points.append(QC.QgsPointXY(xmax, ymax))
     points.append(QC.QgsPointXY(xmin + x * dist, ymax))
     return QC.QgsGeometry.fromMultiPolygonXY([[points]])
Esempio n. 9
0
 def mouseClick(self, currentPos, clickedButton):
     if clickedButton == QtCore.Qt.LeftButton:
         self.rubberBand.addPoint(core.QgsPointXY(currentPos))
         self.isEditing = True
         return
     if not (clickedButton == QtCore.Qt.RightButton
             and self.rubberBand.numberOfVertices() > 2):
         return
     self.isEditing = False
     geomRubber = self.rubberBand.asGeometry()
     node_layers = core.QgsProject.instance().layerTreeRoot().findLayers()
     if not self.checkValidity(geomRubber):
         iface.mapCanvas().refresh()
         self.rubberBand.reset(core.QgsWkbTypes.PolygonGeometry)
         return
     layers = [x.layer() for x in node_layers if x.isVisible()]
     for layer in layers:
         new_geom = []
         layer.startEditing()
         features = layer.getFeatures()
         for feat in features:
             geom = feat.geometry()
             if not geom.intersects(geomRubber):
                 continue
             layer.deleteFeature(feat.id())
     iface.mapCanvas().refresh()
     self.rubberBand.reset(core.QgsWkbTypes.PolygonGeometry)
    def showRect(self, start, end):
        self.tmp_band.reset()  #core.QGis.Polygon)
        if start.x() == end.x() or start.y() == end.y():
            return

        point1 = core.QgsPointXY(start.x(), start.y())
        point2 = core.QgsPointXY(start.x(), end.y())
        point3 = core.QgsPointXY(end.x(), end.y())
        point4 = core.QgsPointXY(end.x(), start.y())

        self.tmp_band.addPoint(point1, False)
        self.tmp_band.addPoint(point2, False)
        self.tmp_band.addPoint(point3, False)
        self.tmp_band.addPoint(point4, False)  # true to update canvas
        self.tmp_band.addPoint(point1, True)
        self.tmp_band.show()
Esempio n. 11
0
    def getNearestSVLocation(self,lon,lat):
        js = "this.getNearestSVLocation(%f,%f)" %(lon,lat)
        if not self.pointWgs84:
            self.pointWgs84 = core.QgsPointXY(lon,lat)
            self.heading = 0
            self.StreetviewRun()
            self.openSVDialog()
            time.sleep(1)
            self.StreetviewRun()
            delay = 10
        else:
            delay = 4

        self.SVLocationResponse = None
        self.view.SV.page().mainFrame().evaluateJavaScript(js)
        start = datetime.datetime.now()
        timeout = False
        while not (self.SVLocationResponse or timeout):
            time.sleep(0.2)
            tdiff = datetime.datetime.now()-start
            core.QgsMessageLog.logMessage("getNearestSVLocation %f" % tdiff, tag="go2streetview", level=core.Qgis.Info)
            print ("getNearestSVLocation", self.SVLocationResponse, tdiff, timeout)
            if tdiff.seconds > delay:
                timeout = True
        return self.SVLocationResponse
Esempio n. 12
0
 def mouseClick(self, currentPos, clickedButton):
     if clickedButton == QtCore.Qt.LeftButton:
         self.rubberBand.addPoint(core.QgsPointXY(currentPos))
         self.isEditing = True
         return
     if not ( clickedButton == QtCore.Qt.RightButton and self.rubberBand.numberOfVertices() > 2 ):
         return
     self.isEditing = False
     geometryWkt = self.rubberBand.asGeometry().asWkt()=
     epsgid = iface.mapCanvas().mapSettings().destinationCrs().authid().replace("EPSG:", "")
     vectorLayer = core.QgsVectorLayer(
         "?query=SELECT geom_from_wkt('{0}') as geometry&geometry=geometry:3:{1}".format(geometryWkt, epsgid), 
         "Polygon_Reference", 
         "virtual"
     )
     core.QgsProject.instance().addMapLayer(vectorLayer)            
     for layer in iface.mapCanvas().layers():
         try:
             layer.setSubsetString(
                 "st_intersects(geom,st_geomfromewkt('SRID={0};{1}'))".format(epsgid, geometryWkt)
             )
         except Exception:
             pass
     iface.mapCanvas().refresh()
     self.rubberBand.reset(core.QgsWkbTypes.PolygonGeometry)
Esempio n. 13
0
 def canvasReleaseEvent(self, event):
     if event.button() == Qt.LeftButton:
         if not self.startPoint:
             self.startPoint = core.QgsPointXY(event.mapPoint())
             self.rubberBand = self.getRubberBand()
     if event.button() == Qt.RightButton:
         self.execute(self.rubberBand.asGeometry(), self.parameters)
         self.initVariable()
Esempio n. 14
0
 def make_feature(self, feat_id, rect):
     feat = qc.QgsFeature(feat_id)
     # feat.setFeatureId(feat_id)
     if rect[0] != rect[1] or rect[2] != rect[3]:
         print("WARNING: can only deal with point geometries right now")
     gPnt = qc.QgsGeometry.fromPointXY(qc.QgsPointXY(rect[0], rect[2]))
     feat.setGeometry(gPnt)
     return feat
Esempio n. 15
0
 def infoLayerDefinedAction(self):
     if self.infoBoxManager.isEnabled():
         actualPoint = core.QgsPointXY(float(self.actualPOV['lon']),float(self.actualPOV['lat']))
         self.writeInfoBuffer(self.transformToCurrentSRS(actualPoint))
         time.sleep(1)
         js = "this.overlay.draw()"
         self.view.SV.page().mainFrame().evaluateJavaScript(js)
         #self.view.BE.page().mainFrame().evaluateJavaScript(js)
     else:
         js = "this.clearMarkers();this.clearLines();"
         self.view.SV.page().mainFrame().evaluateJavaScript(js)
         self.view.BE.page().mainFrame().evaluateJavaScript(js)
Esempio n. 16
0
 def startEdition(self, event):
     #Método para iniciar a aquisição
     #Parâmetro de entrada: event (Evento)
     event.snapPoint()
     snapRubberBand = self.getSnapRubberBand()
     if snapRubberBand:
         snapRubberBand.reset(geometryType=core.QgsWkbTypes.PointGeometry)
         snapRubberBand.hide()
         self.setSnapRubberBand(None)
     pointMap = core.QgsPointXY(event.mapPoint())
     layer = self.getCanvas().currentLayer()
     if layer:
         self.startRubberBand(pointMap, layer)
Esempio n. 17
0
 def projectReadAction(self):
     #remove current sketches
     self.infoBoxManager.restoreIni()
     self.scanForCoverageLayer()
     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)))
         self.infoBoxManager.show()
         self.infoBoxManager.raise_()
         QtGui.QGuiApplication.processEvents()
         self.infoBoxManager.acceptInfoBoxState()
         QtGui.QGuiApplication.processEvents()
Esempio n. 18
0
 def getPointsIndexOfTheNearestSegment(self, sourceFeature, targetFeature):
     sourceGeometry = sourceFeature.geometry()
     targetGeometry = targetFeature.geometry()
     firstVertexIdx = 0
     lastVertexIdx = len(sourceGeometry.asPolyline())-1
     firstVertex = sourceGeometry.vertexAt(0)
     lastVertex = sourceGeometry.vertexAt(lastVertexIdx)
     distance1 = self.getShortestDistanceBetweenGeometries(
         core.QgsGeometry.fromPointXY(core.QgsPointXY(firstVertex.x(), firstVertex.y())), 
         targetGeometry
     )
     distance2 = self.getShortestDistanceBetweenGeometries(
         core.QgsGeometry.fromPointXY(core.QgsPointXY(lastVertex.x(), lastVertex.y())), 
         targetGeometry
     )
     vertexIdx = -1
     if distance1 < distance2:
         vertexIdx = firstVertexIdx
     else:
         vertexIdx = lastVertexIdx
     adjVetexIdx1, adjVetexIdx2 = sourceGeometry.adjacentVertices(vertexIdx)
     adjVetexIdx = adjVetexIdx1 if (adjVetexIdx1 != -1) else adjVetexIdx2
     return (adjVetexIdx, vertexIdx)
Esempio n. 19
0
 def snap_to_point(self, pos, layerPt):
     """calculat if there is a point to snap to within the tolerance"""
     tolerance = pow(self.calcTolerance(pos), 2)
     minDist = tolerance
     snapPoint = None
     if self.vertexmarker is None:
         self.vertexmarker = RH.init_vertexmarker("snappoint", self.canvas)
     for geom in self.possibleSnapFeatures:
         closestSegm = geom.closestSegmentWithContext(layerPt)
         if closestSegm[0] < minDist:
             minDist = closestSegm[0]
             snapPoint = closestSegm[1]
     if snapPoint and snapPoint != QC.QgsPointXY(0, 0):
         return snapPoint
Esempio n. 20
0
    def showCircle(self, startPoint, endPoint):
        nPoints = 50
        x = startPoint.x()
        y = startPoint.y()
        r = math.sqrt((endPoint.x() - startPoint.x())**2 +
                      (endPoint.y() - startPoint.y())**2)
        self.rubberBand.reset(core.QgsWkbTypes.PolygonGeometry)

        for itheta in range(nPoints + 1):
            theta = itheta * (2.0 * math.pi / nPoints)
            self.rubberBand.addPoint(
                core.QgsPointXY(x + r * math.cos(theta),
                                y + r * math.sin(theta)))
        self.rubberBand.closePoints()
Esempio n. 21
0
 def finishEdition(self, event):
     #Método para finalizar a aquisição
     event.snapPoint()
     point = core.QgsPointXY(event.mapPoint())
     if self.getRubberBand():
         self.getRubberBand().addPoint(point)
     if not self.getRubberBand():
         return
     if self.getRubberBand().numberOfVertices() > 2:
         geom = self.getRubberBand().asGeometry()
         if not self.controlPressed:
             self.acquisitionFinished.emit(geom)
         else:
             self.doReshape(geom)
     self.cancelEdition()
Esempio n. 22
0
 def saveShapeFile(self):
     #The line below is commented to disable saving of static images in local directory to not violate point 10.1.3.b) of https://developers.google.com/maps/terms
     self.saveImg()
     #fov = str(int(90/max(1,float(self.pov['zoom']))))
     zoom = float(self.pov['zoom'])
     fov = 3.9018 * pow(zoom, 2) - 42.432 * zoom + 123
     urlimg = "http://maps.googleapis.com/maps/api/streetview?size=640x400&location=" + self.pov[
         'lat'] + "," + self.pov['lon'] + "&heading=" + self.pov[
             'heading'] + "&pitch=" + self.pov[
                 'pitch'] + "&sensor=false" + "&fov=" + str(
                     fov) + "&key=" + self.parent.APIkey
     self.cb.setText(urlimg)
     sfPath = os.path.join(self.sessionDirectory(),
                           "Streetview_snapshots_log.shp")
     if not os.path.isfile(sfPath):
         self.createShapefile(sfPath)
     vlayer = core.QgsVectorLayer(sfPath, "Streetview_snapshots_log", "ogr")
     testIfLayPresent = None
     for lay in self.canvas.layers():
         if lay.name() == "Streetview_snapshots_log":
             testIfLayPresent = True
     if not testIfLayPresent:
         vlayer.loadNamedStyle(os.path.join(self.path, "snapshotStyle.qml"))
         #self.iface.actionFeatureAction().trigger()
         core.QgsProject.instance().addMapLayer(vlayer)
         set = QtCore.QSettings()
         set.setValue("/qgis/showTips", True)
     feat = core.QgsFeature()
     feat.initAttributes(8)
     feat.setAttribute(
         0,
         datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
     feat.setAttribute(1, self.pov['lon'])
     feat.setAttribute(2, self.pov['lat'])
     feat.setAttribute(3, self.pov['heading'])
     feat.setAttribute(4, self.pov['pitch'])
     feat.setAttribute(5, self.pov['address'])  #self.getAddress())
     feat.setAttribute(6, self.snapshotNotes)
     #feat.setAttribute(7,self.file_name)
     feat.setAttribute(7, QtCore.QUrl(urlimg).toString())
     feat.setGeometry(
         core.QgsGeometry.fromPointXY(
             core.QgsPointXY(float(self.pov['lon']),
                             float(self.pov['lat']))))
     vlayer.dataProvider().addFeatures([feat])
     vlayer.triggerRepaint()
Esempio n. 23
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)))
Esempio n. 24
0
 def mouseMove(self, currentPos):
     if not self.isEditing:
         return
     self.rubberBand.movePoint(core.QgsPointXY(currentPos))
Esempio n. 25
0
    def printAction(self):
        #export tmp imgs of qwebviews
        for imgFile,webview in {"tmpSV.png":self.view.SV,"tmpBE.png":self.view.BE}.items():
            painter = QtGui.QPainter()
            img = QtGui.QImage(webview.size().width(), webview.size().height(), QtGui.QImage.Format_ARGB32)
            painter.begin(img)
            webview.page().mainFrame().render(painter)
            painter.end()
            img.save(os.path.join(self.dirPath,"tmp",imgFile))
        # portion of code from: http://gis.stackexchange.com/questions/77848/programmatically-load-composer-from-template-and-generate-atlas-using-pyqgis

        # Load template
        myLayout = core.QgsLayout(core.QgsProject.instance())
        myFile = os.path.join(os.path.dirname(__file__), 'res','go2SV_A4.qpt')
        myTemplateFile = open(myFile, 'rt')
        myTemplateContent = myTemplateFile.read()
        myTemplateFile.close()
        myDocument = QtXml.QDomDocument()
        myDocument.setContent(myTemplateContent)
        myLayout.loadFromTemplate(myDocument,core.QgsReadWriteContext())

        #MAP
        mapFrame = sip.cast(myLayout.itemById('MAP'),core.QgsLayoutItemMap)
        mapFrameAspectRatio = mapFrame.extent().width()/mapFrame.extent().height()
        newMapFrameExtent = core.QgsRectangle()
        actualPosition = self.transformToCurrentSRS(core.QgsPointXY (float(self.actualPOV['lon']),float(self.actualPOV['lat'])))
        centerX = actualPosition.x()
        centerY = actualPosition.y()
        if float(self.actualPOV['heading']) > 360:
            head = float(self.actualPOV['heading'])-360
        else:
            head = float(self.actualPOV['heading'])
        newMapFrameExtent.set(centerX - self.iface.mapCanvas().extent().height()*mapFrameAspectRatio/2,centerY - self.iface.mapCanvas().extent().height()/2,centerX + self.iface.mapCanvas().extent().height()*mapFrameAspectRatio/2,centerY + self.iface.mapCanvas().extent().height()/2)
        mapFrame.setExtent(newMapFrameExtent)
        mapFrame.setMapRotation(self.canvas.rotation())
        mapFrame.redraw()

        #CURSOR
        mapFrameCursor = sip.cast(myLayout.itemById('CAMERA'),core.QgsLayoutItemPicture)
        mapFrameCursor.setPicturePath(os.path.join(os.path.dirname(__file__),'res', 'camera.svg'))
        mapFrameCursor.setItemRotation(head+self.canvas.rotation(), adjustPosition=True)

        #NORTH
        mapFrameNorth = sip.cast(myLayout.itemById('NORTH'),core.QgsLayoutItemPicture)
        mapFrameNorth.setPicturePath(os.path.join(os.path.dirname(__file__),'res', 'NorthArrow_01.svg'))
        mapFrameNorth.setPictureRotation(self.canvas.rotation())

        #STREETVIEW AND GM PICS
        if self.view.SV.isHidden():
            LargePic = os.path.join(os.path.dirname(__file__),'tmp', 'tmpBE.png')
            SmallPic = os.path.join(os.path.dirname(__file__),'tmp', 'tmpSV.png')
        else:
            LargePic = os.path.join(os.path.dirname(__file__),'tmp', 'tmpSV.png')
            SmallPic = os.path.join(os.path.dirname(__file__),'tmp', 'tmpBE.png')

        SVFrame = sip.cast(myLayout.itemById('LARGE'),core.QgsLayoutItemPicture)
        SVFrame.setPicturePath(LargePic)
        BEFrame = sip.cast(myLayout.itemById('SMALL'),core.QgsLayoutItemPicture)
        BEFrame.setPicturePath(SmallPic)

        #DESCRIPTION
        DescFrame = sip.cast(myLayout.itemById('DESC'),core.QgsLayoutItemLabel)
        info = self.snapshotOutput.getGeolocationInfo()
        DescFrame.setText("LAT: %s\nLON: %s\nHEAD: %s\nADDRESS:\n%s" % (info['lat'], info['lon'], head, info['address']))
        workDir = core.QgsProject.instance().readPath("./")
        fileName, filter = QtWidgets.QFileDialog().getSaveFileName(None,"Save pdf", workDir, "*.pdf");
        if fileName:
            if QtCore.QFileInfo(fileName).suffix() != "pdf":
                fileName += ".pdf"
            exporter = core.QgsLayoutExporter(myLayout)
            exporter.exportToPdf(fileName,core.QgsLayoutExporter.PdfExportSettings())
Esempio n. 26
0
 def nearest(self, rect, count):
     results = self.qsi.nearestNeighbor(qc.QgsPointXY(rect[0], rect[2]),
                                        count)
     return results
Esempio n. 27
0
 def zoomToFeatureFunc(self):
     featureBox = self.selectedFeature.geometry().boundingBox()
     p1 = self.transformToCurrentSRS(core.QgsPointXY(featureBox.xMinimum(),featureBox.yMinimum()),self.selectedLayer.crs())
     p2 = self.transformToCurrentSRS(core.QgsPointXY(featureBox.xMaximum(),featureBox.yMaximum()),self.selectedLayer.crs())
     self.mapCanvas.setExtent(core.QgsRectangle(p1.x(),p1.y(),p2.x(),p2.y()))
     self.mapCanvas.refresh()
Esempio n. 28
0
 def setCoordinate(self, x, y):
     self.resetRubberBand()
     self.rubberBand.addPoint(core.QgsPointXY(float(x), float(y)))
     iface.mapCanvas().refresh()
Esempio n. 29
0
 def zoomToLayerFunc(self):
     layerBox = self.selectedLayer.extent()
     p1 = self.transformToCurrentSRS(core.QgsPointXY(layerBox.xMinimum(),layerBox.yMinimum()),self.selectedLayer.crs())
     p2 = self.transformToCurrentSRS(core.QgsPointXY(layerBox.xMaximum(),layerBox.yMaximum()),self.selectedLayer.crs())
     self.mapCanvas.setExtent(core.QgsRectangle(p1.x(),p1.y(),p2.x(),p2.y()))
     self.mapCanvas.refresh()
Esempio n. 30
0
    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)