Skip to content

Commit 5ad61f5

Browse files
committed
Merge remote-tracking branch 'origin/master' into new_vector_api
2 parents 985468e + 994dc1c commit 5ad61f5

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+563
-291
lines changed

cmake/SIPMacros.cmake

+1-1
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ MACRO(ADD_SIP_PYTHON_MODULE MODULE_NAME MODULE_SIP)
105105
OUTPUT ${_sip_output_files}
106106
COMMAND ${CMAKE_COMMAND} -E echo ${message}
107107
COMMAND ${CMAKE_COMMAND} -E touch ${_sip_output_files}
108-
COMMAND ${SIP_BINARY_PATH} ${_sip_tags} -e ${_sip_x} ${SIP_EXTRA_OPTIONS} -j ${SIP_CONCAT_PARTS} -c ${CMAKE_CURRENT_BINARY_DIR}/${_module_path} ${_sip_includes} ${_abs_module_sip}
108+
COMMAND ${SIP_BINARY_PATH} ${_sip_tags} -w -e ${_sip_x} ${SIP_EXTRA_OPTIONS} -j ${SIP_CONCAT_PARTS} -c ${CMAKE_CURRENT_BINARY_DIR}/${_module_path} ${_sip_includes} ${_abs_module_sip}
109109
DEPENDS ${_abs_module_sip} ${SIP_EXTRA_FILES_DEPEND}
110110
)
111111
# not sure if type MODULE could be uses anywhere, limit to cygwin for now

python/core/qgsmessagelog.sip

+9-2
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,15 @@ class QgsMessageLog
77
public:
88
static QgsMessageLog *instance();
99

10+
enum MessageLevel
11+
{
12+
INFO = 0,
13+
WARNING = 1,
14+
CRITICAL = 2
15+
};
16+
1017
//! add a message to the instance (and create it if necessary)
11-
static void logMessage( QString message, QString tag = QString::null, int level = 0 );
18+
static void logMessage( QString message, QString tag = QString::null, MessageLevel level = WARNING);
1219

1320
signals:
1421
void messageReceived( QString message, QString tag, int level );
@@ -34,5 +41,5 @@ class QgsMessageLogConsole : QObject
3441
QgsMessageLogConsole();
3542

3643
public slots:
37-
void logMessage( QString message, QString tag, int level );
44+
void logMessage( QString message, QString tag, QgsMessageLog::MessageLevel level );
3845
};

python/plugins/GdalTools/tools/GdalTools_utils.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,8 @@
3535
from qgis.core import *
3636
from qgis.gui import *
3737

38-
from osgeo import gdal
38+
from osgeo import gdal, ogr
3939
from osgeo.gdalconst import *
40-
from osgeo import ogr
4140

4241
import os
4342
# to know the os

python/plugins/fTools/tools/doIntersectLines.py

+33-35
Original file line numberDiff line numberDiff line change
@@ -111,69 +111,67 @@ def outFile(self):
111111
self.outShape.setText( QString( self.shapefileName ) )
112112

