コード例 #1
0
    def _calc_north(self):
        extent = self.canvas.extent()
        if self.canvas.layerCount() == 0 or extent.isEmpty():
            return 0

        outcrs = self.canvas.mapSettings().destinationCrs()

        if outcrs.isValid() and not outcrs.geographicFlag():
            crs = QgsCoordinateReferenceSystem()
            crs.createFromOgcWmsCrs("EPSG:4326")

            transform = QgsCoordinateTransform(outcrs, crs)

            p1 = QgsPoint(extent.center())
            p2 = QgsPoint(p1.x(), p1.y() + extent.height() * 0.25)

            try:
                pp1 = transform.transform(p1)
                pp2 = transform.transform(p2)
            except QgsCsException:
                roam.utils.warning("North arrow. Error transforming.")
                return None

            area = QgsDistanceArea()
            area.setEllipsoid(crs.ellipsoidAcronym())
            area.setEllipsoidalMode(True)
            area.setSourceCrs(crs)
            distance, angle, _ = area.computeDistanceBearing(pp1, pp2)
            angle = math.degrees(angle)
            return angle
        else:
            return 0
コード例 #2
0
ファイル: mapwidget.py プロジェクト: loongfee/Roam
    def _calc_north(self):
        extent = self.canvas.extent()
        if self.canvas.layerCount() == 0 or extent.isEmpty():
            print "No layers or extent"
            return 0

        outcrs = self.canvas.mapSettings().destinationCrs()

        if outcrs.isValid() and not outcrs.geographicFlag():
            crs = QgsCoordinateReferenceSystem()
            crs.createFromOgcWmsCrs("EPSG:4326")

            transform = QgsCoordinateTransform(outcrs, crs)

            p1 = QgsPoint(extent.center())
            p2 = QgsPoint(p1.x(), p1.y() + extent.height() * 0.25)

            try:
                pp1 = transform.transform(p1)
                pp2 = transform.transform(p2)
            except QgsCsException:
                roam.utils.warning("North arrow. Error transforming.")
                return None

            area = QgsDistanceArea()
            area.setEllipsoid(crs.ellipsoidAcronym())
            area.setEllipsoidalMode(True)
            area.setSourceCrs(crs)
            distance, angle, _ = area.computeDistanceBearing(pp1, pp2)
            angle = math.degrees(angle)
            return angle
        else:
            return 0
コード例 #3
0
    def setLayerProperty(self, layerType, layers, prop, data):
        """
        Set properties for a list of layers
        """

        for layer in layers:

            if not layer:
                continue

            if prop == 'name':
                layer.setLayerName(str(data))

            elif prop == 'title':
                layer.setTitle(data)

            elif prop == 'abstract':
                layer.setAbstract(data)

            elif prop == 'shortname':
                newshortname = re.sub('[^A-Za-z0-9\.-]', '_', data)
                layer.setShortName(newshortname)

            elif prop == 'maxScale':
                layer.toggleScaleBasedVisibility(True)
                layer.setMaximumScale(float(data))
                layer.triggerRepaint()

            elif prop == 'minScale':
                layer.toggleScaleBasedVisibility(True)
                layer.setMinimumScale(float(data))
                layer.triggerRepaint()

            elif prop == 'crs':
                qcrs = QgsCoordinateReferenceSystem()
                qcrs.createFromOgcWmsCrs(data)
                if qcrs:
                    layer.setCrs(qcrs)
                    layer.triggerRepaint()

            elif prop == 'source|uri':
                self.setDataSource(layer, data)

            elif prop == 'encoding' and data in layer.dataProvider().availableEncodings():
                layer.setProviderEncoding(data)

            else:
                continue

        # Refresh table
        self.populateLayerTable(layerType)
コード例 #4
0
 def coordRefSys(self, mapCoordSys):
     epsg = self.epsgList[0]  # TODO: look for matching coord
     coordRefSys = QgsCoordinateReferenceSystem()
     createCrs = coordRefSys.createFromOgcWmsCrs("EPSG:%d" % epsg)
     if not createCrs:
         return None
     return coordRefSys
コード例 #5
0
 def coordRefSys(self, mapCoordSys):
     epsg = self.epsgList[0]  # TODO: look for matching coord
     coordRefSys = QgsCoordinateReferenceSystem()
     createCrs = coordRefSys.createFromOgcWmsCrs("EPSG:%d" % epsg)
     if not createCrs:
         return None
     return coordRefSys
