~ubuntu-branches/ubuntu/wily/qgis/wily

« back to all changes in this revision

Viewing changes to python/plugins/fTools/tools/doDefineProj.py

  • Committer: Bazaar Package Importer
  • Author(s): Johan Van de Wauw
  • Date: 2010-07-11 20:23:24 UTC
  • mfrom: (3.1.4 squeeze)
  • Revision ID: james.westby@ubuntu.com-20100711202324-5ktghxa7hracohmr
Tags: 1.4.0+12730-3ubuntu1
* Merge from Debian unstable (LP: #540941).
* Fix compilation issues with QT 4.7
* Add build-depends on libqt4-webkit-dev 

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
from PyQt4.QtCore import *
 
2
from PyQt4.QtGui import *
 
3
 
 
4
from qgis.core import *
 
5
from qgis.gui import *
 
6
 
 
7
from ui_frmReProject import Ui_Dialog
 
8
 
 
9
class Dialog(QDialog, Ui_Dialog):
 
10
        def __init__(self, iface):
 
11
                QDialog.__init__(self)
 
12
                self.iface = iface
 
13
                self.setupUi(self)
 
14
                self.toolOut.setEnabled(False)
 
15
                self.toolOut.setVisible(False)
 
16
                self.outShape.setEnabled(False)
 
17
                self.outShape.setVisible(False)
 
18
                self.label_2.setVisible(False)
 
19
                self.label_2.setEnabled(False)
 
20
                self.setWindowTitle("Define current projection")
 
21
                QObject.connect(self.btnProjection, SIGNAL("clicked()"), self.outProjFile)
 
22
                QObject.connect(self.inShape, SIGNAL("currentIndexChanged(QString)"), self.updateProj1)
 
23
                QObject.connect(self.cmbLayer, SIGNAL("currentIndexChanged(QString)"), self.updateProj2)
 
24
                # populate layer list
 
25
                self.progressBar.setValue(0)
 
26
                mapCanvas = self.iface.mapCanvas()
 
27
                for i in range(mapCanvas.layerCount()):
 
28
                        layer = mapCanvas.layer(i)
 
29
                        if layer.type() == layer.VectorLayer:
 
30
                                self.inShape.addItem(layer.name())
 
31
                                self.cmbLayer.addItem(layer.name())
 
32
 
 
33
        def updateProj1(self, layerName):
 
34
                tempLayer = self.getVectorLayerByName(layerName)
 
35
                crs = tempLayer.dataProvider().crs().toProj4()
 
36
                self.inRef.insert(unicode(crs)) 
 
37
 
 
38
        def updateProj2(self, layerName):
 
39
                tempLayer = self.getVectorLayerByName(layerName)
 
40
                crs = tempLayer.dataProvider().crs().toProj4()
 
41
                self.outRef.insert(unicode(crs))        
 
42
 
 
43
        def accept(self):
 
44
                if self.inShape.currentText() == "":
 
45
                        QMessageBox.information(self, "Define current projection", "No input shapefile specified")
 
46
                elif self.txtProjection.text() == "" and self.rdoProjection.isChecked():
 
47
                        QMessageBox.information(self, "Define current projection", "Please specify spatial reference system")
 
48
                elif self.cmbLayer.currentText() == "" and self.rdoLayer.isChecked():
 
49
                        QMessageBox.information(self, "Define current projection", "Please specify spatial reference system")
 
50
                else:
 
51
                        self.progressBar.setValue(5)
 
52
                        inName = self.inShape.currentText()
 
53
                        self.progressBar.setValue(10)
 
54
                        vLayer = self.getVectorLayerByName(inName)
 
55
                        self.progressBar.setValue(30)
 
56
                        if vLayer == "Error":
 
57
                                QMessageBox.information(self, "Define current projection", "Cannot define projection for PostGIS data...yet!")
 
58
                        else:
 
59
                                srsDefine = QgsCoordinateReferenceSystem()
 
60
                                if self.rdoProjection.isChecked():
 
61
                                        outProj = self.txtProjection.text()
 
62
                                        srsDefine.createFromProj4(outProj)
 
63
                                else:
 
64
                                        destLayer = self.getVectorLayerByName(self.cmbLayer.currentText())
 
65
                                        srsDefine = destLayer.srs()
 
66
                                if srsDefine == vLayer.srs():
 
67
                                        QMessageBox.information(self, "Define current projection", "Identical output spatial reference system chosen")
 
68
                                else:
 
69
                                        provider = vLayer.dataProvider()
 
70
                                        self.progressBar.setValue(35)
 
71
                                        inPath = provider.dataSourceUri()
 
72
                                        self.progressBar.setValue(40)
 
73
                                        if inPath.endsWith(".shp"):
 
74
                                                inPath = inPath.left(inPath.length() - 4)
 
75
                                        self.progressBar.setValue(55)
 
76
                                        if not srsDefine.isValid():
 
77
                                                QMessageBox.information(self, "Define current projection", "Output spatial reference system is not valid")
 
78
                                        else:
 
79
                                                self.progressBar.setValue(60)
 
80
                                                outputWkt = srsDefine.toWkt()
 
81
                                                self.progressBar.setValue(65)
 
82
                                                outputPrj = open(inPath + ".prj", "w")
 
83
                                                self.progressBar.setValue(70)
 
84
                                                outputPrj.write(outputWkt)
 
85
                                                self.progressBar.setValue(75)
 
86
                                                outputPrj.close()
 
87
                                                mLayer = self.getMapLayerByName(inName)
 
88
                                                self.progressBar.setValue(90)
 
89
                                                if not mLayer.isValid():
 
90
                                                        QMessageBox.information(self, "Define current projection", "Unable to dynamically define projection.\n"
 
91
                                                + "Please reload layer manually for projection definition to take effect.")
 
92
                                                else:
 
93
                                                        self.progressBar.setValue(95)
 
94
                                                        mLayer.setCrs(srsDefine)
 
95
                                                        self.progressBar.setValue(100)
 
96
                                                        QMessageBox.information(self, "Define current projection", "Defined Projection For:\n" + inPath + ".shp")
 
97
                self.progressBar.setValue(0)
 
98
 
 
99
        def outProjFile(self):
 
100
                format = QString( "<h2>%1</h2>%2 <br/> %3" )
 
101
                header = QString( "Define layer CRS:" )
 
102
                sentence1 = QString( "Please select the projection system that defines the current layer." )
 
103
                sentence2 = QString( "Layer CRS information will be updated to the selected CRS." )
 
104
                self.projSelect = QgsGenericProjectionSelector(self, Qt.Widget)
 
105
                self.projSelect.setMessage( format.arg( header ).arg( sentence1 ).arg( sentence2 ))
 
106
                if self.projSelect.exec_():
 
107
                        projString = self.projSelect.selectedProj4String()
 
108
                        if projString == "":
 
109
                                QMessageBox.information(self, "Export to new projection", "No Valid CRS selected")
 
110
                                return
 
111
                        else:
 
112
                                self.txtProjection.clear()
 
113
                                self.txtProjection.insert(projString)
 
114
                else:
 
115
                        return
 
116
 
 
117
# Gets vector layer by layername in canvas
 
118
        def getVectorLayerByName(self, myName):
 
119
                mc = self.iface.mapCanvas()
 
120
                nLayers = mc.layerCount()
 
121
                for l in range(nLayers):
 
122
                        layer = mc.layer(l)
 
123
                        if layer.name() == unicode(myName,'latin1'):
 
124
                                if unicode(layer.dataProvider().name()) == "postgres":
 
125
                                        return "Error"
 
126
                                else:
 
127
                                        vlayer = QgsVectorLayer(unicode(layer.source()),  unicode(myName),  unicode(layer.dataProvider().name()))
 
128
                                        if vlayer.isValid():
 
129
                                                return vlayer
 
130
 
 
131
#Gets map layer by layername in canvas
 
132
#Return: QgsMapLayer
 
133
        def getMapLayerByName(self,myName):
 
134
                mc = self.iface.mapCanvas()
 
135
                nLayers = mc.layerCount()
 
136
                for l in range(nLayers):
 
137
                        layer = mc.layer(l)
 
138
                        if layer.name() == unicode(myName,'latin1'):
 
139
                                return layer