113113
def compute(self, line1, line2, field1, field2, outPath, progressBar):
114+
114115
layer1 = ftools_utils.getVectorLayerByName(line1)
115-
layer2 = ftools_utils.getVectorLayerByName(line2)
116116
provider1 = layer1.dataProvider()
117-
provider2 = layer2.dataProvider()
118117
allAttrs = provider1.attributeIndexes()
119-
provider1.select(allAttrs)
120-
allAttrs = provider2.attributeIndexes()
121-
provider2.select(allAttrs)
122118
fieldList = ftools_utils.getFieldList(layer1)
123119
index1 = provider1.fieldNameIndex(field1)
124120
field1 = fieldList[index1]
125121
field1.setName(unicode(field1.name()) + "_1")
122+
123+
layer2 = ftools_utils.getVectorLayerByName(line2)
124+
provider2 = layer2.dataProvider()
125+
allAttrs = provider2.attributeIndexes()
126126
fieldList = ftools_utils.getFieldList(layer2)
127127
index2 = provider2.fieldNameIndex(field2)
128128
field2 = fieldList[index2]
129129
field2.setName(unicode(field2.name()) + "_2")
130+
130131
fieldList = {0:field1, 1:field2}
131132
sRs = provider1.crs()
132133
check = QFile(self.shapefileName)
133134
if check.exists():
134135
if not QgsVectorFileWriter.deleteShapeFile(self.shapefileName):
135136
return
137+
136138
writer = QgsVectorFileWriter(self.shapefileName, self.encoding, fieldList, QGis.WKBPoint, sRs)
137139
#writer = QgsVectorFileWriter(outPath, "UTF-8", fieldList, QGis.WKBPoint, sRs)
138140
inFeat = QgsFeature()
139141
inFeatB = QgsFeature()
140142
outFeat = QgsFeature()
141-
inGeom = QgsGeometry()
142-
tempGeom = QgsGeometry()
143143
start = 15.00
144144
add = 85.00 / layer1.featureCount()
145+
145146
index = ftools_utils.createIndex( provider2 )
147+
148+
provider1.select([index1])
146149
while provider1.nextFeature(inFeat):
147150
inGeom = inFeat.geometry()
148-
lineList = []
149-
#(check, lineList) = layer2.featuresInRectangle(inGeom.boundingBox(), True, True)
150-
# Below is a work-around for featuresInRectangle
151-
# Which appears to have been removed for QGIS version 1.0
152-
#layer2.select(inGeom.boundingBox(), False)
153-
#lineList = layer2.selectedFeatures()
151+
v1 = inFeat.attributeMap()[index1]
152+
154153
lineList = index.intersects( inGeom.boundingBox() )
155-
if len(lineList) > 0: check = 0
156-
else: check = 1
157-
if check == 0:
158-
for i in lineList:
159-
provider2.featureAtId( int( i ), inFeatB , True, allAttrs )
160-
tmpGeom = QgsGeometry( inFeatB.geometry() )
161-
#tempGeom = i.geometry()
162-
tempList = []
163-
atMap1 = inFeat.attributeMap()
164-
atMap2 = inFeatB.attributeMap()
165-
if inGeom.intersects(tmpGeom):
166-
tempGeom = inGeom.intersection(tmpGeom)
167-
if tempGeom.type() == QGis.Point:
168-
if tempGeom.isMultipart():
169-
tempList = tempGeom.asMultiPoint()
170-
else:
171-
tempList.append(tempGeom.asPoint())
172-
for j in tempList:
173-
outFeat.setGeometry(tempGeom.fromPoint(j))
174-
outFeat.addAttribute(0, atMap1[index1])
175-
outFeat.addAttribute(1, atMap2[index2])
176-
writer.addFeature(outFeat)
154+
for i in lineList:
155+
provider2.featureAtId( int( i ), inFeatB , True, [index2] )
156+
tmpGeom = QgsGeometry( inFeatB.geometry() )
157+
v2 = inFeatB.attributeMap()[index2]
158+
159+
if inGeom.intersects(tmpGeom):
160+
tempGeom = inGeom.intersection(tmpGeom)
161+
if tempGeom.type() == QGis.Point:
162+
tempList = []
163+
if tempGeom.isMultipart():
164+
tempList = tempGeom.asMultiPoint()
165+
else:
166+
tempList.append(tempGeom.asPoint())
167+
168+
for j in tempList:
169+
outFeat.setGeometry(tempGeom.fromPoint(j))
170+
outFeat.addAttribute(0, v1)
171+
outFeat.addAttribute(1, v2)
172+
writer.addFeature(outFeat)
173+
177174
start = start + add
178175
progressBar.setValue(start)
176+
179177
del writer

python/plugins/sextante/core/GeoAlgorithm.py

+19-20
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ def __init__(self):
4141

4242
self.defineCharacteristics()
4343

