[QGIS Commit] r13025 - trunk/qgis/python/plugins/fTools/tools
svn_qgis at osgeo.org
svn_qgis at osgeo.org
Mon Mar 8 15:19:04 EST 2010
Author: cfarmer
Date: 2010-03-08 15:19:04 -0500 (Mon, 08 Mar 2010)
New Revision: 13025
Modified:
trunk/qgis/python/plugins/fTools/tools/doDefineProj.py
Log:
Adding projection information (prj-file) no longer throws an error if folder has cyrillics. Fixes #2501.
Modified: trunk/qgis/python/plugins/fTools/tools/doDefineProj.py
===================================================================
--- trunk/qgis/python/plugins/fTools/tools/doDefineProj.py 2010-03-08 19:57:34 UTC (rev 13024)
+++ trunk/qgis/python/plugins/fTools/tools/doDefineProj.py 2010-03-08 20:19:04 UTC (rev 13025)
@@ -4,137 +4,121 @@
from qgis.core import *
from qgis.gui import *
-
+import ftools_utils
from ui_frmReProject import Ui_Dialog
class Dialog(QDialog, Ui_Dialog):
- def __init__(self, iface):
- QDialog.__init__(self)
- self.iface = iface
- self.setupUi(self)
- self.toolOut.setEnabled(False)
- self.toolOut.setVisible(False)
- self.outShape.setEnabled(False)
- self.outShape.setVisible(False)
- self.label_2.setVisible(False)
- self.label_2.setEnabled(False)
- self.setWindowTitle(self.tr("Define current projection"))
- QObject.connect(self.btnProjection, SIGNAL("clicked()"), self.outProjFile)
- QObject.connect(self.inShape, SIGNAL("currentIndexChanged(QString)"), self.updateProj1)
- QObject.connect(self.cmbLayer, SIGNAL("currentIndexChanged(QString)"), self.updateProj2)
- # populate layer list
- self.progressBar.setValue(0)
- mapCanvas = self.iface.mapCanvas()
- for i in range(mapCanvas.layerCount()):
- layer = mapCanvas.layer(i)
- if layer.type() == layer.VectorLayer:
- self.inShape.addItem(layer.name())
- self.cmbLayer.addItem(layer.name())
+ def __init__(self, iface):
+ QDialog.__init__(self)
+ self.iface = iface
+ self.setupUi(self)
+ self.toolOut.setEnabled(False)
+ self.toolOut.setVisible(False)
+ self.outShape.setEnabled(False)
+ self.outShape.setVisible(False)
+ self.label_2.setVisible(False)
+ self.label_2.setEnabled(False)
+ self.setWindowTitle(self.tr("Define current projection"))
+ QObject.connect(self.btnProjection, SIGNAL("clicked()"), self.outProjFile)
+ QObject.connect(self.inShape, SIGNAL("currentIndexChanged(QString)"), self.updateProj1)
+ QObject.connect(self.cmbLayer, SIGNAL("currentIndexChanged(QString)"), self.updateProj2)
+ # populate layer list
+ self.progressBar.setValue(0)
+ mapCanvas = self.iface.mapCanvas()
+ layers = ftools_utils.getLayerNames([QGis.Point, QGis.Line, QGis.Polygon])
+ self.inShape.addItems(layers)
+ self.cmbLayer.addItems(layers)
- def updateProj1(self, layerName):
- tempLayer = self.getVectorLayerByName(layerName)
- crs = tempLayer.dataProvider().crs().toProj4()
- self.inRef.insert(unicode(crs))
+ def updateProj1(self, layerName):
+ tempLayer = ftools_utils.getVectorLayerByName(layerName)
+ crs = tempLayer.dataProvider().crs().toProj4()
+ self.inRef.insert(unicode(crs))
- def updateProj2(self, layerName):
- tempLayer = self.getVectorLayerByName(layerName)
- crs = tempLayer.dataProvider().crs().toProj4()
- self.outRef.insert(unicode(crs))
+ def updateProj2(self, layerName):
+ tempLayer = ftools_utils.getVectorLayerByName(layerName)
+ crs = tempLayer.dataProvider().crs().toProj4()
+ self.outRef.insert(unicode(crs))
- def accept(self):
- if self.inShape.currentText() == "":
- QMessageBox.information(self, self.tr("Define current projection"), self.tr("No input shapefile specified"))
- elif self.txtProjection.text() == "" and self.rdoProjection.isChecked():
- QMessageBox.information(self, self.tr("Define current projection"), self.tr("Please specify spatial reference system"))
- elif self.cmbLayer.currentText() == "" and self.rdoLayer.isChecked():
- QMessageBox.information(self, self.tr("Define current projection"), self.tr("Please specify spatial reference system"))
- else:
- self.progressBar.setValue(5)
- inName = self.inShape.currentText()
- self.progressBar.setValue(10)
- vLayer = self.getVectorLayerByName(inName)
- self.progressBar.setValue(30)
- if vLayer == "Error":
- QMessageBox.information(self, self.tr("Define current projection"), self.tr("Cannot define projection for PostGIS data...yet!"))
- else:
- srsDefine = QgsCoordinateReferenceSystem()
- if self.rdoProjection.isChecked():
- outProj = self.txtProjection.text()
- srsDefine.createFromProj4(outProj)
- else:
- destLayer = self.getVectorLayerByName(self.cmbLayer.currentText())
- srsDefine = destLayer.srs()
- if srsDefine == vLayer.srs():
- QMessageBox.information(self, self.tr("Define current projection"), self.tr("Identical output spatial reference system chosen"))
- else:
- provider = vLayer.dataProvider()
- self.progressBar.setValue(35)
- inPath = provider.dataSourceUri()
- inPath = inPath.remove( QRegExp( "\|.*" ) )
- self.progressBar.setValue(40)
- if inPath.endsWith(".shp"):
- inPath = inPath.left(inPath.length() - 4)
- self.progressBar.setValue(55)
- if not srsDefine.isValid():
- QMessageBox.information(self, self.tr("Define current projection"), self.tr("Output spatial reference system is not valid"))
- else:
- self.progressBar.setValue(60)
- outputWkt = srsDefine.toWkt()
- self.progressBar.setValue(65)
- outputPrj = open(inPath + ".prj", "w")
- self.progressBar.setValue(70)
- outputPrj.write(outputWkt)
- self.progressBar.setValue(75)
- outputPrj.close()
- mLayer = self.getMapLayerByName(inName)
- self.progressBar.setValue(90)
- if not mLayer.isValid():
- QMessageBox.information(self, self.tr("Define current projection"), self.tr("Unable to dynamically define projection.\nPlease reload layer manually for projection definition to take effect."))
- else:
- self.progressBar.setValue(95)
- mLayer.setCrs(srsDefine)
- self.progressBar.setValue(100)
- QMessageBox.information(self, self.tr("Define current projection"), self.tr("Defined Projection For:\n%1.shp").arg( inPath ) )
- self.progressBar.setValue(0)
+ def accept(self):
+ if self.inShape.currentText() == "":
+ QMessageBox.information(self, self.tr("Define current projection"), self.tr("No input shapefile specified"))
+ elif self.txtProjection.text() == "" and self.rdoProjection.isChecked():
+ QMessageBox.information(self, self.tr("Define current projection"), self.tr("Please specify spatial reference system"))
+ elif self.cmbLayer.currentText() == "" and self.rdoLayer.isChecked():
+ QMessageBox.information(self, self.tr("Define current projection"), self.tr("Please specify spatial reference system"))
+ else:
+ self.progressBar.setValue(5)
+ inName = self.inShape.currentText()
+ self.progressBar.setValue(10)
+ vLayer = ftools_utils.getVectorLayerByName(inName)
+ self.progressBar.setValue(30)
+ if vLayer == "Error":
+ QMessageBox.information(self, self.tr("Define current projection"), self.tr("Cannot define projection for PostGIS data...yet!"))
+ else:
+ srsDefine = QgsCoordinateReferenceSystem()
+ if self.rdoProjection.isChecked():
+ outProj = self.txtProjection.text()
+ srsDefine.createFromProj4(outProj)
+ else:
+ destLayer = self.getVectorLayerByName(self.cmbLayer.currentText())
+ srsDefine = destLayer.srs()
+ if srsDefine == vLayer.srs():
+ QMessageBox.information(self, self.tr("Define current projection"), self.tr("Identical output spatial reference system chosen"))
+ else:
+ provider = vLayer.dataProvider()
+ self.progressBar.setValue(35)
+ inPath = provider.dataSourceUri()
+ inPath = inPath.remove( QRegExp( "\|.*" ) )
+ self.progressBar.setValue(40)
+ if inPath.endsWith(".shp"):
+ inPath = inPath.left(inPath.length() - 4)
+ self.progressBar.setValue(55)
+ if not srsDefine.isValid():
+ QMessageBox.information(self, self.tr("Define current projection"), self.tr("Output spatial reference system is not valid"))
+ else:
+ self.progressBar.setValue(60)
+ outputWkt = srsDefine.toWkt()
+ self.progressBar.setValue(65)
+ outputPrj = open(unicode("%s.prj" % inPath), "w")
+ self.progressBar.setValue(70)
+ outputPrj.write(outputWkt)
+ self.progressBar.setValue(75)
+ outputPrj.close()
+ #mLayer = self.getMapLayerByName(inName)
+ #self.progressBar.setValue(90)
+ #if not mLayer.isValid():
+ #QMessageBox.information(self, self.tr("Define current projection"), self.tr("Unable to dynamically define projection.\nPlease reload layer manually for projection definition to take effect."))
+ #else:
+ self.progressBar.setValue(95)
+ vLayer.setCrs(srsDefine)
+ self.progressBar.setValue(100)
+ QMessageBox.information(self, self.tr("Define current projection"), self.tr("Defined Projection For:\n%1.shp").arg( inPath ) )
+ self.progressBar.setValue(0)
- def outProjFile(self):
- format = QString( "<h2>%1</h2>%2 <br/> %3" )
- header = QString( "Define layer CRS:" )
- sentence1 = self.tr( "Please select the projection system that defines the current layer." )
- sentence2 = self.tr( "Layer CRS information will be updated to the selected CRS." )
- self.projSelect = QgsGenericProjectionSelector(self, Qt.Widget)
- self.projSelect.setMessage( format.arg( header ).arg( sentence1 ).arg( sentence2 ))
- if self.projSelect.exec_():
- projString = self.projSelect.selectedProj4String()
- if projString == "":
- QMessageBox.information(self, self.tr("Export to new projection"), self.tr("No Valid CRS selected"))
- return
- else:
- self.txtProjection.clear()
- self.txtProjection.insert(projString)
- else:
- return
+ def outProjFile(self):
+ format = QString( "<h2>%1</h2>%2 <br/> %3" )
+ header = QString( "Define layer CRS:" )
+ sentence1 = self.tr( "Please select the projection system that defines the current layer." )
+ sentence2 = self.tr( "Layer CRS information will be updated to the selected CRS." )
+ self.projSelect = QgsGenericProjectionSelector(self, Qt.Widget)
+ self.projSelect.setMessage( format.arg( header ).arg( sentence1 ).arg( sentence2 ))
+ if self.projSelect.exec_():
+ projString = self.projSelect.selectedProj4String()
+ if projString == "":
+ QMessageBox.information(self, self.tr("Export to new projection"), self.tr("No Valid CRS selected"))
+ return
+ else:
+ self.txtProjection.clear()
+ self.txtProjection.insert(projString)
+ else:
+ return
-# Gets vector layer by layername in canvas
- def getVectorLayerByName(self, myName):
- mc = self.iface.mapCanvas()
- nLayers = mc.layerCount()
- for l in range(nLayers):
- layer = mc.layer(l)
- if layer.name() == unicode(myName,'latin1'):
- if unicode(layer.dataProvider().name()) == "postgres":
- return "Error"
- else:
- vlayer = QgsVectorLayer(unicode(layer.source()), unicode(myName), unicode(layer.dataProvider().name()))
- if vlayer.isValid():
- return vlayer
-
#Gets map layer by layername in canvas
#Return: QgsMapLayer
- def getMapLayerByName(self,myName):
- mc = self.iface.mapCanvas()
- nLayers = mc.layerCount()
- for l in range(nLayers):
- layer = mc.layer(l)
- if layer.name() == unicode(myName,'latin1'):
- return layer
+ def getMapLayerByName(self,myName):
+ mc = self.iface.mapCanvas()
+ nLayers = mc.layerCount()
+ for l in range(nLayers):
+ layer = mc.layer(l)
+ if layer.name() == unicode(myName):
+ return layer
More information about the QGIS-commit
mailing list