Пример #1
0
    def setup_page(self, metadata):
        """Setup page (GUI components) from already existing metadata.

        Args:
            metadata (Dict[str, Any]): metadata object
        """
        dialog = self.dialog
        title = metadata.get('title')
        if title:
            dialog.project_title.setText(title)
        message = metadata.get('message')
        if message:
            dialog.message_text.insertPlainText(message.get('text', ''))
            valid_until = message.get('valid_until')
            dialog.message_valid_until.setDate(
                datetime.datetime.strptime(valid_until, "%d.%m.%Y")
            )
        expiration = metadata.get('expiration')
        if expiration:
            dialog.enable_expiration.setChecked(True)
            dialog.expiration.setDate(
                datetime.datetime.strptime(expiration, "%d.%m.%Y")
            )

        authentication = metadata.get('authentication')
        if authentication:
            try:
                auth_index = AUTHENTICATION_OPTIONS.index(authentication)
            except ValueError:
                auth_index = 1
            dialog.authentication.setCurrentIndex(auth_index)
        project_extent = list(metadata['extent'])
        extent_buffer = metadata.get('extent_buffer', 0)
        if extent_buffer != 0:
            project_extent = [
                project_extent[0]+extent_buffer,
                project_extent[1]+extent_buffer,
                project_extent[2]-extent_buffer,
                project_extent[3]-extent_buffer
            ]
        extent_index = dialog.extent_layer.findData(project_extent)
        if extent_index < 0:
            extent_index = 0
        dialog.extent_layer.setCurrentIndex(extent_index)
        dialog.use_mapcache.setChecked(metadata.get('use_mapcache') is True)
        dialog.extent_buffer.setValue(extent_buffer)
        # create list of all layers from layers metadata tree structure
        def extract_layers(layers_data, layers=None):
            if layers is None:
                layers = []
            for layer_data in layers_data:
                if 'layers' in layer_data:
                    extract_layers(layer_data['layers'], layers)
                else:
                    layers.append(layer_data)
            return layers

        if metadata.get('base_layers'):
            for base_layer in extract_layers(metadata['base_layers']):
                if base_layer['type'] == 'blank':
                    dialog.blank.setChecked(True)
                elif base_layer['type'] == 'osm':
                    dialog.osm.setChecked(True)
                elif base_layer['type'] == 'mapbox':
                    dialog.mapbox.setChecked(True)
                    if 'mapid' in base_layer:
                        index = dialog.mapbox_mapid.findText(base_layer['mapid'])
                        if index >= 0:
                            dialog.mapbox_mapid.setCurrentIndex(index)
                    if 'apikey' in base_layer:
                        dialog.mapbox_apikey.setText(base_layer['apikey'])
                elif base_layer['type'] == 'bing':
                    dialog.bing.setChecked(True)
                    for index, glayer in enumerate(BING_LAYERS):
                        if glayer['name'] == base_layer['name']:
                            dialog.bing_style.setCurrentIndex(index)
                            break
                    if 'apikey' in base_layer:
                        dialog.bing_apikey.setText(base_layer['apikey'])
                else:
                    # at least one base layer must be enabled (default is Blank)
                    dialog.blank.setChecked(True)

                if base_layer['visible']:
                    dialog.default_baselayer.setCurrentIndex(
                        dialog.default_baselayer.findText(base_layer['name'])
                    )
        else:
            # at least one base layer must be enabled (default is Blank)
            dialog.blank.setChecked(True)

        overlays_data = extract_layers(metadata['overlays'])
        project_overlays = [layer_data['name'] for layer_data in overlays_data]
        hidden_overlays = [
            layer_data['name'] for layer_data in overlays_data
                if layer_data.get('hidden')
        ]
        # Recursively setup layer widgets from prevoius info about layers types
        def load_layers_settings(group_item):
            for index in range(group_item.rowCount()):
                child_item = group_item.child(index)
                if child_item.data(Qt.UserRole):
                    layer_name = child_item.text()

                    child_item.setCheckState(
                        Qt.Checked if layer_name in project_overlays else Qt.Unchecked
                    )
                    if layer_name in hidden_overlays:
                        layers_model = child_item.model()
                        layers_model.columnItem(child_item, 1).setCheckState(Qt.Checked)
                else:
                    load_layers_settings(child_item)
        load_layers_settings(dialog.treeView.model().invisibleRootItem())

        max_res = metadata['tile_resolutions'][0]
        min_res = metadata['tile_resolutions'][-1]
        min_scale, max_scale = self.plugin.resolutions_to_scales(
            to_decimal_array([min_res, max_res])
        )
        min_scale_index = dialog.min_scale.findText("1:{0}".format(min_scale))
        max_scale_index = dialog.max_scale.findText("1:{0}".format(max_scale))
        dialog.min_scale.setCurrentIndex(
            min_scale_index if min_scale_index != -1 else dialog.min_scale.count() - 1
        )
        dialog.max_scale.setCurrentIndex(
            max_scale_index if min_scale_index != -1 else 0
        )