44-
4544
def getCopy(self):
4645
newone = copy.copy(self)
4746
newone.parameters = copy.deepcopy(self.parameters)
@@ -106,8 +105,8 @@ def checkParameterValuesBeforeExecuting(self):
106105
This check is called from the parameters dialog, and also when calling from the console'''
107106
return None
108107
#=========================================================
109-
110-
108+
109+
111110
def execute(self, progress):
112111
'''The method to use to call a SEXTANTE algorithm.
113112
Although the body of the algorithm is in processAlgorithm(),
@@ -120,9 +119,9 @@ def execute(self, progress):
120119
self.resolveTemporaryOutputs()
121120
self.checkOutputFileExtensions()
122121
self.runPreExecutionScript(progress)
123-
self.processAlgorithm(progress)
122+
self.processAlgorithm(progress)
124123
self.convertUnsupportedFormats(progress)
125-
self.runPostExecutionScript(progress)
124+
self.runPostExecutionScript(progress)
126125
except GeoAlgorithmExecutionException, gaee:
127126
SextanteLog.addToLog(SextanteLog.LOG_ERROR, gaee.msg)
128127
raise gaee
@@ -144,49 +143,49 @@ def execute(self, progress):
144143
def runPostExecutionScript(self, progress):
145144
scriptFile = SextanteConfig.getSetting(SextanteConfig.POST_EXECUTION_SCRIPT)
146145
self.runHookScript(scriptFile, progress);
147-
146+
148147
def runPreExecutionScript(self, progress):
149148
scriptFile = SextanteConfig.getSetting(SextanteConfig.PRE_EXECUTION_SCRIPT)
150149
self.runHookScript(scriptFile, progress);
151-
152-
def runHookScript(self, filename, progress):
150+
151+
def runHookScript(self, filename, progress):
153152
if not os.path.exists(filename):
154153
return
155-
try:
154+
try:
156155
script = "import sextante\n"
157156
ns = {}
158157
ns['progress'] = progress
159-
ns['alg'] = self
158+
ns['alg'] = self
160159
f = open(filename)
161160
lines = f.readlines()
162161
for line in lines:
163162
script+=line
164-
exec(script) in ns
163+
exec(script) in ns
165164
except: # a wrong script should not cause problems, so we swallow all exceptions
166165
pass
167-
166+
168167
def convertUnsupportedFormats(self, progress):
169168
i = 0
170169
progress.setText("Converting outputs")
171-
for out in self.outputs:
172-
if isinstance(out, OutputVector):
170+
for out in self.outputs:
171+
if isinstance(out, OutputVector):
173172
if out.compatible is not None:
174173
layer = QGisLayers.getObjectFromUri(out.compatible)
175174
provider = layer.dataProvider()
176175
writer = out.getVectorWriter( provider.fields(), provider.geometryType(), provider.crs())
177176
features = QGisLayers.features(layer)
178177
for feature in features:
179178
writer.addFeature(feature)
180-
elif isinstance(out, OutputRaster):
179+
elif isinstance(out, OutputRaster):
181180
if out.compatible is not None:
182181
layer = QGisLayers.getObjectFromUri(out.compatible)
183182
provider = layer.dataProvider()
184183
writer = QgsRasterFileWriter(out.value)
185184
format = self.getFormatShortNameFromFilename(out.value)
186-
writer.setOutputFormat(format);
187-
writer.writeRaster(layer.pipe(), layer.width(), layer.height(), layer.extent(), layer.crs())
188-
progress.setPercentage(100 * i / float(len(self.outputs)))
189-
185+
writer.setOutputFormat(format);
186+
writer.writeRaster(layer.pipe(), layer.width(), layer.height(), layer.extent(), layer.crs())
187+
progress.setPercentage(100 * i / float(len(self.outputs)))
188+
190189
def getFormatShortNameFromFilename(self, filename):
191190
ext = filename[filename.rfind(".")+1:]
192191
supported = GdalUtils.getSupportedRasters()
@@ -195,7 +194,7 @@ def getFormatShortNameFromFilename(self, filename):
195194
if ext in exts:
196195
return name
197196
return "GTiff"
198-
197+
199198
def checkOutputFileExtensions(self):
200199
'''Checks if the values of outputs are correct and have one of the supported output extensions.
201200
If not, it adds the first one of the supported extensions, which is assumed to be the default one'''

python/plugins/sextante/gdal/GdalOgrAlgorithmProvider.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -81,11 +81,13 @@ def _loadAlgorithms(self):
8181
self.algs = self.preloadedAlgs
8282

8383
def createAlgsList(self):
84-
#First we populate the list of algorihtms with those created extending
84+
#First we populate the list of algorithms with those created extending
8585
#GeoAlgorithm directly (those that execute GDAL using the console)
86+
8687
self.preloadedAlgs = [nearblack(), information(), warp(), translate(),
8788
rgb2pct(), pct2rgb(), merge(), polygonize(), gdaladdo(),
8889
OgrInfo(), Ogr2Ogr(), OgrSql()]
90+
8991
#And then we add those that are created as python scripts
9092
folder = self.scriptsFolder()
9193
for descriptionFile in os.listdir(folder):

