-
-
Notifications
You must be signed in to change notification settings - Fork 3k
/
QGisLayers.py
129 lines (106 loc) · 4.3 KB
/
QGisLayers.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
from qgis.core import *
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4 import QtCore, QtGui
from os import path
from sextante.core.SextanteConfig import SextanteConfig
class QGisLayers:
ALL_TYPES = -1
iface = None;
@staticmethod
def getRasterLayers():
layers = QGisLayers.iface.legendInterface().layers()
raster = list()
for layer in layers:
if layer.type() == layer.RasterLayer:
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:
vector.append(layer)
return vector
@staticmethod
def getTables():
layers = QGisLayers.iface.legendInterface().layers()
tables = list()
for layer in layers:
if layer.type() == layer.VectorLayer :
uri = str(layer.dataProvider().dataSourceUri())
if (uri.endswith("shp")):
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()
try:
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:
QtGui.QMessageBox.critical(None, "Error", "Could not load layer: " + str(layer))
except Exception, e:
QtGui.QMessageBox.critical(None, "Error", "Could not load layer: " + str(layer))
finally:
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):
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 is not opened, we open it
layer = QgsVectorLayer(uri, uri , 'ogr')
if layer.isValid():
return layer
layer = QgsRasterLayer(uri, uri)
if layer.isValid():
return layer