コード例 #1
0
    def mdpset_to_layer(
        self, parser: Union[BasicTextParser, QuakeMlParser]
    ) -> QgsVectorLayer:  # pylint:disable=too-many-branches
        """
        Returns a new vector layer containing the reply contents
        """
        vl = self._create_empty_mdp_layer()

        features = []
        for f in parser.create_mdp_features(self.output_fields,
                                            self.preferred_mdp_only):
            features.append(f)

        ok, _ = vl.dataProvider().addFeatures(features)
        assert ok

        mdp_style_url = StyleUtils.style_url(
            self.styles[SERVICE_MANAGER.MACROSEISMIC]
        ) if SERVICE_MANAGER.MACROSEISMIC in self.styles else None

        if self.url:
            default_style_url = mdp_style_url or StyleUtils.default_style_for_macro_url(
            )
            err = StyleUtils.fetch_and_apply_style(vl, default_style_url)
            if err:
                self.message.emit(err, Qgis.Warning)
        elif self.service_config.get('mdpstyleurl'):
            err = StyleUtils.fetch_and_apply_style(
                vl, mdp_style_url or self.service_config.get('mdpstyleurl'))
            if err:
                self.message.emit(err, Qgis.Warning)
        elif isinstance(self.service_config.get('default', {}).get('style', {}), dict) and \
                self.service_config['default']['style'].get('mdp'):

            style_url = None
            style = self.service_config['default']['style']['mdp']

            if mdp_style_url:
                style_url = mdp_style_url
            else:
                style_ref = style.get('style')
                if style_ref:
                    style_url = SERVICE_MANAGER.get_style(style_ref)['url']

            if style_url:
                if isinstance(self.result, BasicTextParser):
                    style_attr = style.get('classified_attribute_text')
                else:
                    style_attr = self.result.remap_attribute_name(
                        SERVICE_MANAGER.MACROSEISMIC,
                        style.get('classified_attribute_xml'))

                err = StyleUtils.fetch_and_apply_style(vl, style_url,
                                                       style_attr)
                if err:
                    self.message.emit(err, Qgis.Warning)

        return vl
コード例 #2
0
    def stations_to_layer(self, fdsn: Optional[Fdsn]) -> QgsVectorLayer:  # pylint:disable=too-many-branches
        """
        Returns a new vector layer containing the reply contents
        """
        vl = self._create_empty_stations_layer()

        features = []
        if self.output_type == Fetcher.BASIC:
            for f in self.result.create_station_features():
                features.append(f)
        else:
            features.extend(fdsn.to_station_features(self.output_fields))

        ok, _ = vl.dataProvider().addFeatures(features)
        assert ok

        station_style_url = StyleUtils.style_url(
            self.styles[SERVICE_MANAGER.FDSNSTATION]
        ) if SERVICE_MANAGER.FDSNSTATION in self.styles else None

        if station_style_url or self.service_config.get('styleurl'):
            err = StyleUtils.fetch_and_apply_style(
                vl, station_style_url or self.service_config.get('styleurl'))
            if err:
                self.message.emit(err, Qgis.Warning)

        elif isinstance(self.service_config.get('default', {}).get('style', {}), dict) and \
                self.service_config['default']['style'].get('stations'):
            style = self.service_config['default']['style']['stations']

            style_url = None
            if station_style_url:
                style_url = station_style_url
            else:
                style_ref = style.get('style')
                if style_ref:
                    style_url = SERVICE_MANAGER.get_style(style_ref)['url']

            if style_url:
                if isinstance(self.result, BasicTextParser):
                    style_attr = style.get('classified_attribute_text')
                else:
                    style_attr = FDSNStationXMLParser.remap_attribute_name(
                        style.get('classified_attribute_xml'))

                err = StyleUtils.fetch_and_apply_style(vl, style_url,
                                                       style_attr)
                if err:
                    self.message.emit(err, Qgis.Warning)

        return vl
コード例 #3
0
        def _populate_style_combo(combo, service_type: str):
            """
            Populates a style combo with matching styles of the specified type
            """
            prev_entry = combo.currentText()
            combo.clear()
            styles = SERVICE_MANAGER.styles_for_service_type(service_type)
            for s in styles:
                combo.addItem(SERVICE_MANAGER.get_style(s)['label'], s)

            prev_index = combo.findData(prev_entry)
            if prev_index >= 0:
                combo.setCurrentIndex(prev_index)
            else:
                combo.setCurrentIndex(0)
