deseasion.backend.services.wms module

class deseasion.backend.services.wms.WMSCapabilities(url: str, version: str, layers: dict[str, WMSLayer], formats: list[str])

Bases: object

This dataclass holds information parsed from a WMS GetCapabilities query XML response.

formats: list[str]
layers: dict[str, WMSLayer]
property queryable_layers: dict[str, WMSLayer]

Return dictionary of queryable layers

url: str
version: str
class deseasion.backend.services.wms.WMSLayer(name: str, title: str, description: str, keywords: list[str], styles: list[str], srs: list[str], bbox: list[tuple[str, float, float, float, float]], min_scale_denominator: float = 1, max_scale_denominator: float = inf, parent: WMSLayer = None)

Bases: object

This dataclass is meant for holding information parsed from a <Layer> XML tag in a WMS GetCapabilities query response.

Todo

Add other srs options from server, and use them to make the projection server-side if possible. Must be able to compare srs on multiple formats for that…

bbox: list[tuple[str, float, float, float, float]]
property default_style: str

Default map style (first one from styles list)

description: str
keywords: list[str]
max_scale_denominator: float = inf
min_scale_denominator: float = 1
name: str
parent: WMSLayer = None
property queryable: bool

Return True if layer has sufficient information to be queryable.

Indeed because of layers tree structure, often root layer is a placeholder for default/common attributes but is not queryable.

srs: list[str]
styles: list[str]
title: str
deseasion.backend.services.wms.bbox_to_size(wg84_bbox: tuple[float, float, float, float], resolution: float) tuple[float, float]

Compute ideal image size from EPSG:4236 bounding box.

Parameters:
  • wg84_bbox – EPSG:4236 bounding box

  • resolution – maximum size of a pixel (in meters)

Returns:

image size

deseasion.backend.services.wms.choose_output_format(formats: list[str]) str

Choose preferred available output format.

Parameters:

formats – server available output formats

Returns:

chosen one

deseasion.backend.services.wms.convert_raw_crs(raw_crs: str) str

Convert a crs/srs XML tag content into a usable srs string.

Parameters:

raw_crs – crs/srs XML tag content

Returns:

srs/csr usable for projections

Note

This function is here for future proofing this module. Indeed for now, raw crs are directly usable, but it may change with future WMS versions.

deseasion.backend.services.wms.get_capabilities(url: str, version: str = None) WMSCapabilities

Perform WMS GetCapabilities request and parse informations.

Parameters:
  • url – WMS server URL

  • version – preferred WFS version number (actual is negotiated with server)

Raises:
Returns:

WMS server capabilities

deseasion.backend.services.wms.get_map(url: str, layer: str, version: str = None, bbox: tuple[float, float, float, float] = None, crs: str = None, style: str = None, format: str = None, size: tuple[float, float] = None, resolution: float = None, **kwargs) tuple[Any, Any]

Perform a WMS GetMap request and retrieve result.

Parameters:
  • url – WMS server URL

  • layer

  • version – WMS version preferred (actual is negotiated with server)

  • bbox – bounding box for image, defaults will take ‘best’ available bounding box (MUST also provide crs if set) from server

  • crs – coordinate reference system in which to return image, defaults will take ‘best’ available coordinate reference system from server

  • style – style to apply to image, defaults will take first one defined on server

  • format – image output format, defaults will choose the most appropriate output format for this application

  • size – size of image in pixels (width, height), defaults to None

  • resolution – resolution of 1 pixel in meters, defaults to 1000.0 (unused if size argument is set)

Raises:
  • KeyError – if we cannot find a server defined bounding box for user provided crs

  • ValueError – if size was not provided and cannot be inferred

  • UploadError – if the GetMap response could not be loaded into geodata

  • ExternalRequestError – if GetMap request to WMS server failed

  • CapabilitiesXMLParsingError – if XML parsing of GetCapabilities failed

Returns:

tuple with first result image then source object

deseasion.backend.services.wms.parse_capabilities(capabilities: Tag) tuple[str, WMSCapabilities, list[str]]

Parse a <WMS_Capabilities> XML tag for information.

Parameters:

capabilities – XML tag

Raises:

CapabilitiesXMLParsingError – if XML parsing of capabilities failed

Returns:

WMS server capabilities

deseasion.backend.services.wms.parse_layer(layer: Tag, version: str, parent: WMSLayer = None) WMSLayer

Parse a XML <Layer> tag.

Parameters:
  • layer – XML <Layer> tag

  • version – WMS version

;param parent: parent WMS layer if any :return: information describing the layer

deseasion.backend.services.wms.parse_layers_tree(layer_tag: Tag, version: str, parent: WMSLayer = None) dict[str, WMSLayer]

Parse a layer tag and all its subtags layers as well.

Parameters:
  • layer_tag

  • version – WMS version

  • parent – information about parent layer (some will be merged current layer to apply inherited attributes of parent), defaults to None

Returns:

information about all layers found in the tag tree