コード例 #6
0
 def coordRefSys(self, mapCoordSys):
     epsg = self.epsgList[0]
     coordRefSys = QgsCoordinateReferenceSystem()
     if QGis.QGIS_VERSION_INT >= 10900:
         idEpsgRSGoogle = "EPSG:%d" % epsg
         createCrs = coordRefSys.createFromOgcWmsCrs(idEpsgRSGoogle)
     else:
         idEpsgRSGoogle = epsg
         createCrs = coordRefSys.createFromEpsg(idEpsgRSGoogle)
     if not createCrs:
         google_proj_def = "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 "
         google_proj_def += "+units=m +nadgrids=@null +wktext +no_defs"
         isOk = coordRefSys.createFromProj4(google_proj_def)
         if not isOk:
             return None
     return coordRefSys
コード例 #7
0
 def coordRefSys(self, mapCoordSys):
     epsg = self.epsgList[0]
     coordRefSys = QgsCoordinateReferenceSystem()
     if QGis.QGIS_VERSION_INT >= 10900:
         idEpsgRSGoogle = "EPSG:%d" % epsg
         createCrs = coordRefSys.createFromOgcWmsCrs(idEpsgRSGoogle)
     else:
         idEpsgRSGoogle = epsg
         createCrs = coordRefSys.createFromEpsg(idEpsgRSGoogle)
     if not createCrs:
         proj_def =  "+proj=tmerc +lat_0=38 +lon_0=127.5 +k=0.9996 +x_0=1000000 +y_0=2000000 +ellps=GRS80 "
         proj_def += "+towgs84=0,0,0,0,0,0,0 +units=m +no_defs"
         isOk = coordRefSys.createFromProj4(proj_def)
         if not isOk:
             return None
     return coordRefSys
コード例 #8
0
 def coordRefSys(self, mapCoordSys):
     epsg = self.epsgList[0]
     coordRefSys = QgsCoordinateReferenceSystem()
     if QGis.QGIS_VERSION_INT >= 10900:
         idEpsgRSGoogle = "EPSG:%d" % epsg
         createCrs = coordRefSys.createFromOgcWmsCrs(idEpsgRSGoogle)
     else:
         idEpsgRSGoogle = epsg
         createCrs = coordRefSys.createFromEpsg(idEpsgRSGoogle)
     if not createCrs:
         google_proj_def = "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 "
         google_proj_def += "+units=m +nadgrids=@null +wktext +no_defs"
         isOk = coordRefSys.createFromProj4(google_proj_def)
         if not isOk:
             return None
     return coordRefSys
コード例 #9
0
    def addButtonPressed(self):
        a = self.dlg.layerTree.selectedIndexes()
        lyr = a[0].data(Qt.UserRole)

        if lyr is None:
            log("lyr is none")
            return

        #get threshold
        value = self.dlg.threshold1_value.value()

        args = lyr.wmtsArgs()

        email = None
        password = None

        if self.settings.contains("password"):
            password = self.settings.value("password")
        else:
            log("Error adding layer: no password.")
            return
        if self.settings.contains("email"):
            email = self.settings.value("email")
        else:
            log("Error adding layer: no email.")
            return

        args['login'] = email
        args['request'] = 'GetCapabilities'
        args['password'] = password

        #parse the crs from urn:ogc:def:crs:EPSG::3857 to EPSG:3857
        qcrs = QgsCoordinateReferenceSystem()
        qcrs.createFromOgcWmsCrs(lyr.crs)
        crs = qcrs.authid()
        log("QGIS CRS is %s" % crs)

        url = self.wmtsGetCapabilitiesUrl()
        if url is None:
            log("AddButtonPressed: No url.")
            return

        #TODO, ideally extraTileArgs should be added here but backend cannot handle them whey they are encoded.
        #  url.addQueryItem("extraTileArgs","threshold=%s"%value)
        qgisArgs = {
            'contextualWMSLegend':
            0,
            'crs':
            crs,
            'dpimode':
            7,
            'format':
            args['format'],
            'layers':
            args['layer'],
            'styles':
            args['style'],
            'tileMatrixSet':
            args['tileMatrixSet'],
            'url':
            unicode(url.toEncoded(), "utf-8") +
            u'&extraTileArgs=threshold=%g' % value
        }
        log("QgsRasterLayer: %s" % qgisArgs)
        qgisURI = urllib.urlencode(qgisArgs)

        if (len(self.wmts.tiletypes[lyr.contentType].thresholds) > 0):
            tt = self.wmts.tiletypes[lyr.contentType]
            name = "%s%s - %s" % (value, tt.unit, lyr.simpleTitle)
        else:
            name = lyr.simpleTitle

        qgis_wmts_lyr_manual = QgsRasterLayer(qgisURI, name, 'wms')
        if qgis_wmts_lyr_manual.isValid():
            QgsMapLayerRegistry.instance().addMapLayer(qgis_wmts_lyr_manual)
        else:
            log(qgis_wmts_lyr_manual.error().message())
            QMessageBox.warning(
                self.dlg, "SCALGO Live Plugin", "Error adding layer %s" %
                qgis_wmts_lyr_manual.error().message(), QMessageBox.Close,
                QMessageBox.Close)