Esempio n. 1
0
	def initGui(self):
		""" Initialize plugin's UI """

		self.initLogging()
		self.recording=False
		self.loadPlugins()
		self.loadConfiguration()
		self.rubberBand=None
		self.lastPosition=None
		self.timer=None
		self.previousPaths=[] #previews of previously recorded paths
		
		self.gpsDaemon=GpsDaemon(self, self)
		self.canvas=self.iface.mapCanvas()
		
		self.gatherer=None
		self.dockWidget=None
		self.dockWidget_simple=None
    
		self.dockWidget=DockWidget(self)
		self.dockWidget_simple=DockWidget_simple(self)
		
		self.actionDockWidget=QAction("Show Gatherer dock widget",self.iface.mainWindow())
		self.actionDockWidget.setCheckable(True)
		QObject.connect(self.actionDockWidget, SIGNAL("triggered()"), self.showHideDockWidget)
		self.iface.addPluginToMenu("Qgis-&mapper", self.actionDockWidget)
		QObject.connect(self.dockWidget, SIGNAL("visibilityChanged(bool)"), lambda : self.__dockwidgetVisibilityChanged(0))
		QObject.connect(self.dockWidget_simple, SIGNAL("visibilityChanged(bool)"), lambda : self.__dockwidgetVisibilityChanged(1))
		
		SourcePlugins.initializeUI(self.dockWidget.dataInputPlugins_tabWidget)
		
		self.curDockWidget=None
		self.showInterface(self.interface_simple)
		
		self.canvas=self.iface.mapCanvas()
		self.positionMarker=PositionMarker(self.canvas)
		self.connect(self.gpsDaemon, SIGNAL("newTrackPoint(PyQt_PyObject)"), self.gotNewTrackPoint)
Esempio n. 2
0
 def __init__(self,projectfile,MainWidget):
     QtWidgets.QMainWindow.__init__(self)
     if os.name == 'nt':
         ffmpeg = os.path.dirname(__file__)[0:-18]+'/Video_UAV_Tracker/FFMPEG/ffmpeg.exe'
         versione = 'ffmpeg.exe'
     else:
         ffmpeg = os.path.dirname(__file__)+'/FFMPEG/./ffmpeg'
         versione = 'ffmpeg'
     if os.path.exists(ffmpeg) == True:
         self.setupUi(self)
         self.setWindowFlags(Qt.WindowStaysOnTopHint)
         self.Main = MainWidget
         self.projectfile = projectfile
         with open(self.projectfile,'r') as File:
                 for line in File:
                     if line[0:19] == 'Video file location':
                         self.videoFile = line.split('=')[-1][1:-1]
                     elif line[0:23] == 'Video start at msecond:':
                         self.fps = (1 / (float(line.split()[7]))) * 1000
                         self.StartMsecond = int(line.split()[4])
                     elif line[0:4] == 'DB =':
                         DB = line.split('=')[-1][1:-1]
                         if DB == 'None':
                             self.DB = None
                         else:
                             self.DB = DB
                         break            
         self.pushButton_3.setCheckable(True)
         self.EnableMapTool = False
         self.ExtractTool = 0
         self.dockWidget_4.hide()
         self.GPXList = []
         self.positionMarker=PositionMarker(self.Main.iface.mapCanvas())               
         self.muteButton.setIcon(
                     self.style().standardIcon(QStyle.SP_MediaVolume))
         self.playButton.setIcon(
                     self.style().standardIcon(QStyle.SP_MediaPause))
         self.player = QMediaPlayer()
         self.player.setVideoOutput(self.video_frame)  
         self.playButton.clicked.connect(self.PlayPause)
         self.muteButton.clicked.connect(self.MuteUnmute)
         self.toolButton_11.clicked.connect(self.SkipBackward)
         self.toolButton_12.clicked.connect(self.SkipForward)
         self.SkipBacktoolButton_8.clicked.connect(self.BackwardFrame)
         self.SkipFortoolButton_9.clicked.connect(self.ForwardFrame)
         self.toolButton_4.clicked.connect(self.ExtractToolbar)
         self.toolButton_5.clicked.connect(self.close)   
         self.pushButtonCut_2.clicked.connect(self.ExtractCommand)
         self.pushButtonCutA_6.clicked.connect(self.ExtractFromA)
         self.pushButtonCutB_6.clicked.connect(self.ExtractToB)
         self.pushButton_5.clicked.connect(self.CancelVertex)  
         self.progressBar.hide()     
         self.Main.pushButton_2.hide()
         self.Main.pushButton_8.hide()
         self.Main.groupBox.show()
         self.Main.groupBox_4.hide()
         self.ExtractA = False
         self.ExtractB = False
         self.ExtractedDirectory = None 
         self.pushButtonCut_2.setEnabled(False)
         self.toolButton_6.setEnabled(False)
         self.LoadGPXVideoFromPrj(self.projectfile)  
     else:
         ret = QMessageBox.warning(self, "Warning", 'missing ffmpeg binaries, please download it from https://github.com/sagost/VideoUavTracker/blob/master/FFMPEG/'+versione+' and paste it in /.qgis3/python/plugins/Video_UAV_Tracker/FFMPEG/ ', QMessageBox.Ok)
         self.close()        
