Пример #1
0
 def __init__(self, parent):
     QtCore.QObject.__init__(self, parent)
     self.positionSource = Location.QGeoPositionInfoSource.createDefaultSource(self)
     if self.positionSource == None:
         self.valid = False 
         return
     self.positionSource.positionUpdated.connect(self.locationUpdated)
     self.currentPosition = QGeoCoordinate()
     self.positionSource.startUpdates()
     self.coordinate = QGeoCoordinate()
     self.compass = QCompass(self)
     self.compass.readingChanged.connect(self.compassReadingChanged)
     self.compass.setDataRate(10)
     self.compass.start()
     self.compassAzimuth = 0
     self.gpsactive = False
Пример #2
0
    def setupUi(self):

        scene = QGraphicsScene(self)
        self.view = QGraphicsView(scene, self)
        self.view.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        self.view.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        self.view.setVisible(True)
        self.view.setInteractive(True)

        self.createPixmapIcon()

        self.mapWidget = MapWidget(self.mapManager)
        scene.addItem(self.mapWidget)
        self.mapWidget.setCenter(QGeoCoordinate(-8.1, -34.95))
        self.mapWidget.setZoomLevel(5)

        #...
        self.slider = QSlider(Qt.Vertical, self)
        self.slider.setTickInterval(1)
        self.slider.setTickPosition(QSlider.TicksBothSides)
        self.slider.setMaximum(self.mapManager.maximumZoomLevel())
        self.slider.setMinimum(self.mapManager.minimumZoomLevel())

        self.slider.valueChanged[int].connect(self.sliderValueChanged)
        self.mapWidget.zoomLevelChanged[float].connect(self.mapZoomLevelChanged)

        mapControlLayout = QVBoxLayout()

        self.mapWidget.mapTypeChanged.connect(self.mapTypeChanged)

        for mapType in self.mapWidget.supportedMapTypes():
            radio = QRadioButton(self)
            if mapType == QGraphicsGeoMap.StreetMap:
                radio.setText('Street')
            elif mapType == QGraphicsGeoMap.SatelliteMapDay:
                radio.setText('Sattelite')
            elif mapType == QGraphicsGeoMap.SatelliteMapNight:
                radio.setText('Sattelite - Night')
            elif mapType == QGraphicsGeoMap.TerrainMap:
                radio.setText('Terrain')

            if mapType == self.mapWidget.mapType():
                radio.setChecked(True)

            radio.toggled[bool].connect(self.mapTypeToggled)

            self.mapControlButtons.append(radio)
            self.mapControlTypes.append(mapType)
            mapControlLayout.addWidget(radio)

        self.latitudeEdit = QLineEdit()
        self.longitudeEdit = QLineEdit()

        formLayout = QFormLayout()
        formLayout.addRow('Latitude', self.latitudeEdit)
        formLayout.addRow('Longitude', self.longitudeEdit)

        self.captureCoordsButton = QToolButton()
        self.captureCoordsButton.setText('Capture coordinates')
        self.captureCoordsButton.setCheckable(True)

        self.captureCoordsButton.toggled[bool].connect(
                self.mapWidget.setMouseClickCoordQuery)
        self.mapWidget.coordQueryResult.connect(self.updateCoords)

        self.setCoordsButton = QPushButton()
        self.setCoordsButton.setText('Set coordinates')
        self.setCoordsButton.clicked.connect(self.setCoordsClicked)

        buttonLayout = QHBoxLayout()

        buttonLayout.addWidget(self.captureCoordsButton)
        buttonLayout.addWidget(self.setCoordsButton)

        coordControlLayout = QVBoxLayout()
        coordControlLayout.addLayout(formLayout)
        coordControlLayout.addLayout(buttonLayout)

        widget = QWidget(self)
        layout = QGridLayout()
        layout.setRowStretch(0, 1)
        layout.setRowStretch(1, 0)

        topLayout = QGridLayout()
        bottomLayout = QGridLayout()

        topLayout.setColumnStretch(0, 0)
        topLayout.setColumnStretch(1, 1)

        bottomLayout.setColumnStretch(0, 0)
        bottomLayout.setColumnStretch(1, 1)

        topLayout.addWidget(self.slider, 0, 0)
        topLayout.addWidget(self.view, 0, 1)

        bottomLayout.addLayout(mapControlLayout, 0, 0)
        bottomLayout.addLayout(coordControlLayout, 0, 1)

        layout.addLayout(topLayout, 0, 0)
        layout.addLayout(bottomLayout, 1, 0)

        self.layout = layout
        widget.setLayout(layout)
        self.setCentralWidget(widget)

        self.view.setContextMenuPolicy(Qt.CustomContextMenu)

        self.view.customContextMenuRequested.connect(self.customContextMenuRequest)