Пример #2
0
        1000000,
        500000,
        250000,
        100000,
        50000,
        25000,
        10000,
        5000,
        2500,
        1000,
        500
)

layer_resolutions = to_decimal_array(
    """156543.03390625,78271.516953125,39135.7584765625,19567.87923828125,9783.939619140625,
    4891.9698095703125,2445.9849047851562,1222.9924523925781,611.4962261962891,305.74811309814453,
    152.87405654907226,76.43702827453613,38.218514137268066,19.109257068634033,9.554628534317017,
    4.777314267158508,2.388657133579254,1.194328566789627,0.5971642833948135"""
)
layer_extent = [-16319611.284727, -5615981.3413867, 16319611.284727, 5615981.3413867]
BLANK_LAYER = {
    'name': 'Blank',
    'type': 'blank',
    'metadata': {
        'abstract': 'Blank base map layer.',
        'keyword_list': 'blank, world map'
    }
}
OSM_LAYER = {
    'name': 'OpenStreetMap',
    'type': 'osm',
    'resolutions': layer_resolutions,
Пример #3
0
        1000000,
        500000,
        250000,
        100000,
        50000,
        25000,
        10000,
        5000,
        2500,
        1000,
        500
)

layer_resolutions = to_decimal_array(
    """156543.03390625,78271.516953125,39135.7584765625,19567.87923828125,9783.939619140625,
    4891.9698095703125,2445.9849047851562,1222.9924523925781,611.4962261962891,305.74811309814453,
    152.87405654907226,76.43702827453613,38.218514137268066,19.109257068634033,9.554628534317017,
    4.777314267158508,2.388657133579254,1.194328566789627,0.5971642833948135"""
)
layer_extent = [-16319611.284727, -5615981.3413867, 16319611.284727, 5615981.3413867]
BLANK_LAYER = {
    'name': 'Blank',
    'type': 'blank',
    'metadata': {
        'abstract': 'Blank base map layer.',
        'keyword_list': 'blank, world map'
    }
}
OSM_LAYER = {
    'name': 'OpenStreetMap',
    'type': 'osm',
    'resolutions': layer_resolutions,
Пример #4
0
    def setup_page(self, metadata):
        """Setup page (GUI components) from already existing metadata.

        Args:
            metadata (Dict[str, Any]): metadata object
        """
        dialog = self.dialog
        title = metadata.get('title')
        if title:
            dialog.project_title.setText(title)
        message = metadata.get('message')
        if message:
            dialog.message_text.insertPlainText(message.get('text', ''))
            valid_until = message.get('valid_until')
            dialog.message_valid_until.setDate(
                datetime.datetime.strptime(valid_until, "%d.%m.%Y")
            )
        expiration = metadata.get('expiration')
        if expiration:
            dialog.enable_expiration.setChecked(True)
            dialog.expiration.setDate(
                datetime.datetime.strptime(expiration, "%d.%m.%Y")
            )

        authentication = metadata.get('authentication')
        if authentication:
            try:
                auth_index = AUTHENTICATION_OPTIONS.index(authentication)
            except ValueError:
                auth_index = 1
            dialog.authentication.setCurrentIndex(auth_index)
        project_extent = list(metadata['extent'])
        extent_buffer = metadata.get('extent_buffer', 0)
        if extent_buffer != 0:
            project_extent = [
                project_extent[0]+extent_buffer,
                project_extent[1]+extent_buffer,
                project_extent[2]-extent_buffer,
                project_extent[3]-extent_buffer
            ]
        extent_index = dialog.extent_layer.findData(project_extent)
        if extent_index < 0:
            extent_index = 0
        dialog.extent_layer.setCurrentIndex(extent_index)
        dialog.use_mapcache.setChecked(metadata.get('use_mapcache') is True)
        dialog.extent_buffer.setValue(extent_buffer)
        # create list of all layers from layers metadata tree structure
        def extract_layers(layers_data, layers=None):
            if layers is None:
                layers = []
            for layer_data in layers_data:
                if 'layers' in layer_data:
                    extract_layers(layer_data['layers'], layers)
                else:
                    layers.append(layer_data)
            return layers

        if metadata.get('base_layers'):
            for base_layer in extract_layers(metadata['base_layers']):
                if base_layer['type'] == 'blank':
                    dialog.blank.setChecked(True)
                elif base_layer['type'] == 'osm':
                    dialog.osm.setChecked(True)
                elif base_layer['type'] == 'mapbox':
                    dialog.mapbox.setChecked(True)
                    if 'mapid' in base_layer:
                        index = dialog.mapbox_mapid.findText(base_layer['mapid'])
                        if index >= 0:
                            dialog.mapbox_mapid.setCurrentIndex(index)
                    if 'apikey' in base_layer:
                        dialog.mapbox_apikey.setText(base_layer['apikey'])
                elif base_layer['type'] == 'bing':
                    dialog.bing.setChecked(True)
                    for index, glayer in enumerate(BING_LAYERS):
                        if glayer['name'] == base_layer['name']:
                            dialog.bing_style.setCurrentIndex(index)
                            break
                    if 'apikey' in base_layer:
                        dialog.bing_apikey.setText(base_layer['apikey'])
                else:
                    # at least one base layer must be enabled (default is Blank)
                    dialog.blank.setChecked(True)

                if base_layer['visible']:
                    dialog.default_baselayer.setCurrentIndex(
                        dialog.default_baselayer.findText(base_layer['name'])
                    )
        else:
            # at least one base layer must be enabled (default is Blank)
            dialog.blank.setChecked(True)

        overlays_data = extract_layers(metadata['overlays'])
        project_overlays = [layer_data['name'] for layer_data in overlays_data]
        hidden_overlays = [
            layer_data['name'] for layer_data in overlays_data
                if layer_data.get('hidden')
        ]
        # Recursively setup layer widgets from prevoius info about layers types
        def load_layers_settings(group_item):
            for index in range(group_item.rowCount()):
                child_item = group_item.child(index)
                if child_item.data(Qt.UserRole):
                    layer_name = child_item.text()

                    child_item.setCheckState(
                        Qt.Checked if layer_name in project_overlays else Qt.Unchecked
                    )
                    if layer_name in hidden_overlays:
                        layers_model = child_item.model()
                        layers_model.columnItem(child_item, 1).setCheckState(Qt.Checked)
                else:
                    load_layers_settings(child_item)
        load_layers_settings(dialog.treeView.model().invisibleRootItem())

        max_res = metadata['tile_resolutions'][0]
        min_res = metadata['tile_resolutions'][-1]
        min_scale, max_scale = self.plugin.resolutions_to_scales(
            to_decimal_array([min_res, max_res])
        )
        min_scale_index = dialog.min_scale.findText("1:{0}".format(min_scale))
        max_scale_index = dialog.max_scale.findText("1:{0}".format(max_scale))
        dialog.min_scale.setCurrentIndex(
            min_scale_index if min_scale_index != -1 else dialog.min_scale.count() - 1
        )
        dialog.max_scale.setCurrentIndex(
            max_scale_index if min_scale_index != -1 else 0
        )
Пример #5
0
	def setup_config_page_from_metadata(self, metadata):
		dialog = self.dialog
		title = metadata.get('title')
		if title:
			dialog.project_title.setText(title)
		message = metadata.get('message')
		if message:
			dialog.message_text.insertPlainText(message.get('text', ''))
			valid_until = message.get('valid_until')
			dialog.message_valid_until.setDate(datetime.datetime.strptime(valid_until, "%d.%m.%Y"))
		expiration = metadata.get('expiration')
		if expiration:
			dialog.enable_expiration.setChecked(True)
			dialog.expiration.setDate(datetime.datetime.strptime(expiration, "%d.%m.%Y"))

		authentication = metadata.get('authentication')
		if authentication:
			# backward compatibility
			if type(authentication) is dict:
				if authentication.get('allow_anonymous') and not authentication.get('require_superuser'):
					dialog.authentication.setCurrentIndex(0)
				if not authentication.get('allow_anonymous'):
					dialog.authentication.setCurrentIndex(1)
			else:
				auth_index = AUTHENTICATION_OPTIONS.index(authentication) if authentication in AUTHENTICATION_OPTIONS else 1
				dialog.authentication.setCurrentIndex(auth_index)
		project_extent = list(metadata['extent'])
		extent_buffer = metadata.get('extent_buffer', 0)
		if extent_buffer != 0:
			project_extent = [
				project_extent[0]+extent_buffer,
				project_extent[1]+extent_buffer,
				project_extent[2]-extent_buffer,
				project_extent[3]-extent_buffer
			]
		extent_index = dialog.extent_layer.findData(project_extent)
		if extent_index < 0:
			extent_index = 0
		dialog.extent_layer.setCurrentIndex(extent_index)
		dialog.use_mapcache.setChecked(metadata.get('use_mapcache') is True)
		dialog.extent_buffer.setValue(extent_buffer)
		# create list of all layers from layers metadata tree structure
		def extract_layers(layers_data, layers=None):
			if layers is None:
				layers = []
			for layer_data in layers_data:
				if 'layers' in layer_data:
					extract_layers(layer_data['layers'], layers)
				else:
					layers.append(layer_data)
			return layers

		if metadata.get('base_layers'):
			for base_layer in extract_layers(metadata['base_layers']):
				if base_layer['type'] == 'BLANK':
					dialog.blank.setChecked(True)
				elif base_layer['type'] == 'OSM':
					dialog.osm.setChecked(True)
				elif base_layer['type'] == 'google':
					for index, glayer in enumerate(GOOGLE_LAYERS, 1):
						if glayer['name'] == base_layer['name']:
							dialog.google.setCurrentIndex(index);
							break
				if base_layer['visible']:
					dialog.default_baselayer.setCurrentIndex(dialog.default_baselayer.findData(base_layer['name']))

		overlays_data = extract_layers(metadata['overlays'])
		geojson_overlays = metadata.get('vector_layers', {}).get('layers', {}).keys()
		project_overlays = [layer_data['name'] for layer_data in overlays_data]
		project_overlays.extend(geojson_overlays)
		hidden_overlays = [layer_data['name'] for layer_data in overlays_data if layer_data.get('hidden')]
		overlays_with_export_to_drawings = [layer_data['name'] for layer_data in overlays_data if layer_data.get('export_to_drawings')]
		def load_layers_settings(group_item):
			for index in range(group_item.rowCount()):
				child_item = group_item.child(index)
				if child_item.data(Qt.UserRole):
					layer_name = child_item.text()
					child_item.setCheckState(Qt.Checked if layer_name in project_overlays else Qt.Unchecked)
					layers_model = child_item.model()
					vector_item = layers_model.columnItem(child_item, 1)
					export_item = layers_model.columnItem(child_item, 2)
					if vector_item.isCheckable():
						vector_item.setCheckState(Qt.Checked if layer_name in geojson_overlays else Qt.Unchecked)
					if export_item.isCheckable():
						export_item.setCheckState(Qt.Checked if layer_name in overlays_with_export_to_drawings else Qt.Unchecked)
					layers_model.columnItem(child_item, 3).setCheckState(Qt.Checked if layer_name in hidden_overlays else Qt.Unchecked)
				else:
					load_layers_settings(child_item)
		load_layers_settings(dialog.treeView.model().invisibleRootItem())

		max_res = metadata['tile_resolutions'][0]
		min_res = metadata['tile_resolutions'][-1]
		min_scale, max_scale = self.plugin.resolutions_to_scales(to_decimal_array([min_res, max_res]))
		min_scale_index = dialog.min_scale.findText("1:{0}".format(min_scale))
		max_scale_index = dialog.max_scale.findText("1:{0}".format(max_scale))
		dialog.min_scale.setCurrentIndex(min_scale_index if min_scale_index != -1 else dialog.min_scale.count()-1)
		dialog.max_scale.setCurrentIndex(max_scale_index if min_scale_index != -1 else 0)