コード例 #4
0
    def __init__(
            self,
            iface,  # pylint: disable=unused-argument,too-many-branches,too-many-statements
            service_type: str,
            service_id: str,
            parent: Optional[QWidget] = None):
        """Constructor."""
        super().__init__(parent)

        self.setupUi(self)

        self.qml_style_name_combo_events.addItem('')
        self.qml_style_name_combo_mdp.addItem('')
        self.qml_style_name_combo_stations.addItem('')

        self.label_qml_events.setVisible(
            service_type in (SERVICE_MANAGER.FDSNEVENT,
                             SERVICE_MANAGER.MACROSEISMIC))
        self.qml_style_url_edit_events.setVisible(
            service_type in (SERVICE_MANAGER.FDSNEVENT,
                             SERVICE_MANAGER.MACROSEISMIC))
        self.label_preset_style_events.setVisible(
            service_type in (SERVICE_MANAGER.FDSNEVENT,
                             SERVICE_MANAGER.MACROSEISMIC))
        self.qml_style_name_combo_events.setVisible(
            service_type in (SERVICE_MANAGER.FDSNEVENT,
                             SERVICE_MANAGER.MACROSEISMIC))
        self.label_mdp_url.setVisible(
            service_type == SERVICE_MANAGER.MACROSEISMIC)
        self.qml_style_url_edit_mdp.setVisible(
            service_type == SERVICE_MANAGER.MACROSEISMIC)
        self.qml_style_name_combo_mdp.setVisible(
            service_type == SERVICE_MANAGER.MACROSEISMIC)
        self.mdp_preset_label.setVisible(
            service_type == SERVICE_MANAGER.MACROSEISMIC)
        self.label_stations_url.setVisible(
            service_type == SERVICE_MANAGER.FDSNSTATION)
        self.qml_style_url_edit_stations.setVisible(
            service_type == SERVICE_MANAGER.FDSNSTATION)
        self.label_preset_name_stations.setVisible(
            service_type == SERVICE_MANAGER.FDSNSTATION)
        self.qml_style_name_combo_stations.setVisible(
            service_type == SERVICE_MANAGER.FDSNSTATION)

        for name in SERVICE_MANAGER.styles_for_service_type(
                SERVICE_MANAGER.FDSNEVENT):
            self.qml_style_name_combo_events.addItem(
                SERVICE_MANAGER.get_style(name)['label'], name)

        for name in SERVICE_MANAGER.styles_for_service_type(
                SERVICE_MANAGER.MACROSEISMIC):
            self.qml_style_name_combo_mdp.addItem(
                SERVICE_MANAGER.get_style(name)['label'], name)

        for name in SERVICE_MANAGER.styles_for_service_type(
                SERVICE_MANAGER.FDSNSTATION):
            self.qml_style_name_combo_stations.addItem(
                SERVICE_MANAGER.get_style(name)['label'], name)

        self.service_type = service_type
        self.service_id = service_id

        self.start_date_edit.setDisplayFormat("yyyy-MM-dd HH:mm:ss")
        self.end_date_edit.setDisplayFormat("yyyy-MM-dd HH:mm:ss")

        if service_id in SERVICE_MANAGER.available_services(service_type):
            config = SERVICE_MANAGER.service_details(service_type, service_id)
        else:
            # this is the default configuration for a newly created service!
            config = {'settings': {'outputxml': True, 'httpcodenodata': True}}
        self.set_state_from_config(config)

        self.title_edit.textChanged.connect(self._changed)
        self.web_service_url_edit.textChanged.connect(self._changed)

        self.combo_http_code_nodata.addItem('204', '204')

        for _, w in self.WIDGET_MAP.items():
            widget = getattr(self, w)
            if isinstance(widget, QCheckBox):
                widget.toggled.connect(self._changed)
            elif isinstance(widget, QSpinBox):
                widget.valueChanged.connect(self._changed)
        self.check_http_code_nodata.toggled.connect(self._changed)
        self.combo_http_code_nodata.currentIndexChanged.connect(self._changed)

        if self.service_type in (SERVICE_MANAGER.WMS, SERVICE_MANAGER.WFS,
                                 SERVICE_MANAGER.WCS):
            for w in [self.group_capabilities, self.group_bounding_box]:
                w.setEnabled(False)
                w.hide()
        else:
            self.group_ogc_layers.setEnabled(False)
            self.group_ogc_layers.hide()
            self.group_label.hide()
            self.group_edit.hide()

        if self.service_type == SERVICE_MANAGER.FDSNSTATION:
            for w in [
                    self.check_filter_by_eventid,
                    self.check_filter_by_originid,
                    self.check_filter_by_magnitudeid,
                    self.check_filter_by_focalmechanismid,
                    self.check_filter_by_catalog,
                    self.check_filter_by_contributor,
                    self.check_filter_by_contributorid,
                    self.check_filter_by_event_type,
                    self.check_filter_by_magnitude_type,
                    self.check_can_include_all_origins,
                    self.check_can_include_all_magnitudes,
                    self.check_can_include_all_origins_multiple,
                    self.check_can_include_all_magnitudes_multiple,
                    self.check_can_include_arrivals,
                    self.check_can_include_all_stations_magnitudes,
                    self.check_has_limit_of_entries,
                    self.spin_has_limit_of_entries,
                    self.check_can_filter_by_depth
            ]:
                w.setEnabled(False)

        self.button_load_service.clicked.connect(self._load_service)
        self._changed()
