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
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
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)
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
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
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
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
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
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)