Esempio n. 3
0
    def OpenButton(self):
        if self.Close == 1:
            if self.positionMarker != None:
                self.iface.mapCanvas().scene().removeItem(self.positionMarker)
                self.positionMarker = None
            self.Close = 0
            self.ui.replay_mapTool_pushButton.setChecked(False)
            self.ui.sourceLoad_pushButton.setText('Open...')
            self.createLayer = 0
            self.timer.stop()
            ##self.timer2.stop()
            self.media_obj.stop()
            self.iface.mapCanvas().unsetMapTool(self.mapTool)
            self.close()

        else:

            self.path = QtGui.QFileDialog.getOpenFileName(
                self, self.tr("Select Video files"))
            self.csvFile = open(self.path + '.csv', "rb")
            Filereader = csv.DictReader(self.csvFile)
            self.CSVLayer = QgsVectorLayer("LineString", "GPS Tracking",
                                           "memory")

            self.latt = []
            self.lonn = []
            self.timeh = []
            self.timem = []
            self.times = []
            i = 0
            for row in Filereader:
                self.latt.append(float(row['lon']))
                self.lonn.append(float(row['lat']))
                if row['time_h'] != '':
                    self.timeh.append(int(row['time_h']))
                    self.timem.append(int(row['time_m']))
                    self.times.append(int(row['time_s']))

            #create tracker layer (line layer)
            for i in xrange(0, len(self.latt) - 1, 1):
                point_start = QgsPoint(self.latt[i], self.lonn[i])
                point_end = QgsPoint(self.latt[i + 1], self.lonn[i + 1])
                line = QgsGeometry.fromPolyline([point_start, point_end])
                self.pr = self.CSVLayer.dataProvider()
                afeature = QgsFeature()
                afeature.setGeometry(
                    QgsGeometry.fromPolyline([point_start, point_end]))
                self.pr.addFeatures([afeature])
                self.CSVLayer.updateExtents()
            QgsMapLayerRegistry.instance().addMapLayers([self.CSVLayer])

            SelectLayer, ok = QInputDialog.getItem(
                self.iface.mainWindow(), "Layer chooser", "Choose point layer",
                ('Default point layer', 'Creat new point layer',
                 'Load existent point layer'))
            if SelectLayer == 'Load existent point layer':
                self.newLayerPath = QtGui.QFileDialog.getOpenFileName()
                if not self.newLayerPath is None:
                    name = self.newLayerPath.split("/")[-1][0:-4]
                    self.vl = QgsVectorLayer(self.newLayerPath, name, "ogr")
                    self.pr = self.vl.dataProvider()
                    fields = self.pr.fields()
                    field_names = [field.name() for field in fields]
                    f = "Image link"
                    fnd = self.vl.fieldNameIndex(f)
                    fn = field_names[fnd]
                    if not fn == f:
                        self.pr.addAttributes(
                            [QgsField("Image link", QVariant.String)])

                    QgsMapLayerRegistry.instance().addMapLayer(self.CSVLayer)
                    QgsMapLayerRegistry.instance().addMapLayer(self.vl)

            elif SelectLayer == 'Default point layer':
                self.vl = QgsVectorLayer("Point?crs=epsg:4326&index=yes",
                                         "point", "memory")
                self.pr = self.vl.dataProvider()
                self.pr.addAttributes([
                    QgsField('id', QVariant.Int),
                    QgsField('Name', QVariant.String),
                    QgsField('Description', QVariant.String),
                    QgsField('Type', QVariant.String),
                    QgsField("Lon", QVariant.String),
                    QgsField("Lat", QVariant.String),
                    QgsField('East UTM', QVariant.String),
                    QgsField('North UTM', QVariant.String),
                    QgsField('Image link', QVariant.String)
                ])

                # update layer's extent
                self.vl.updateExtents()
                QgsMapLayerRegistry.instance().addMapLayer(self.CSVLayer)
                QgsMapLayerRegistry.instance().addMapLayers([self.vl])
                self.createLayer = 1

            else:
                # Creat new point layer by user
                self.createLayer = 2
                self.vl = QgsVectorLayer("Point?crs=epsg:4326&index=yes",
                                         "point", "memory")
                self.pr = self.vl.dataProvider()
                # table manager dialog
                self.dialoga = TableManager(self.iface, self.vl, self.CSVLayer)
                self.dialoga.exec_()

            #set point label
            palyr = QgsPalLayerSettings()
            palyr.readFromLayer(self.vl)
            palyr.enabled = True
            palyr.fieldName = 'id'
            palyr.placement = QgsPalLayerSettings.Upright
            palyr.setDataDefinedProperty(QgsPalLayerSettings.Size, True, True,
                                         '14', '')
            palyr.writeToLayer(self.vl)

            if self.positionMarker == None:
                self.positionMarker = PositionMarker(self.iface.mapCanvas())

            self.media_src = Phonon.MediaSource(self.path)
            self.media_obj = Phonon.MediaObject(self)
            self.media_obj.setCurrentSource(self.media_src)
            Phonon.createPath(self.media_obj, self.videoWidget)

            # set audio
            ##            audio_out = Phonon.AudioOutput(Phonon.VideoCategory, self)
            ##            Phonon.createPath(self.media_obj, audio_out)

            self.ui.video_widget.resizeEvent = self.Resize()
            self.media_obj.setTickInterval(100)
            self.timer = QtCore.QTimer()
            QtCore.QObject.connect(self.timer, QtCore.SIGNAL("timeout()"),
                                   self.Timer)

            self.PlayPuase = 1
            self.ui.sourceLoad_pushButton.setText('Close')
            self.Close = 1  #load file selector
            self.media_obj.play()  #phonon play
            self.timer.start(1000)

            self.ui.replayPlay_pushButton.setEnabled(True)
            self.ui.addpoint_button.setEnabled(True)
