def set_output_directory_path(self): """ Fill the output directory path """ # noinspection PyTypeChecker output_file = QFileDialog.getExistingDirectory( None, caption=tr("OSMData", 'Select directory')) self.lineEdit_browseDir.setText(output_file) self.disable_prefix_file()
def start_process(self): """ Make some stuff before launching the process """ self.pushButton_runQuery.setDisabled(True) self.pushButton_runQuery.initialText = self.pushButton_runQuery.text() self.pushButton_runQuery.setText(tr('OSMData', 'Execution du requete ...')) self.progressBar_execution.setMinimum(0) self.progressBar_execution.setMaximum(0) self.progressBar_execution.setValue(0) self.label_progress.setText('')
def display_exception(e): """ Display others exceptions """ exc_type, _, exc_tb = exc_info() f_name = split(exc_tb.tb_frame.f_code.co_filename)[1] print(exc_type, f_name, exc_tb.tb_lineno) _, _, tb = exc_info() import traceback traceback.print_tb(tb) print e display_message_bar( tr('OSMData', 'Error in the python console, please report it'), level=QgsMessageBar.CRITICAL, duration=20)
def initGui(self): # Setup menu self.quickosm_menu = QMenu('Quick OSM') self.quickosm_menu.setIcon(QIcon(':/plugins/QuickOSM/icon.png')) self.dock_menu = QMenu(tr('QuickOSM', u'Dock')) self.web_menu = self.iface.webMenu() self.web_menu.addMenu(self.quickosm_menu) # Main window self.mainWindowAction = QAction( QIcon(':/plugins/QuickOSM/icon.png'), u'QuickOSM', self.iface.mainWindow()) # noinspection PyUnresolvedReferences self.mainWindowAction.triggered.connect(self.openMainWindow) self.toolbar.addAction(self.mainWindowAction) self.iface.QuickOSM_mainWindowDialog = MainWindowDialog() # OSM File self.osmFileAction = QAction( QIcon(':/plugins/QuickOSM/resources/open.png'), tr('ui_osm_file', 'OSM File'), self.iface.mainWindow()) # noinspection PyUnresolvedReferences self.osmFileAction.triggered.connect(self.openOsmFileDockWidget) self.iface.addPluginToWebMenu(u"&Quick OSM", self.osmFileAction) self.osmFileDockWidget = OsmFileDockWidget() self.iface.addDockWidget( Qt.RightDockWidgetArea, self.osmFileDockWidget) self.osmFileDockWidget.hide() self.osmFileDockWidget.setObjectName('osmFileWidget') # My queries self.myQueriesAction = QAction( QIcon(':/plugins/QuickOSM/resources/favorites.png'), tr('ui_my_queries', 'My queries'), self.iface.mainWindow()) # noinspection PyUnresolvedReferences self.myQueriesAction.triggered.connect(self.openMyQueriesDockWidget) self.iface.addPluginToWebMenu(u"&Quick OSM", self.myQueriesAction) self.myQueriesDockWidget = MyQueriesDockWidget() self.iface.addDockWidget( Qt.RightDockWidgetArea, self.myQueriesDockWidget) self.myQueriesDockWidget.hide() self.myQueriesDockWidget.setObjectName('myQueriesWidget') # Query self.queryAction = QAction( QIcon(':/plugins/QuickOSM/resources/edit.png'), tr('ui_query', 'Query'), self.iface.mainWindow()) # noinspection PyUnresolvedReferences self.queryAction.triggered.connect(self.openQueryDockWidget) self.iface.addPluginToWebMenu(u"&Quick OSM", self.queryAction) self.queryDockWidget = QueryDockWidget() self.iface.addDockWidget(Qt.RightDockWidgetArea, self.queryDockWidget) self.queryDockWidget.hide() self.queryDockWidget.setObjectName('queryWidget') # Quick query self.quickQueryAction = QAction( QIcon(':/plugins/QuickOSM/resources/quick.png'), tr('ui_quick_query', 'Quick query'), self.iface.mainWindow()) # noinspection PyUnresolvedReferences self.quickQueryAction.triggered.connect(self.openQuickQueryDockWidget) self.iface.addPluginToWebMenu(u"&Quick OSM", self.quickQueryAction) self.quickQueryDockWidget = QuickQueryDockWidget() self.iface.addDockWidget( Qt.RightDockWidgetArea, self.quickQueryDockWidget) self.quickQueryDockWidget.hide() self.quickQueryDockWidget.setObjectName('quickQueryWidget') # Insert in the good order self.quickosm_menu.addAction(self.mainWindowAction) self.quickosm_menu.addMenu(self.dock_menu) self.dock_menu.addAction(self.quickQueryAction) self.dock_menu.addAction(self.queryAction) self.dock_menu.addAction(self.myQueriesAction) self.dock_menu.addAction(self.osmFileAction) # Connect signals and slots from dock self.queryDockWidget.signal_new_query_successful.connect( self.iface.QuickOSM_mainWindowDialog.refresh_my_queries_tree) self.queryDockWidget.signal_new_query_successful.connect( self.myQueriesDockWidget.refresh_my_queries_tree) self.myQueriesDockWidget.signal_delete_query_successful.connect( self.myQueriesDockWidget.refresh_my_queries_tree) self.myQueriesDockWidget.signal_delete_query_successful.connect( self.iface.QuickOSM_mainWindowDialog.refresh_my_queries_tree) # Connect signals and slots from mainWindow self.iface.QuickOSM_mainWindowDialog.signal_new_query_successful.\ connect(self.myQueriesDockWidget.refresh_my_queries_tree) self.iface.QuickOSM_mainWindowDialog.signal_new_query_successful.\ connect( self.iface.QuickOSM_mainWindowDialog.refresh_my_queries_tree) self.iface.QuickOSM_mainWindowDialog.signal_delete_query_successful.\ connect(self.myQueriesDockWidget.refresh_my_queries_tree) self.iface.QuickOSM_mainWindowDialog.signal_delete_query_successful.\ connect( self.iface.QuickOSM_mainWindowDialog.refresh_my_queries_tree) # Read the config file json_file_config = join(dirname(abspath(__file__)), 'config.json') if isfile(json_file_config): config_json = load(open(json_file_config)) for server in config_json['overpass_servers']: self.iface.QuickOSM_mainWindowDialog.comboBox_default_OAPI.\ addItem(server) # Check previous version and if new queries are available version = get_setting('version') current_version = get_current_version() if version != current_version: if new_queries_available(): message = 'New queries are available in the plugin. Would ' \ 'like to install them ? This will overwrite the ' \ 'current default queries.' title = 'QuickOSM' message = tr('QuickOSM', message) widget = self.iface.messageBar().createMessage(title, message) button_ok = QPushButton(widget) button_ok.setText( tr('QuickOSM', 'Install')) button_ok.pressed.connect(self.restoreDefaultQueries) widget.layout().addWidget(button_ok) self.iface.messageBar().pushWidget( widget, QgsMessageBar.INFO, 0) set_setting('version', current_version)
def initGui(self): # Setup menu self.quickosm_menu = QMenu('Quick OSM') self.quickosm_menu.setIcon(QIcon(':/plugins/QuickOSM/icon.png')) self.dock_menu = QMenu(tr('QuickOSM', u'Dock')) self.web_menu = self.iface.webMenu() self.web_menu.addMenu(self.quickosm_menu) # Main window self.mainWindowAction = QAction(QIcon(':/plugins/QuickOSM/icon.png'), u'QuickOSM', self.iface.mainWindow()) # noinspection PyUnresolvedReferences self.mainWindowAction.triggered.connect(self.openMainWindow) self.toolbar.addAction(self.mainWindowAction) self.iface.QuickOSM_mainWindowDialog = MainWindowDialog() # OSM File self.osmFileAction = QAction( QIcon(':/plugins/QuickOSM/resources/open.png'), tr('ui_osm_file', 'OSM File'), self.iface.mainWindow()) # noinspection PyUnresolvedReferences self.osmFileAction.triggered.connect(self.openOsmFileDockWidget) self.iface.addPluginToWebMenu(u"&Quick OSM", self.osmFileAction) self.osmFileDockWidget = OsmFileDockWidget() self.iface.addDockWidget(Qt.RightDockWidgetArea, self.osmFileDockWidget) self.osmFileDockWidget.hide() self.osmFileDockWidget.setObjectName('osmFileWidget') # My queries self.myQueriesAction = QAction( QIcon(':/plugins/QuickOSM/resources/favorites.png'), tr('ui_my_queries', 'My queries'), self.iface.mainWindow()) # noinspection PyUnresolvedReferences self.myQueriesAction.triggered.connect(self.openMyQueriesDockWidget) self.iface.addPluginToWebMenu(u"&Quick OSM", self.myQueriesAction) self.myQueriesDockWidget = MyQueriesDockWidget() self.iface.addDockWidget(Qt.RightDockWidgetArea, self.myQueriesDockWidget) self.myQueriesDockWidget.hide() self.myQueriesDockWidget.setObjectName('myQueriesWidget') # Query self.queryAction = QAction( QIcon(':/plugins/QuickOSM/resources/edit.png'), tr('ui_query', 'Query'), self.iface.mainWindow()) # noinspection PyUnresolvedReferences self.queryAction.triggered.connect(self.openQueryDockWidget) self.iface.addPluginToWebMenu(u"&Quick OSM", self.queryAction) self.queryDockWidget = QueryDockWidget() self.iface.addDockWidget(Qt.RightDockWidgetArea, self.queryDockWidget) self.queryDockWidget.hide() self.queryDockWidget.setObjectName('queryWidget') # Quick query self.quickQueryAction = QAction( QIcon(':/plugins/QuickOSM/resources/quick.png'), tr('ui_quick_query', 'Quick query'), self.iface.mainWindow()) # noinspection PyUnresolvedReferences self.quickQueryAction.triggered.connect(self.openQuickQueryDockWidget) self.iface.addPluginToWebMenu(u"&Quick OSM", self.quickQueryAction) self.quickQueryDockWidget = QuickQueryDockWidget() self.iface.addDockWidget(Qt.RightDockWidgetArea, self.quickQueryDockWidget) self.quickQueryDockWidget.hide() self.quickQueryDockWidget.setObjectName('quickQueryWidget') # Insert in the good order self.quickosm_menu.addAction(self.mainWindowAction) self.quickosm_menu.addMenu(self.dock_menu) self.dock_menu.addAction(self.quickQueryAction) self.dock_menu.addAction(self.queryAction) self.dock_menu.addAction(self.myQueriesAction) self.dock_menu.addAction(self.osmFileAction) # Connect signals and slots from dock self.queryDockWidget.signal_new_query_successful.connect( self.iface.QuickOSM_mainWindowDialog.refresh_my_queries_tree) self.queryDockWidget.signal_new_query_successful.connect( self.myQueriesDockWidget.refresh_my_queries_tree) self.myQueriesDockWidget.signal_delete_query_successful.connect( self.myQueriesDockWidget.refresh_my_queries_tree) self.myQueriesDockWidget.signal_delete_query_successful.connect( self.iface.QuickOSM_mainWindowDialog.refresh_my_queries_tree) # Connect signals and slots from mainWindow self.iface.QuickOSM_mainWindowDialog.signal_new_query_successful.\ connect(self.myQueriesDockWidget.refresh_my_queries_tree) self.iface.QuickOSM_mainWindowDialog.signal_new_query_successful.\ connect( self.iface.QuickOSM_mainWindowDialog.refresh_my_queries_tree) self.iface.QuickOSM_mainWindowDialog.signal_delete_query_successful.\ connect(self.myQueriesDockWidget.refresh_my_queries_tree) self.iface.QuickOSM_mainWindowDialog.signal_delete_query_successful.\ connect( self.iface.QuickOSM_mainWindowDialog.refresh_my_queries_tree) # Read the config file json_file_config = join(dirname(abspath(__file__)), 'config.json') if isfile(json_file_config): config_json = load(open(json_file_config)) for server in config_json['overpass_servers']: self.iface.QuickOSM_mainWindowDialog.comboBox_default_OAPI.\ addItem(server) # Check previous version and if new queries are available version = get_setting('version') current_version = get_current_version() if version != current_version: if new_queries_available(): message = 'New queries are available in the plugin. Would ' \ 'like to install them ? This will overwrite the ' \ 'current default queries.' title = 'QuickOSM' message = tr('QuickOSM', message) widget = self.iface.messageBar().createMessage(title, message) button_ok = QPushButton(widget) button_ok.setText(tr('QuickOSM', 'Install')) button_ok.pressed.connect(self.restoreDefaultQueries) widget.layout().addWidget(button_ok) self.iface.messageBar().pushWidget(widget, QgsMessageBar.INFO, 0) set_setting('version', current_version)
def __init__(self, parent=None): """Constructor.""" QDialog.__init__(self) self.last_places = [] self.last_nominatim_places_filepath = join( get_OSMData_folder(), 'nominatim.txt') # Set up the user interface from Designer. # After setupUI you can access any designer object by doing # self.<objectname>, and you can use autoconnect slots - see # http://qt-project.org/doc/qt-4.8/designer-using-a-ui-file.html # #widgets-and-dialogs-with-auto-connect self.setupUi(self) registry = QgsMapLayerRegistry.instance() registry.layersAdded.connect(self.activate_extent_layer) registry.layersRemoved.connect(self.activate_extent_layer) # Setup UI self.label_progress.setText("") self.lineEdit_filePrefix.setDisabled(True) self.groupBox.setCollapsed(True) self.activate_extent_layer() self.groupBox.setCollapsed(True) self.comboBox_in_around.setDisabled(True) self.lineEdit_nominatim.setDisabled(True) self.radioButton_extentMapCanvas.setChecked(True) self.spinBox_distance_point.setDisabled(True) self.label_distance_point.setDisabled(True) # Setup in/around combobox self.comboBox_in_around.insertItem(0, tr('OSMDataDialogBase', u'Dans')) self.comboBox_in_around.insertItem(1, tr('OSMDataDialogBase', u'Autour')) # connect self.pushButton_runQuery.clicked.connect(self.run_query) self.pushButton_browse_output_file.clicked.connect( self.set_output_directory_path) self.comboBox_key.editTextChanged.connect(self.key_edited) self.lineEdit_browseDir.textEdited.connect(self.disable_prefix_file) self.radioButton_extentLayer.toggled.connect( self.allow_nominatim_or_extent) self.radioButton_extentMapCanvas.toggled.connect( self.allow_nominatim_or_extent) self.radioButton_place.toggled.connect(self.allow_nominatim_or_extent) self.pushButton_mapFeatures.clicked.connect(self.open_map_features) self.buttonBox.button(QDialogButtonBox.Reset).clicked.connect( self.reset_form) self.comboBox_in_around.currentIndexChanged.connect(self.in_or_around) # Setup auto completion map_features_json_file = join( dirname(abspath(__file__)), 'mapFeatures.json') if isfile(map_features_json_file): self.osmKeys = load(open(map_features_json_file)) keys = self.osmKeys.keys() keys.sort() keys_completer = QCompleter(keys) self.comboBox_key.addItems(keys) self.comboBox_key.setCompleter(keys_completer) self.comboBox_key.completer().setCompletionMode( QCompleter.PopupCompletion) self.key_edited() self.init_nominatim_autofill()
def run_query(self): """ Process for running the query """ # Block the button and save the initial text QApplication.setOverrideCursor(Qt.WaitCursor) self.pushButton_browse_output_file.setDisabled(True) self.start_process() QApplication.processEvents() # Get all values key = unicode(self.comboBox_key.currentText()) value = unicode(self.comboBox_value.currentText()) nominatim = self.nominatim_value() timeout = self.spinBox_timeout.value() output_directory = self.lineEdit_browseDir.text() prefix_file = self.lineEdit_filePrefix.text() if self.comboBox_in_around.currentIndex() == 1: is_around = True else: is_around = False distance = self.spinBox_distance_point.value() # Which geometry at the end ? output_geometry_types = self.get_output_geometry_types() # Which osm objects ? osm_objects = self._get_osm_objects() try: # Test values if not osm_objects: raise OsmObjectsException if not output_geometry_types: raise OutPutGeomTypesException # If bbox, we must set None to nominatim, we can't have both bbox = None if self.radioButton_extentLayer.isChecked() or \ self.radioButton_extentMapCanvas.isChecked(): nominatim = None bbox = self.get_bounding_box() if nominatim =='': nominatim = None if output_directory and not isdir(output_directory): raise DirectoryOutPutException num_layers = process_osm_data_query( dialog=self, key=key, value=value, nominatim=nominatim, is_around=is_around, distance=distance, bbox=bbox, osm_objects=osm_objects, timeout=timeout, output_directory=output_directory, prefix_file=prefix_file, output_geometry_types=output_geometry_types) # We can test numLayers to see if there are some results if num_layers: self.label_progress.setText( tr('OSMData', u'Successful query !')) display_message_bar( tr('OSMData', u'Successful query !'), level=QgsMessageBar.INFO, duration=5) else: self.label_progress.setText(tr("OSMData", u'No result')) display_message_bar( tr('OSMData', u'Successful query, but no result.'), level=QgsMessageBar.WARNING, duration=7) finally: # Resetting the button self.pushButton_browse_output_file.setDisabled(False) QApplication.restoreOverrideCursor() self.end_process() QApplication.processEvents()