def accept(self): """Event handler for when OK is pressed.""" LOGGER.debug('run the tools') self.get_user_options() if self.site_layer is None: self.show_site_layer_information_message() return if self.parcel_layer is None: self.show_parcel_layer_information_message() return # check if no feature is selected if (not self.layer_has_selection(self.site_layer) and self.selected_sites_only.isChecked()): self.show_no_selection_warning() return if self.output_directory is '' or not os.path.exists( self.output_directory): self.show_output_directory_information_message() return message_bar = self.iface.messageBar().createMessage( self.tr('Download SG Diagram'), self.tr('Please stand by while download process is in progress.'), self.iface.mainWindow()) progress_bar = QProgressBar() progress_bar.setMaximumWidth(150) progress_bar.setAlignment(Qt.AlignLeft | Qt.AlignVCenter) message_bar.layout().addWidget(progress_bar) self.iface.messageBar().pushWidget( message_bar, self.iface.messageBar().INFO) self.message_bar = message_bar self.save_state() self.close() def progress_callback(current, maximum, message=None): """GUI based callback implementation for showing progress. :param current: Current progress. :type current: int :param maximum: Maximum range (point at which task is complete. :type maximum: int :param message: Optional message to display in the progress bar :type message: str, QString """ if message is not None: message_bar.setText(message) if progress_bar is not None: progress_bar.setMaximum(maximum) progress_bar.setValue(current) report = download_sg_diagrams( self.database_manager, self.site_layer, self.parcel_layer, self.sg_code_field, self.output_directory, self.all_features, callback=progress_callback) # Get rid of the message bar again. self.iface.messageBar().popWidget(message_bar) #QgsMapLayerRegistry.instance().addMapLayers([layer]) self.iface.messageBar().pushMessage( self.tr('Download completed.'), self.tr('Your files are available in %s.' % self.output_directory), level=QgsMessageBar.INFO, duration=10) write_log(report, self.log_file) self.show_log(report, self.log_file)
def canvasReleaseEvent(self, event): """Slot called when the mouse button is released on the canvas. :param event: Canvas event containing position of click, which button was clicked etc. """ if not event.button() == Qt.LeftButton: return def progress_callback(current, maximum, message=None): """GUI based callback implementation for showing progress. :param current: Current progress. :type current: int :param maximum: Maximum range (point at which task is complete. :type maximum: int :param message: Optional message to display in the progress bar :type message: str, QString """ if message is not None: self.message_bar.setText(message) if self.progress_bar is not None: self.progress_bar.setMaximum(maximum) self.progress_bar.setValue(current) self.iface.messageBar().pushMessage( self.tr('SG Downloader.'), self.tr('Preparing for download'), level=QgsMessageBar.INFO, duration=10) # No need to check that it is a valid, polygon layer # as the QAction for this map tool already does that layer = self.canvas.currentLayer() place = self.toMapCoordinates(event.pos()) rectangle = point_to_rectangle(place) request = QgsFeatureRequest(QgsFeatureRequest.FilterRect) # Ensure only those features really intersecting the rect are returned request.setFlags(QgsFeatureRequest.ExactIntersect) request.setFilterRect(rectangle) polygons = layer.getFeatures(request) feature = QgsFeature() fetch_list = [] all_fields = layer.pendingFields() text_fields = [] # Ignore any columns that don't contain text data for field in all_fields: if field.typeName() == 'String' or field.typeName() == 'Text': text_fields.append(field) self.setup_message_bar() sg_field = None while polygons.nextFeature(feature): # geom = feature.geometry() # attributes = feature.attributes() # matched = False # sg_code = None if sg_field is None: for field in text_fields: value = str(feature[field.name()]) if not is_valid_sg_code(value): continue sg_field = field.name() fetch_list.append(value) else: # We already know which column has SG codes value = str(feature[sg_field]) fetch_list.append(value) if len(fetch_list) == 0: self.iface.messageBar().pushMessage( self.tr('SG Downloader.'), self.tr('No parcels found with a valid 21 Digit code'), level=QgsMessageBar.WARNING, duration=10) return province = province_for_point(self.db_manager, place) report = '' sg_diagrams_database = os.path.join(DATA_DIR, 'sg_diagrams.sqlite') data_manager = DatabaseManager(sg_diagrams_database) i = 0 for sg_code in fetch_list: i += 1 message = 'Downloading SG Code %s from %s' % (sg_code, province) progress_callback(i, len(fetch_list), message) report += download_sg_diagram( data_manager, sg_code, province, self.output_directory, callback=progress_callback) data_manager.close() try: write_log(report, self.log_file) except IOError as e: print e self.show_log(report, self.log_file)
def canvasReleaseEvent(self, event): """Slot called when the mouse button is released on the canvas. :param event: Canvas event containing position of click, which button was clicked etc. """ if not event.button() == Qt.LeftButton: return def progress_callback(current, maximum, message=None): """GUI based callback implementation for showing progress. :param current: Current progress. :type current: int :param maximum: Maximum range (point at which task is complete. :type maximum: int :param message: Optional message to display in the progress bar :type message: str, QString """ if message is not None: self.message_bar.setText(message) if self.progress_bar is not None: self.progress_bar.setMaximum(maximum) self.progress_bar.setValue(current) self.iface.messageBar().pushMessage(self.tr('SG Downloader.'), self.tr('Preparing for download'), level=QgsMessageBar.INFO, duration=10) # No need to check that it is a valid, polygon layer # as the QAction for this map tool already does that layer = self.canvas.currentLayer() place = self.toMapCoordinates(event.pos()) rectangle = point_to_rectangle(place) request = QgsFeatureRequest(QgsFeatureRequest.FilterRect) # Ensure only those features really intersecting the rect are returned request.setFlags(QgsFeatureRequest.ExactIntersect) request.setFilterRect(rectangle) polygons = layer.getFeatures(request) feature = QgsFeature() fetch_list = [] all_fields = layer.pendingFields() text_fields = [] # Ignore any columns that don't contain text data for field in all_fields: if field.typeName() == 'String' or field.typeName() == 'Text': text_fields.append(field) self.setup_message_bar() sg_field = None while polygons.nextFeature(feature): # geom = feature.geometry() # attributes = feature.attributes() # matched = False # sg_code = None if sg_field is None: for field in text_fields: value = str(feature[field.name()]) if not is_valid_sg_code(value): continue sg_field = field.name() fetch_list.append(value) else: # We already know which column has SG codes value = str(feature[sg_field]) fetch_list.append(value) if len(fetch_list) == 0: self.iface.messageBar().pushMessage( self.tr('SG Downloader.'), self.tr('No parcels found with a valid 21 Digit code'), level=QgsMessageBar.WARNING, duration=10) return province = province_for_point(self.db_manager, place) report = '' sg_diagrams_database = os.path.join(DATA_DIR, 'sg_diagrams.sqlite') data_manager = DatabaseManager(sg_diagrams_database) i = 0 for sg_code in fetch_list: i += 1 message = 'Downloading SG Code %s from %s' % (sg_code, province) progress_callback(i, len(fetch_list), message) report += download_sg_diagram(data_manager, sg_code, province, self.output_directory, callback=progress_callback) data_manager.close() try: write_log(report, self.log_file) except IOError as e: print e self.show_log(report, self.log_file)
def accept(self): """Event handler for when OK is pressed.""" LOGGER.debug('run the tools') self.get_user_options() if self.site_layer is None: self.show_site_layer_information_message() return if self.parcel_layer is None: self.show_parcel_layer_information_message() return # check if no feature is selected if (not self.layer_has_selection(self.site_layer) and self.selected_sites_only.isChecked()): self.show_no_selection_warning() return if self.output_directory is '' or not os.path.exists( self.output_directory): self.show_output_directory_information_message() return message_bar = self.iface.messageBar().createMessage( self.tr('Download SG Diagram'), self.tr('Please stand by while download process is in progress.'), self.iface.mainWindow()) progress_bar = QProgressBar() progress_bar.setMaximumWidth(150) progress_bar.setAlignment(Qt.AlignLeft | Qt.AlignVCenter) message_bar.layout().addWidget(progress_bar) self.iface.messageBar().pushWidget(message_bar, self.iface.messageBar().INFO) self.message_bar = message_bar self.save_state() self.close() def progress_callback(current, maximum, message=None): """GUI based callback implementation for showing progress. :param current: Current progress. :type current: int :param maximum: Maximum range (point at which task is complete. :type maximum: int :param message: Optional message to display in the progress bar :type message: str, QString """ if message is not None: message_bar.setText(message) if progress_bar is not None: progress_bar.setMaximum(maximum) progress_bar.setValue(current) report = download_sg_diagrams(self.database_manager, self.site_layer, self.parcel_layer, self.sg_code_field, self.output_directory, self.all_features, callback=progress_callback) # Get rid of the message bar again. self.iface.messageBar().popWidget(message_bar) #QgsMapLayerRegistry.instance().addMapLayers([layer]) self.iface.messageBar().pushMessage( self.tr('Download completed.'), self.tr('Your files are available in %s.' % self.output_directory), level=QgsMessageBar.INFO, duration=10) write_log(report, self.log_file) self.show_log(report, self.log_file)