From 68a6a84fc66e1a4be9eb469210eaac1341c3fd81 Mon Sep 17 00:00:00 2001 From: Matthias Cuntz Date: Sun, 11 Jun 2023 00:58:06 +0200 Subject: [PATCH] Enhanced OGC reader Added support for general EPSG projections in OGC clients WMSRasterSource, WMTSRasterSource, and WFSGeometrySource. Try to determine geometries from other map servers than the hard-coded mapserver.gis.umn.edu. --- lib/cartopy/io/ogc_clients.py | 125 +++++++++++++----- .../mpl/test_features/wfs_france.png | Bin 0 -> 43097 bytes lib/cartopy/tests/mpl/test_features.py | 14 ++ 3 files changed, 109 insertions(+), 30 deletions(-) create mode 100644 lib/cartopy/tests/mpl/baseline_images/mpl/test_features/wfs_france.png diff --git a/lib/cartopy/io/ogc_clients.py b/lib/cartopy/io/ogc_clients.py index 39fdbd6ee..b4d9428ac 100644 --- a/lib/cartopy/io/ogc_clients.py +++ b/lib/cartopy/io/ogc_clients.py @@ -19,6 +19,7 @@ import collections import io import math +from urllib.parse import urlparse import warnings import weakref from xml.etree import ElementTree @@ -412,7 +413,12 @@ def find_projection(match_projection): matrix_sets = self.wmts.tilematrixsets tile_matrix_set = matrix_sets[tile_matrix_set_name] crs_urn = tile_matrix_set.crs - tms_crs = _URN_TO_CRS.get(crs_urn) + tms_crs = None + if crs_urn in _URN_TO_CRS: + tms_crs = _URN_TO_CRS.get(crs_urn) + elif ':EPSG:' in crs_urn: + epsg_num = crs_urn.split(':')[-1] + tms_crs = ccrs.epsg(int(epsg_num)) if tms_crs == match_projection: result = tile_matrix_set_name break @@ -422,6 +428,7 @@ def find_projection(match_projection): matrix_set_name = find_projection(target_projection) if matrix_set_name is None: # Search instead for a set in _any_ projection we can use. + # Nothing to do for EPSG for possible_projection in _URN_TO_CRS.values(): # Look for supported projections (in a preferred order). matrix_set_name = find_projection(possible_projection) @@ -445,8 +452,15 @@ def validate_projection(self, projection): def fetch_raster(self, projection, extent, target_resolution): matrix_set_name = self._matrix_set_name(projection) - wmts_projection = _URN_TO_CRS[ - self.wmts.tilematrixsets[matrix_set_name].crs] + crs_urn = self.wmts.tilematrixsets[matrix_set_name].crs + if crs_urn in _URN_TO_CRS: + wmts_projection = _URN_TO_CRS[crs_urn] + elif ':EPSG:' in crs_urn: + epsg_num = crs_urn.split(':')[-1] + wmts_projection = ccrs.epsg(int(epsg_num)) + else: + raise ValueError(f'Unknown coordinate reference system string:' + f' {crs_urn}') if wmts_projection == projection: wmts_extents = [extent] @@ -574,7 +588,25 @@ def _wmts_images(self, wmts, layer, matrix_set_name, extent, # Find which tile matrix has the appropriate resolution. tile_matrix_set = wmts.tilematrixsets[matrix_set_name] tile_matrices = tile_matrix_set.tilematrix.values() - meters_per_unit = METERS_PER_UNIT[tile_matrix_set.crs] + if tile_matrix_set.crs in METERS_PER_UNIT: + meters_per_unit = METERS_PER_UNIT[tile_matrix_set.crs] + elif ':EPSG:' in tile_matrix_set.crs: + epsg_num = tile_matrix_set.crs.split(':')[-1] + tms_crs = ccrs.epsg(int(epsg_num)) + # catch UserWarning from .to_dict(), because the resulting + # dictionary does not contain all information for all projections; + # need only 'units' here + with warnings.catch_warnings(): + warnings.simplefilter("ignore") + crs_dict = tms_crs.to_dict() + crs_units = crs_dict.get('units', '') + if crs_units != 'm': + raise ValueError('Only unit "m" implemented for' + ' EPSG projections.') + meters_per_unit = 1 + else: + raise ValueError(f'Unknown coordinate reference system string:' + f' {tile_matrix_set.crs}') tile_matrix = self._choose_matrix(tile_matrices, meters_per_unit, max_pixel_span) @@ -666,7 +698,15 @@ def __init__(self, service, features, getfeature_extra_kwargs=None): raise ImportError(_OWSLIB_REQUIRED) if isinstance(service, str): + # host name such as mapserver.gis.umn.edu or + # agroenvgeo.data.inra.fr from full address + # http://mapserver.gis.umn.edu/mapserver + # or https://agroenvgeo.data.inra.fr:443/geoserver/wfs + self.url = urlparse(service).hostname + # WebFeatureService of owslib service = WebFeatureService(service) + else: + self.url = '' if isinstance(features, str): features = [features] @@ -703,14 +743,22 @@ def default_projection(self): else: default_urn = default_urn.pop() - if str(default_urn) not in _URN_TO_CRS: + if (str(default_urn) not in _URN_TO_CRS) and ( + ":EPSG:" not in str(default_urn) + ): raise ValueError( - f'Unknown mapping from SRS/CRS_URN {default_urn!r} to ' - 'cartopy projection.') - + f"Unknown mapping from SRS/CRS_URN {default_urn!r} to " + "cartopy projection.") self._default_urn = default_urn - return _URN_TO_CRS[str(self._default_urn)] + if str(self._default_urn) in _URN_TO_CRS: + return _URN_TO_CRS[str(self._default_urn)] + elif ':EPSG:' in str(self._default_urn): + epsg_num = str(self._default_urn).split(':')[-1] + return ccrs.epsg(int(epsg_num)) + else: + raise ValueError(f'Unknown coordinate reference system:' + f' {str(self._default_urn)}') def fetch_geometries(self, projection, extent): """ @@ -757,12 +805,20 @@ def fetch_geometries(self, projection, extent): geom_proj = _URN_TO_CRS[srs] if geom_proj != projection: raise ValueError( - 'The geometries are not in expected projection. ' + f'The geometries are not in expected projection. ' f'Expected {projection!r}, got {geom_proj!r}.') + elif ':EPSG:' in srs: + epsg_num = srs.split(':')[-1] + geom_proj = ccrs.epsg(int(epsg_num)) + if geom_proj != projection: + raise ValueError( + f'The EPSG geometries are not in expected ' + f' projection. Expected {projection!r}, ' + f' got {geom_proj!r}.') else: warnings.warn( - 'Unable to verify matching projections due to ' - 'incomplete mappings from SRS identifiers to cartopy ' + f'Unable to verify matching projections due to ' + f'incomplete mappings from SRS identifiers to cartopy ' f'projections. The geometries have an SRS of {srs!r}.') return geoms @@ -788,24 +844,33 @@ def _to_shapely_geoms(self, response): points_data = [] tree = ElementTree.parse(response) - for node in tree.findall(f'.//{_MAP_SERVER_NS}msGeometry'): - # Find LinearRing geometries in our msGeometry node. - find_str = f'.//{_GML_NS}LinearRing' - if self._node_has_child(node, find_str): - data = self._find_polygon_coords(node, find_str) - linear_rings_data.extend(data) - - # Find LineString geometries in our msGeometry node. - find_str = f'.//{_GML_NS}LineString' - if self._node_has_child(node, find_str): - data = self._find_polygon_coords(node, find_str) - linestrings_data.extend(data) - - # Find Point geometries in our msGeometry node. - find_str = f'.//{_GML_NS}Point' - if self._node_has_child(node, find_str): - data = self._find_polygon_coords(node, find_str) - points_data.extend(data) + # Get geometries from http://mapserver.gis.umn.edu/mapserver + # and other servers + for node in tree.iter(): + snode = str(node) + if ((_MAP_SERVER_NS in snode) or + (self.url and (self.url in snode) + )): + s1 = snode.split()[1] + tag = s1[s1.find('}') + 1:-1] + if ('geom' in tag) or ('Geom' in tag): + # Find LinearRing geometries in our msGeometry node. + find_str = f'.//{_GML_NS}LinearRing' + if self._node_has_child(node, find_str): + data = self._find_polygon_coords(node, find_str) + linear_rings_data.extend(data) + + # Find LineString geometries in our msGeometry node. + find_str = f'.//{_GML_NS}LineString' + if self._node_has_child(node, find_str): + data = self._find_polygon_coords(node, find_str) + linestrings_data.extend(data) + + # Find Point geometries in our msGeometry node. + find_str = f'.//{_GML_NS}Point' + if self._node_has_child(node, find_str): + data = self._find_polygon_coords(node, find_str) + points_data.extend(data) geoms_by_srs = {} for srs, x, y in linear_rings_data: diff --git a/lib/cartopy/tests/mpl/baseline_images/mpl/test_features/wfs_france.png b/lib/cartopy/tests/mpl/baseline_images/mpl/test_features/wfs_france.png new file mode 100644 index 0000000000000000000000000000000000000000..cbfc8fc03829efcd7c961887b1949b553d48c4d7 GIT binary patch literal 43097 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