def chooseOutputFile(self): # get last used dir settings = QSettings() lastUsedDir = settings.value(self.lastUsedVectorDirSettingsKey, ".") # get selected filter selectedFilter = self.cboFileFormat.itemData(self.cboFileFormat.currentIndex()) # ask for a filename filename, filter = QFileDialog.getSaveFileName(self, self.tr("Choose where to save the file"), lastUsedDir, selectedFilter) if filename == "": return filterString = QgsVectorFileWriter.filterForDriver(selectedFilter) ext = filterString[filterString.find('.'):] ext = ext[:ext.find(' ')] if not filename.lower().endswith(ext): filename += ext # store the last used dir settings.setValue(self.lastUsedVectorDirSettingsKey, QFileInfo(filename).filePath()) self.editOutputFile.setText(filename)
def chooseOutputFile(self): # get last used dir settings = QgsSettings() lastUsedDir = settings.value(self.lastUsedVectorDirSettingsKey, ".") # get selected filter selectedFilter = self.cboFileFormat.currentData() # ask for a filename filename, filter = QFileDialog.getSaveFileName( self, self.tr("Choose where to save the file"), lastUsedDir, selectedFilter) if filename == "": return filterString = QgsVectorFileWriter.filterForDriver(selectedFilter) ext = filterString[filterString.find('.'):] ext = ext[:ext.find(' ')] if not filename.lower().endswith(ext): filename += ext # store the last used dir settings.setValue(self.lastUsedVectorDirSettingsKey, QFileInfo(filename).filePath()) self.editOutputFile.setText(filename)
def runAndCreateLayer(parent): geomDialog = QgsNewVectorLayerDialog(parent) if (geomDialog.exec_() == QDialog.Rejected): return "" geometrytype = geomDialog.selectedType() fileformat = geomDialog.selectedFileFormat() enc = geomDialog.selectedFileEncoding() crsId = geomDialog.selectedCrsId() print(QString("New file format will be: %1").arg(fileformat)) attributes = dict() geomDialog.attributes(attributes) settings = QSettings() lastUsedDir = settings.value("/UI/lastVectorFileFilterDir", QDir.homePath()).toString() filterString = QgsVectorFileWriter.filterForDriver(fileformat) fileName = QFileDialog.getSaveFileName(parent, "Save layer as...", lastUsedDir, filterString) if (fileName.isNull()): return "" if (fileformat == "ESRI Shapefile" and not fileName.endsWith(".shp", Qt.CaseInsensitive)): fileName += ".shp" settings.setValue("/UI/lastVectorFileFilterDir", QFileInfo(fileName).absolutePath()) settings.setValue("/UI/encoding", enc) #try to create the new layer with OGRProvider instead of QgsVectorFileWriter pReg = QgsProviderRegistry.instance() ogrlib = pReg.library("ogr") # load the data provider myLib = QLibrary(ogrlib) loaded = myLib.load() constructionLineLayer = None mapUnits = define._canvas.mapUnits() layerName = String.QString2Str(fileName).split("\\")[-1] path = "memory" selectedCrs = geomDialog.selectedCrs() if geometrytype == QGis.Line: # if mapUnits == QGis.Meters: constructionLineLayer = QgsVectorLayer( "linestring?crs=%s" % selectedCrs.authid(), layerName, path) # else: # constructionLineLayer = QgsVectorLayer("linestring?crs=%s"%define._latLonCrs.authid (), layerName, path) elif geometrytype == QGis.Polygon: # if mapUnits == QGis.Meters: constructionLineLayer = QgsVectorLayer( "polygon?crs=%s" % selectedCrs.authid(), layerName, path) # else: # constructionLineLayer = QgsVectorLayer("polygon?crs=%s"%define._latLonCrs.authid (), layerName, path) elif geometrytype == QGis.Point: # if mapUnits == QGis.Meters: constructionLineLayer = QgsVectorLayer( "Point?crs=%s" % selectedCrs.authid(), layerName, path) # else: # constructionLineLayer = QgsVectorLayer("Point?crs=%s"%define._latLonCrs.authid (), layerName, path) fieldList = [] for key in attributes.iterkeys(): fieldList.append(QgsField(key, attributes[key][0])) constructionLineLayer.startEditing() constructionLineLayer.dataProvider().addAttributes(fieldList) constructionLineLayer.commitChanges() er = QgsVectorFileWriter.writeAsVectorFormat( constructionLineLayer, fileName, "utf-8", constructionLineLayer.crs()) constructionLineLayer = QgsVectorLayer(fileName, layerName, "ogr") QgisHelper.appendToCanvas(define._canvas, [constructionLineLayer], "NewLayers") # if ( loaded ): # print( "ogr provider loaded" ) # # typedef bool ( *createEmptyDataSourceProc )( const QString&, const QString&, const QString&, QGis::WkbType, # const QList< QPair<QString, QString> >&, const QgsCoordinateReferenceSystem * ) # createEmptyDataSourceProc createEmptyDataSource = ( createEmptyDataSourceProc ) cast_to_fptr( myLib.resolve( "createEmptyDataSource" ) ) # if ( createEmptyDataSource ) # { # if ( geometrytype not = QGis::WKBUnknown ) # { # QgsCoordinateReferenceSystem srs = QgsCRSCache::instance().crsBySrsId( crsId ) # if ( not createEmptyDataSource( fileName, fileformat, enc, geometrytype, attributes, &srs ) ) # { # return QString::null # } # } # else # { # QgsDebugMsg( "geometry type not recognised" ) # return QString::null # } # } # else # { # QgsDebugMsg( "Resolving newEmptyDataSource(...) failed" ) # return QString::null # } # } # # if ( pEnc ) # *pEnc = enc return fileName