Coverage for gws-app/gws/plugin/qgis/grabber.py: 100%
20 statements
« prev ^ index » next coverage.py v7.17.0, created at 2026-10-23 20:06 +0200
« prev ^ index » next coverage.py v7.17.0, created at 2026-10-23 20:06 +0200
1"""Raster grabber for QGIS Server."""
3import gws
4import gws.base.grabber.box
5import gws.lib.image
7from . import provider
9_GET_MAP_MIME_TYPES = [
10 'image/png',
11 'image/png; mode=8bit',
12 'image/png; mode=16bit',
13 'image/png; mode=1bit',
14 'image/jpeg',
15 'image/webp',
16]
17"""MIME types supported by QGIS Server GetMap requests."""
20class Object(gws.base.grabber.box.Object):
21 """Grabber that renders boxes with GetMap requests to QGIS Server."""
23 provider: provider.Object
24 """QGIS provider."""
25 params: dict
26 """Fixed GetMap parameters, e.g. ``LAYERS`` and ``FILTER``."""
27 sourceMimeType: str
28 """MIME type of GetMap requests, PNG if empty."""
30 def __init__(self, opts: gws.base.grabber.Options, provider: provider.Object, params: dict):
31 """Create the grabber.
33 Args:
34 opts: Grabber options.
35 provider: QGIS provider.
36 params: Fixed GetMap parameters, merged with per-request parameters.
37 """
38 super().__init__(opts)
39 self.provider = provider
40 self.params = params
41 self.sourceCrs = self.targetCrs
42 self.sourceMimeType = gws.lib.image.format.best_mime_type(self.imageFormat, _GET_MAP_MIME_TYPES)
44 def fetch_box_as_bytes(self, bounds, w, h, params=None):
45 return self.provider.get_map(
46 bounds,
47 w,
48 h,
49 gws.u.merge(self.params, params),
50 self.sourceMimeType,
51 )
53 def fetch_box_as_image(self, bounds, w, h, params=None):
54 return self.to_image(self.fetch_box_as_bytes(bounds, w, h, params))