python/plugins/sextante/gdal/GdalUtils.py

+10-2
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,12 @@
2828
import subprocess
2929
from sextante.core.SextanteLog import SextanteLog
3030
import os
31-
import gdal
31+
32+
try:
33+
from osgeo import gdal
34+
gdalAvailable = True
35+
except:
36+
gdalAvailable = False
3237

3338
class GdalUtils():
3439

@@ -57,6 +62,9 @@ def getConsoleOutput():
5762

5863
@staticmethod
5964
def getSupportedRasters():
65+
if not gdalAvailable:
66+
return {}
67+
6068
'''this has been adapted from GdalTools plugin'''
6169
if GdalUtils.supportedRasters != None:
6270
return GdalUtils.supportedRasters
@@ -76,7 +84,7 @@ def getSupportedRasters():
7684
if not metadata.has_key(gdal.DCAP_CREATE) or metadata[gdal.DCAP_CREATE] != 'YES':
7785
continue
7886
if metadata.has_key(gdal.DMD_EXTENSION):
79-
extensions = metadata[gdal.DMD_EXTENSION].split("/")
87+
extensions = metadata[gdal.DMD_EXTENSION].split("/")
8088
if extensions:
8189
GdalUtils.supportedRasters[shortName] = extensions
8290

python/plugins/sextante/gdal/OgrAlgorithm.py

+9-3
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,12 @@
3030
from PyQt4.QtGui import *
3131
import string
3232
import re
33-
import ogr
33+
34+
try:
35+
from osgeo import ogr
36+
ogrAvailable = True
37+
except:
38+
ogrAvailable = False
3439

3540
class OgrAlgorithm(GeoAlgorithm):
3641

@@ -61,8 +66,9 @@ def ogrConnectionString(self, uri):
6166

6267
def drivers(self):
6368
list = []
64-
for iDriver in range(ogr.GetDriverCount()):
65-
list.append("%s" % ogr.GetDriver(iDriver).GetName())
69+
if ogrAvailable:
70+
for iDriver in range(ogr.GetDriverCount()):
71+
list.append("%s" % ogr.GetDriver(iDriver).GetName())
6672
return list
6773

6874
def failure(self, pszDataSource):

python/plugins/sextante/gdal/ogr2ogr.py

+9-3
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,12 @@
3939
import re
4040
import os
4141
import tempfile
42-
import ogr
43-
import gdal
44-
import osr
4542

43+
try:
44+
from osgeo import gdal, ogr, osr
45+
gdalAvailable = True
46+
except:
47+
gdalAvailable = False
4648

4749
GeomOperation = Enum(["NONE", "SEGMENTIZE", "SIMPLIFY_PRESERVE_TOPOLOGY"])
4850

@@ -71,6 +73,10 @@ def defineCharacteristics(self):
7173
def processAlgorithm(self, progress):
7274
'''Here is where the processing itself takes place'''
7375

76+
if not gdalAvailable:
77+
SextanteLog.addToLog(SextanteLog.LOG_ERROR, "GDAL bindings not installed." )
78+
return
79+
7480
input = self.getParameterValue(self.INPUT_LAYER)
7581
ogrLayer = self.ogrConnectionString(input)
7682
output = self.getOutputValue(self.OUTPUT_LAYER)

python/plugins/sextante/gdal/ogrinfo.py

+11-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,13 @@
3030
from PyQt4.QtGui import *
3131
import string
3232
import re
33-
import ogr
33+
34+
try:
35+
from osgeo import ogr
36+
ogrAvailable = True
37+
except:
38+
ogrAvailable = False
39+
3440
from sextante.gdal.OgrAlgorithm import OgrAlgorithm
3541

3642
class OgrInfo(OgrAlgorithm):
@@ -71,6 +77,10 @@ def ogrinfo(self, pszDataSource):
7177
bSummaryOnly = True
7278
self.info = ''
7379

80+
if not ogrAvailable:
81+
self.info = "OGR bindings not installed"
82+
return
83+
7484
qDebug("Opening data source '%s'" % pszDataSource)
7585
poDS = ogr.Open( pszDataSource, False )
7686

0 commit comments

Comments
 (0)