コード例 #5
0
ファイル: style_utils.py プロジェクト: INGV/qquake
 def style_url(style_name: str) -> str:
     """
     Returns the URL for the matching style
     """
     return SERVICE_MANAGER.get_style(style_name)['url']
コード例 #6
0
    def events_to_layer(
            self,  # pylint: disable=too-many-locals,too-many-branches
            parser: Union[BasicTextParser, QuakeMlParser],
            preferred_origin_only: bool,
            preferred_magnitudes_only: bool) -> Optional[QgsVectorLayer]:
        """
        Returns a new vector layer containing the reply contents
        """
        vl = self._create_empty_event_layer()

        features = []
        try:
            for f in parser.create_event_features(self.output_fields,
                                                  preferred_origin_only,
                                                  preferred_magnitudes_only):
                features.append(f)
        except MissingOriginException as e:
            self.message.emit(str(e), Qgis.Critical)
            return None

        ok, _ = vl.dataProvider().addFeatures(features)
        assert ok

        epicenter_style_url = StyleUtils.style_url(
            self.styles[SERVICE_MANAGER.FDSNEVENT]
        ) if SERVICE_MANAGER.FDSNEVENT in self.styles else None

        if self.url:
            default_style_url = epicenter_style_url or StyleUtils.default_style_for_events_url(
            )
            err = StyleUtils.fetch_and_apply_style(vl, default_style_url)
            if err:
                self.message.emit(err, Qgis.Warning)
        elif not self.url and (epicenter_style_url
                               or self.service_config.get('styleurl')):
            err = StyleUtils.fetch_and_apply_style(
                vl, epicenter_style_url or self.service_config.get('styleurl'))
            if err:
                self.message.emit(err, Qgis.Warning)
        elif not self.url and (
                epicenter_style_url or
            (isinstance(
                self.service_config.get('default', {}).get('style', {}), dict)
             and self.service_config['default']['style'].get('events'))):

            style_url = None
            if epicenter_style_url:
                style_url = epicenter_style_url
            else:
                style = self.service_config['default']['style']['events']

                style_ref = style.get('style')
                if style_ref:
                    style_url = SERVICE_MANAGER.get_style(style_ref)['url']

            if style_url:
                if isinstance(self.result, BasicTextParser):
                    style_attr = style.get('classified_attribute_text')
                else:
                    style_attr = self.result.remap_attribute_name(
                        SERVICE_MANAGER.FDSNEVENT,
                        style.get('classified_attribute_xml'))
                err = StyleUtils.fetch_and_apply_style(vl, style_url,
                                                       style_attr)
                if err:
                    self.message.emit(err, Qgis.Warning)

        return vl