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]
- 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]]
- description: str
- keywords: list[str]
- max_scale_denominator: float = inf
- min_scale_denominator: float = 1
- name: str
- 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:
CapabilitiesXMLParsingError – if XML parsing of GetCapabilities response failed
ExternalRequestError – if GetCapabilities request to WMS server failed
- 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