Esempio n. 4
0
    def Connect(self):

        try:

            self.positionMarker = PositionMarker(self.iface.mapCanvas())
            self.PositionMarker = True
            portName = self.comboBox.currentText()
            self.ser = serial.Serial(portName, 38400)
            layername = self.course_comboBox.itemData(
                self.course_comboBox.currentIndex())
            RouteLayer = QgsMapLayerRegistry.instance().mapLayer(layername)
            RouteLayer.selectAll()
            feats = RouteLayer.selectedFeatures()
            RouteLayer.removeSelection()
            feat = feats[0]
            geom = feat.geometry()
            self.pts = geom.asPolyline()
            SourceIntCRS = int(RouteLayer.crs().authid().split(':')[1])

            if SourceIntCRS != 4326:
                SourceIntCRS = int(RouteLayer.crs().authid().split(':')[1])
                SourceCRS = QgsCoordinateReferenceSystem(SourceIntCRS)
                DestCRS = QgsCoordinateReferenceSystem(4326)
                xformRouteLayer = QgsCoordinateTransform(SourceCRS, DestCRS)
                for i in xrange(len(self.pts)):
                    x = self.pts[i][0]
                    y = self.pts[i][
                        1]  #if track layer is not in WGS84 Geographic every coordinate is transformed
                    TmpPoint = QgsPoint(x, y)
                    Tmp2Point = xformRouteLayer.transform(TmpPoint)
                    self.pts[i] = Tmp2Point

            self.TrackLayer = QgsVectorLayer("Point?crs=epsg:4326&index=yes",
                                             "Flight_track", "memory")
            self.TrackLayerProvider = self.TrackLayer.dataProvider()
            self.TrackLayerProvider.addAttributes([
                QgsField("id", QtCore.QVariant.Int),
                QgsField('Time', QtCore.QVariant.String),
                QgsField('Ele', QtCore.QVariant.String),
            ])

            QgsMapLayerRegistry.instance().addMapLayer(self.TrackLayer)
            symbols = self.TrackLayer.rendererV2().symbols()
            symbol = symbols[0]
            symbol.setColor(QtGui.QColor(0, 255, 0))
            self.iface.legendInterface().refreshLayerSymbology(self.TrackLayer)

            if self.lcdNumberWpt.value() == 0:
                self.lcdNumberWpt.display(1)

            elif self.lcdNumberWpt.value() > len(self.pts):
                self.lcdNumberWpt.display(1)

            self.InRouteTolerance = float(
                self.DTrack_spinBox.value()
            )  #if we are distant from route less than this value path become green, otherwise red
            self.CompassTolerance = self.DCompass_spinBox.value(
            )  #if compass to next wpt confront to actual compass diverge less than this value projection of direction become green, otherwise red
            self.WptArrivedTolerance = float(
                self.DWpt_spinBox.value()
            )  #if we pass near a wpt less than this value (in meters) the program will set the next wpt
            self.EleTolerance = float(
                self.DHeightspinBox.value()
            )  #if our elevation diverge from planned elevation more than this value our cursor will be red, otherwise green

            canvas = self.iface.mapCanvas()
            mapRenderer = canvas.mapRenderer()
            crsSrc = QgsCoordinateReferenceSystem(4326)  # NMEA is in WGS 84
            crsDest = mapRenderer.destinationCrs()

            self.backxform = QgsCoordinateTransform(crsDest, crsSrc)

            self.xform = QgsCoordinateTransform(
                crsSrc, crsDest)  #usage: xform.transform(QgsPoint)
            self.AdjNxtWpt()
            self.timer.start(1000)

        except:
            pass