Пример #3
0
 def setCoordsClicked(self):
     lat = float(self.latitudeEdit.text())
     lon = float(self.longitudeEdit.text())
     self.mapWidget.setCenter(QGeoCoordinate(lat, lon))
Пример #4
0
class GPSCompass(QtCore.QObject):
    '''GPSCompass gives distance and bearing to a gps position from the current gps position'''
    def __init__(self, parent):
        QtCore.QObject.__init__(self, parent)
        self.positionSource = Location.QGeoPositionInfoSource.createDefaultSource(self)
        if self.positionSource == None:
            self.valid = False 
            return
        self.positionSource.positionUpdated.connect(self.locationUpdated)
        self.currentPosition = QGeoCoordinate()
        self.positionSource.startUpdates()
        self.coordinate = QGeoCoordinate()
        self.compass = QCompass(self)
        self.compass.readingChanged.connect(self.compassReadingChanged)
        self.compass.setDataRate(10)
        self.compass.start()
        self.compassAzimuth = 0
        self.gpsactive = False

    location_changed = QtCore.Signal()
    bearing_changed = QtCore.Signal()
    destination_changed = QtCore.Signal()
    gps_activated = QtCore.Signal()

    def __del__(self):
        self.compass.stop()
        self.positionSource.stopUpdates()

    @QtCore.Slot()
    def compassReadingChanged(self):
        reading = self.compass.reading()
        if reading:
            self.compassAzimuth = reading.azimuth()
            self.bearing_changed.emit()

    @QtCore.Slot(float, float)
    def setDestination(self, lat, lon):
        self.coordinate = QGeoCoordinate(lat, lon)
        self.destination_changed.emit()

    def locationUpdated(self, update):
        self.currentPosition = update.coordinate()
        if not self.gpsactive:
            self.gpsactive = True
            self.gps_activated.emit()

        self.location_changed.emit()
        self.bearing_changed.emit()

    def _distance(self):
        if not self.currentPosition.isValid() or not self.coordinate.isValid():
            return 0
        return self.currentPosition.distanceTo(self.coordinate)

    def _bearing(self):
        if not self.currentPosition.isValid() or not self.coordinate.isValid():
            return 0
        return ((360 - self.compassAzimuth) - (360 - self.currentPosition.azimuthTo(self.coordinate)))

    def _destinationLatitude(self):
        return self.coordinate.latitude()

    def _destinationLongitude(self):
        return self.coordinate.longitude()

    def _latitude(self):
        return self.currentPosition.latitude()

    def _longitude(self):
        return self.currentPosition.longitude()

    def _gpsfix(self):
        return self.gpsactive

    distance = QtCore.Property(int, _distance, notify=location_changed)
    bearing = QtCore.Property(int, _bearing, notify=bearing_changed)
    latitude = QtCore.Property(float, _latitude, notify=location_changed)
    longitude = QtCore.Property(float, _longitude, notify=location_changed)
    dest_latitude = QtCore.Property(float, _destinationLatitude, notify=destination_changed)
    dest_longitude = QtCore.Property(float, _destinationLongitude, notify=destination_changed)
    gps = QtCore.Property(bool, _gpsfix, notify=gps_activated)
Пример #5
0
 def setDestination(self, lat, lon):
     self.coordinate = QGeoCoordinate(lat, lon)
     self.destination_changed.emit()