def __init__(self, iface): # Save reference to the QGIS interface self.iface = iface # initialize plugin directory self.plugin_dir = QtCore.QFileInfo(QgsApplication.qgisUserDbFilePath()).path() + "/python/plugins/bulkvectorexport" # initialize locale localePath = "" locale = QtCore.QSettings().value("locale/userLocale")[0:2] if QtCore.QFileInfo(self.plugin_dir).exists(): localePath = self.plugin_dir + "/i18n/bulkvectorexport_" + \ locale + ".qm" if QtCore.QFileInfo(localePath).exists(): self.translator = QTranslator() self.translator.load(localePath) if qVersion() > '4.3.3': QtCore.QCoreApplication.installTranslator(self.translator) # Create the dialog (after translation) and keep reference self.dlg = BulkVectorExportDialog()
class BulkVectorExport: def __init__(self, iface): # Save reference to the QGIS interface self.iface = iface # initialize plugin directory self.plugin_dir = QtCore.QFileInfo(QgsApplication.qgisUserDbFilePath()).path() + "/python/plugins/bulkvectorexport" # initialize locale localePath = "" locale = QtCore.QSettings().value("locale/userLocale")[0:2] if QtCore.QFileInfo(self.plugin_dir).exists(): localePath = self.plugin_dir + "/i18n/bulkvectorexport_" + \ locale + ".qm" if QtCore.QFileInfo(localePath).exists(): self.translator = QTranslator() self.translator.load(localePath) if qVersion() > '4.3.3': QtCore.QCoreApplication.installTranslator(self.translator) # Create the dialog (after translation) and keep reference self.dlg = BulkVectorExportDialog() def initGui(self): # Create action that will start plugin configuration self.action = QtGui.QAction( \ QtGui.QIcon(":/plugins/bulkvectorexport/icon.png"), \ u"Bulk export vectory layers", \ self.iface.mainWindow()) # connect the action to the run method QtCore.QObject.connect(self.action, QtCore.SIGNAL("triggered()"), self.run) # Add toolbar button and menu item self.iface.addToolBarIcon(self.action) self.iface.addPluginToMenu(u"&Bulk vector export", self.action) def unload(self): # Remove the plugin menu item and icon self.iface.removePluginMenu(u"&Bulk vector export", self.action) self.iface.removeToolBarIcon(self.action) # run method that performs all the real work def run(self): # show the dialog self.dlg.show() # Run the dialog event loop result = self.dlg.exec_() # See if OK was pressed if result == 1: # get target directory dirName = self.dlg.ui.dirEdit.text() if dirName[len(dirName)-1] != "/": dirName = dirName + "/" if not QtCore.QFileInfo(dirName).isDir(): QtGui.QMessageBox.critical(self.dlg, "BulkVectorExport", \ "No such directory : " + dirName) return ogr_driver_name = "GeoJSON" print "Driver ogr name: " + ogr_driver_name layers = qgis.utils.iface.mapCanvas().layers() project = QgsProject.instance() mapInfo = {"name": os.path.basename(project.fileName()), "layers": [], "bounds": []} tempPath = tempfile.mkdtemp('bulkexport') + os.sep fileNames = [] for layer in reversed(layers): layerType = layer.type() if layerType == QgsMapLayer.VectorLayer: renderer = layer.rendererV2() hasIcon = False if isinstance(renderer, QgsSingleSymbolRendererV2): copySymbols(renderer.symbol(), tempPath, fileNames) hasIcon = True print 'Writing:' + unicode(layer.name()) layer_filename = tempPath + unicode(uuid.uuid4()) print 'Filename: ' + layer_filename crs = QgsCoordinateReferenceSystem("EPSG:4326") result2 = qgis.core.QgsVectorFileWriter.writeAsVectorFormat(layer, layer_filename, "utf-8", crs, ogr_driver_name) print "Status: " + str(result2) if result2 != 0: QtGui.QMessageBox.warning(self.dlg, "BulkVectorExport",\ "Failed to export: " + layer.name() + \ " Status: " + str(result2)) sld_filename = os.path.join(tempPath, os.path.basename(layer_filename) + '.sld') print 'Filename: ' + sld_filename result3 = False layer.saveSldStyle(sld_filename) mapInfo['layers'].append({ "title": unicode(layer.name()), "geojson": os.path.basename(layer_filename) + '.geojson', "sld": os.path.basename(sld_filename), "opacity": 1 - (layer.layerTransparency() / 100.0), "hasIcon": hasIcon }) fileNames.append(layer_filename + '.geojson') fileNames.append(sld_filename) ## initial bounding box is visible extent canvas = self.iface.mapCanvas() canvasExtent = canvas.extent() crsDest = QgsCoordinateReferenceSystem('EPSG:4326') try: crsSrc = canvas.mapSettings().destinationCrs() except: crsSrc = canvas.mapRenderer().destinationCrs() xform = QgsCoordinateTransform(crsSrc, crsDest) canvasExtentTransformed = xform.transform(canvasExtent) initialBounds = [canvasExtentTransformed.xMinimum(), canvasExtentTransformed.yMinimum(), canvasExtentTransformed.xMaximum(), canvasExtentTransformed.yMaximum()] mapInfo['bounds'] = bounds(layers) mapInfo['maxZoom'] = 11; mapInfo['minZoom'] = 6; mapInfo['description'] = ""; mapInfo['attribution'] = ""; mapInfo['popupTemplate'] = ""; mapInfo['initialBounds'] = initialBounds; mapInfo['limitedInitialBounds'] = True mapInfo['popupLayerIndex'] = -1; mapInfo['hasLayerControl'] = True mapInfo['hasZoomControl'] = True mapInfo['hasLayerLegend'] = True mapInfo['basemap'] = 'bmapgrau'; map_filename = tempPath + 'metadata.json' with open(map_filename, 'w') as outfile: json.dump(mapInfo, outfile) fileNames.append(map_filename) ## zip all zf = zipfile.ZipFile(dirName + os.sep + os.path.basename(unicode(project.fileName())) + '.globus.zip', "w") for fileName in fileNames: zf.write(os.path.join(fileName), arcname=os.path.split(fileName)[1]) os.remove(fileName) os.rmdir(tempPath) zf.close()
class BulkVectorExport: def __init__(self, iface): # Save reference to the QGIS interface self.iface = iface # initialize plugin directory self.plugin_dir = QtCore.QFileInfo(QgsApplication.qgisUserDbFilePath()).path() + "/python/plugins/bulkvectorexport" # initialize locale localePath = "" locale = QtCore.QSettings().value("locale/userLocale")[0:2] if QtCore.QFileInfo(self.plugin_dir).exists(): localePath = self.plugin_dir + "/i18n/bulkvectorexport_" + \ locale + ".qm" if QtCore.QFileInfo(localePath).exists(): self.translator = QTranslator() self.translator.load(localePath) if qVersion() > '4.3.3': QtCore.QCoreApplication.installTranslator(self.translator) # Create the dialog (after translation) and keep reference self.dlg = BulkVectorExportDialog() def initGui(self): # Create action that will start plugin configuration self.action = QtGui.QAction( \ QtGui.QIcon(":/plugins/bulkvectorexport/icon.png"), \ u"Export map contents to specified format and CRS", \ self.iface.mainWindow()) # connect the action to the run method QtCore.QObject.connect(self.action, QtCore.SIGNAL("triggered()"), self.run) # Add toolbar button and menu item self.iface.addToolBarIcon(self.action) self.iface.addPluginToMenu(u"&Bulk vector export", self.action) def unload(self): # Remove the plugin menu item and icon self.iface.removePluginMenu(u"&Bulk vector export", self.action) self.iface.removeToolBarIcon(self.action) # run method that performs all the real work def run(self): # show the dialog self.dlg.show() # Run the dialog event loop result = self.dlg.exec_() # See if OK was pressed if result == 1: # get target directory dirName = self.dlg.ui.dirEdit.text() if dirName[len(dirName)-1] != "/": dirName = dirName + "/" if not QtCore.QFileInfo(dirName).isDir(): QtGui.QMessageBox.critical(self.dlg, "BulkVectorExport", \ "No such directory : " + dirName) return # get ogr driver name ogr_driver_name = self.dlg.ui.formatBox.currentText() print"Driver ogr name: " + ogr_driver_name layers = qgis.utils.iface.mapCanvas().layers() for layer in layers: layerType = layer.type() if layerType == QgsMapLayer.VectorLayer: print 'Writing:' + layer.name() layer_filename = dirName + layer.name() print 'Filename: ' + layer_filename if self.dlg.ui.layerCrsButton.isChecked(): crs = layer.crs() else: crs = qgis.utils.iface.mapCanvas().mapRenderer().destinationCrs() print "CRS selected: " + crs.description() result2 = qgis.core.QgsVectorFileWriter.writeAsVectorFormat(layer, layer_filename, layer.dataProvider().encoding(), crs, ogr_driver_name) print "Status: " + str(result2) if result2 != 0: QtGui.QMessageBox.warning(self.dlg, "BulkVectorExport",\ "Failed to export: " + layer.name() + \ " Status: " + str(result2))