mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-27 00:33:48 -05:00
155 lines
5.5 KiB
Python
155 lines
5.5 KiB
Python
from qgis.core import *
|
|
from PyQt4.QtCore import *
|
|
from PyQt4.QtGui import *
|
|
from PyQt4 import QtGui
|
|
from os import path
|
|
from sextante.core.SextanteConfig import SextanteConfig
|
|
|
|
class QGisLayers:
|
|
'''This class contains method to communicate SEXTANTE with the QGIS interface,
|
|
mostly for retrieving layers and adding new ones to the QGIS canvas'''
|
|
|
|
ALL_TYPES = -1
|
|
iface = None;
|
|
|
|
@staticmethod
|
|
def getRasterLayers():
|
|
layers = QGisLayers.iface.legendInterface().layers()
|
|
raster = list()
|
|
|
|
for layer in layers:
|
|
if layer.type() == layer.RasterLayer:
|
|
if layer.usesProvider() and layer.providerKey() == 'gdal':#only gdal file-based layers
|
|
raster.append(layer)
|
|
return raster
|
|
|
|
@staticmethod
|
|
def getVectorLayers(shapetype=-1):
|
|
layers = QGisLayers.iface.legendInterface().layers()
|
|
vector = list()
|
|
for layer in layers:
|
|
if layer.type() == layer.VectorLayer:
|
|
if shapetype == QGisLayers.ALL_TYPES or layer.geometryType() == shapetype:
|
|
uri = unicode(layer.source())
|
|
if not uri.endswith("csv") and not uri.endswith("dbf"):
|
|
vector.append(layer)
|
|
return vector
|
|
|
|
@staticmethod
|
|
def getAllLayers():
|
|
layers = []
|
|
layers += QGisLayers.getRasterLayers();
|
|
layers += QGisLayers.getVectorLayers();
|
|
return layers
|
|
|
|
@staticmethod
|
|
def getTables():
|
|
layers = QGisLayers.iface.legendInterface().layers()
|
|
tables = list()
|
|
for layer in layers:
|
|
if layer.type() == layer.VectorLayer :
|
|
uri = unicode(layer.source())
|
|
if uri.endswith("csv") or uri.endswith("dbf"):
|
|
tables.append(layer)
|
|
return tables
|
|
|
|
@staticmethod
|
|
def setInterface(iface):
|
|
QGisLayers.iface = iface
|
|
|
|
|
|
@staticmethod
|
|
def loadList(layers):
|
|
for layer in layers:
|
|
QGisLayers.load(layer)
|
|
|
|
@staticmethod
|
|
def load(layer, name = None, crs = None, style = None):
|
|
if layer == None:
|
|
return
|
|
prjSetting = None
|
|
settings = QSettings()
|
|
if crs != None:
|
|
prjSetting = settings.value("/Projections/defaultBehaviour")
|
|
settings.setValue("/Projections/defaultBehaviour", QVariant(""))
|
|
if name == None:
|
|
name = path.split(layer)[1]
|
|
qgslayer = QgsVectorLayer(layer, name , 'ogr')
|
|
if qgslayer.isValid():
|
|
if crs != None:
|
|
qgslayer.setCrs(crs,False)
|
|
if style == None:
|
|
if qgslayer.geometryType == 0:
|
|
style = SextanteConfig.getSetting(SextanteConfig.VECTOR_POINT_STYLE)
|
|
elif qgslayer.geometryType == 1:
|
|
style = SextanteConfig.getSetting(SextanteConfig.VECTOR_LINE_STYLE)
|
|
else:
|
|
style = SextanteConfig.getSetting(SextanteConfig.VECTOR_POLYGON_STYLE)
|
|
qgslayer.loadNamedStyle(style)
|
|
QgsMapLayerRegistry.instance().addMapLayer(qgslayer)
|
|
else:
|
|
qgslayer = QgsRasterLayer(layer, name)
|
|
if qgslayer.isValid():
|
|
if crs != None:
|
|
qgslayer.setCrs(crs,False)
|
|
if style == None:
|
|
style = SextanteConfig.getSetting(SextanteConfig.RASTER_STYLE)
|
|
qgslayer.loadNamedStyle(style)
|
|
QgsMapLayerRegistry.instance().addMapLayer(qgslayer)
|
|
QGisLayers.iface.legendInterface().refreshLayerSymbology(qgslayer)
|
|
else:
|
|
if prjSetting:
|
|
settings.setValue("/Projections/defaultBehaviour", prjSetting)
|
|
raise RuntimeError("Could not load layer: " + unicode(layer)
|
|
+"\nCheck the SEXTANTE log to look for errors in algorithm execution")
|
|
if prjSetting:
|
|
settings.setValue("/Projections/defaultBehaviour", prjSetting)
|
|
|
|
|
|
@staticmethod
|
|
def loadFromDict(layersdict, crs):
|
|
for name in layersdict.keys():
|
|
QGisLayers.load(layersdict[name], name, crs)
|
|
|
|
|
|
@staticmethod
|
|
def getObjectFromUri(uri, forceLoad = True):
|
|
if uri is None:
|
|
return None
|
|
layers = QGisLayers.getRasterLayers()
|
|
for layer in layers:
|
|
if layer.source() == uri:
|
|
return layer
|
|
layers = QGisLayers.getVectorLayers()
|
|
for layer in layers:
|
|
if layer.source() == uri:
|
|
return layer
|
|
if forceLoad:
|
|
settings = QSettings()
|
|
prjSetting = settings.value("/Projections/defaultBehaviour")
|
|
settings.setValue("/Projections/defaultBehaviour", QVariant(""))
|
|
#if is not opened, we open it
|
|
layer = QgsVectorLayer(uri, uri , 'ogr')
|
|
if layer.isValid():
|
|
if prjSetting:
|
|
settings.setValue("/Projections/defaultBehaviour", prjSetting)
|
|
return layer
|
|
layer = QgsRasterLayer(uri, uri)
|
|
if layer.isValid():
|
|
if prjSetting:
|
|
settings.setValue("/Projections/defaultBehaviour", prjSetting)
|
|
return layer
|
|
if prjSetting:
|
|
settings.setValue("/Projections/defaultBehaviour", prjSetting)
|
|
else:
|
|
return None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|