maps4fs 2.0.2__py3-none-any.whl → 2.0.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. maps4fs/__init__.py +3 -2
  2. maps4fs/generator/component/dem.py +1 -2
  3. maps4fs/generator/map.py +2 -1
  4. {maps4fs-2.0.2.dist-info → maps4fs-2.0.3.dist-info}/METADATA +4 -44
  5. maps4fs-2.0.3.dist-info/RECORD +27 -0
  6. maps4fs/generator/dtm/__init__.py +0 -27
  7. maps4fs/generator/dtm/arctic.py +0 -74
  8. maps4fs/generator/dtm/baden.py +0 -31
  9. maps4fs/generator/dtm/base/wcs.py +0 -80
  10. maps4fs/generator/dtm/base/wms.py +0 -71
  11. maps4fs/generator/dtm/bavaria.py +0 -113
  12. maps4fs/generator/dtm/canada.py +0 -37
  13. maps4fs/generator/dtm/czech.py +0 -36
  14. maps4fs/generator/dtm/denmark.py +0 -50
  15. maps4fs/generator/dtm/dtm.py +0 -543
  16. maps4fs/generator/dtm/england.py +0 -31
  17. maps4fs/generator/dtm/finland.py +0 -56
  18. maps4fs/generator/dtm/flanders.py +0 -34
  19. maps4fs/generator/dtm/france.py +0 -69
  20. maps4fs/generator/dtm/hessen.py +0 -31
  21. maps4fs/generator/dtm/italy.py +0 -40
  22. maps4fs/generator/dtm/lithuania.py +0 -66
  23. maps4fs/generator/dtm/mv.py +0 -42
  24. maps4fs/generator/dtm/niedersachsen.py +0 -38
  25. maps4fs/generator/dtm/norway.py +0 -41
  26. maps4fs/generator/dtm/nrw.py +0 -30
  27. maps4fs/generator/dtm/rema.py +0 -74
  28. maps4fs/generator/dtm/sachsenanhalt.py +0 -36
  29. maps4fs/generator/dtm/scotland.py +0 -118
  30. maps4fs/generator/dtm/spain.py +0 -33
  31. maps4fs/generator/dtm/srtm.py +0 -122
  32. maps4fs/generator/dtm/switzerland.py +0 -104
  33. maps4fs/generator/dtm/thuringia.py +0 -60
  34. maps4fs/generator/dtm/usgs_wcs.py +0 -35
  35. maps4fs/generator/dtm/utils.py +0 -61
  36. maps4fs/generator/dtm/wales.py +0 -123
  37. maps4fs-2.0.2.dist-info/RECORD +0 -58
  38. {maps4fs-2.0.2.dist-info → maps4fs-2.0.3.dist-info}/WHEEL +0 -0
  39. {maps4fs-2.0.2.dist-info → maps4fs-2.0.3.dist-info}/licenses/LICENSE.md +0 -0
  40. {maps4fs-2.0.2.dist-info → maps4fs-2.0.3.dist-info}/top_level.txt +0 -0
@@ -1,34 +0,0 @@
1
- """This module contains provider of Flanders data."""
2
-
3
- from maps4fs.generator.dtm.base.wcs import WCSProvider
4
- from maps4fs.generator.dtm.dtm import DTMProvider
5
-
6
-
7
- class FlandersProvider(WCSProvider, DTMProvider):
8
- """Provider of Flanders data."""
9
-
10
- _code = "flanders"
11
- _name = "Flanders DHM II"
12
- _region = "BE"
13
- _icon = "🇧🇪"
14
- _resolution = 1
15
- _author = "[kbrandwijk](https://github.com/kbrandwijk)"
16
- _is_community = True
17
- _is_base = False
18
- _extents = [(51.5150730375579684, 50.6694992827160817, 5.9444417082210812, 2.5170092434134252)]
19
-
20
- _url = "https://geo.api.vlaanderen.be/el-dtm/wcs"
21
- _wcs_version = "1.0.0"
22
- _source_crs = "EPSG:4258"
23
- _tile_size = 0.02
24
-
25
- def get_wcs_parameters(self, tile: tuple[float, float, float, float]) -> dict:
26
- return {
27
- "identifier": "EL.GridCoverage.DTM",
28
- "bbox": tile,
29
- "format": "GeoTIFF",
30
- "crs": "EPSG:4258",
31
- "width": 1000,
32
- "height": 1000,
33
- "timeout": 600,
34
- }
@@ -1,69 +0,0 @@
1
- """This module contains provider of France data."""
2
-
3
- import os
4
- import rasterio
5
- from maps4fs.generator.dtm import utils
6
- from maps4fs.generator.dtm.dtm import DTMProvider
7
-
8
-
9
- class FranceProvider(DTMProvider):
10
- """Provider of France data."""
11
-
12
- _code = "france"
13
- _name = "France RGE Alti 2.0"
14
- _region = "FR"
15
- _icon = "🇫🇷"
16
- _resolution = 1
17
- _author = "[kbrandwijk](https://github.com/kbrandwijk)"
18
- _is_community = True
19
-
20
- _url = "https://data.cquest.org/ign/rgealti/repack/cog/RGEALTI_2-0_1M_COG_LAMB93-IGN69_FXX.vrt"
21
- _is_base = False
22
- # no extents, because it also has a few colonies throughout the world
23
- _extents = [
24
- (51.2, 41.333, 9.55, -5.225), # France
25
- (8.6038842, 1.1710017, -61.414905, -56.4689543), # Guyana
26
- (16.5144664, 15.8320085, -61.809764, -61.0003663), # Guadeloupe
27
- (14.8787029, 14.3948596, -61.2290815, -60.8095833), # Martinique
28
- (-12.6365902, -13.0210119, 45.0183298, 45.2999917), # Mayotte
29
- (-20.8717136, -21.3897308, 55.2164268, 55.8366924), # Reunion
30
- (18.1375569, 17.670931, -63.06639, -62.5844019), # Saint Barthelemy
31
- (18.1902778, 17.8963535, -63.3605643, -62.7644063), # Saint Martin
32
- (47.365, 46.5507173, -56.6972961, -55.9033333), # Saint Pierre and Miquelon
33
- ]
34
-
35
- def download_tiles(self) -> list[str]:
36
- with rasterio.open(
37
- self.url,
38
- crs="EPSG:2154",
39
- ) as vrt_src:
40
- # Get bbox in EPSG:2154 in the right order
41
- bbox = self.get_bbox()
42
- bbox = utils.transform_bbox(bbox, "EPSG:2154")
43
- bbox = (bbox[0], bbox[3], bbox[1], bbox[2])
44
-
45
- # read the window of data from the vrt
46
- dst_window = vrt_src.window(*bbox)
47
- data = vrt_src.read(1, window=dst_window)
48
- width, height = data.shape[0], data.shape[1]
49
-
50
- # define the transform for the new raster telling where it is in the world
51
- transform = rasterio.transform.from_bounds(*bbox, width=width, height=height)
52
-
53
- # write it to a temporary file following the standard DTMProvider interface
54
- file_name = "_".join(map(str, bbox)) + ".tif"
55
- file_path = os.path.join(self._tile_directory, file_name)
56
- with rasterio.open(
57
- file_path,
58
- "w",
59
- driver="GTiff",
60
- crs="EPSG:2154",
61
- width=width,
62
- height=height,
63
- transform=transform,
64
- count=1,
65
- dtype=data.dtype,
66
- ) as dst:
67
- dst.write(data, indexes=1)
68
-
69
- return [file_path]
@@ -1,31 +0,0 @@
1
- """This module contains provider of Hessen data."""
2
-
3
- from maps4fs.generator.dtm.base.wcs import WCSProvider
4
- from maps4fs.generator.dtm.dtm import DTMProvider
5
-
6
-
7
- class HessenProvider(WCSProvider, DTMProvider):
8
- """Provider of Hessen data."""
9
-
10
- _code = "hessen"
11
- _name = "Hessen DGM1"
12
- _region = "DE"
13
- _icon = "🇩🇪󠁥"
14
- _resolution = 1
15
- _author = "[kbrandwijk](https://github.com/kbrandwijk)"
16
- _is_community = True
17
- _is_base = False
18
- _extents = [(51.66698, 49.38533, 10.25780, 7.72773)]
19
-
20
- _url = "https://inspire-hessen.de/raster/dgm1/ows"
21
- _wcs_version = "2.0.1"
22
- _source_crs = "EPSG:25832"
23
- _tile_size = 1000
24
-
25
- def get_wcs_parameters(self, tile: tuple[float, float, float, float]) -> dict:
26
- return {
27
- "identifier": ["he_dgm1"],
28
- "subsets": [("N", str(tile[0]), str(tile[2])), ("E", str(tile[1]), str(tile[3]))],
29
- "format": "image/gtiff",
30
- "timeout": 600,
31
- }
@@ -1,40 +0,0 @@
1
- """This module contains provider of Italy data."""
2
-
3
- from owslib.util import Authentication
4
-
5
- from maps4fs.generator.dtm.base.wcs import WCSProvider
6
- from maps4fs.generator.dtm.dtm import DTMProvider
7
-
8
-
9
- class ItalyProvider(WCSProvider, DTMProvider):
10
- """Provider of Italy data."""
11
-
12
- _code = "italy"
13
- _name = "Italy Tinitaly/1.1"
14
- _region = "IT"
15
- _icon = "🇮🇹"
16
- _resolution = 10
17
- _author = "[kbrandwijk](https://github.com/kbrandwijk)"
18
- _is_community = True
19
- _instructions = None
20
- _is_base = False
21
- _extents = [(47.15570815704503, 35.177652867276855, 19.720144130809693, 6.527697471770745)]
22
-
23
- _url = "http://tinitaly.pi.ingv.it/TINItaly_1_1/wcs"
24
- _wcs_version = "2.0.1"
25
- _source_crs = "EPSG:32632"
26
- _tile_size = 10000
27
-
28
- def get_wcs_instance_parameters(self):
29
- settings = super().get_wcs_instance_parameters()
30
- settings["auth"] = Authentication(
31
- verify=False,
32
- )
33
- return settings
34
-
35
- def get_wcs_parameters(self, tile):
36
- return {
37
- "identifier": ["TINItaly_1_1__tinitaly_dem"],
38
- "subsets": [("E", str(tile[1]), str(tile[3])), ("N", str(tile[0]), str(tile[2]))],
39
- "format": "image/tiff",
40
- }
@@ -1,66 +0,0 @@
1
- """This module contains provider of Lithuania data."""
2
-
3
- from typing import List
4
-
5
- import requests
6
-
7
- from maps4fs.generator.dtm.dtm import DTMProvider
8
- from maps4fs.generator.dtm.utils import tile_bbox
9
-
10
-
11
- class LithuaniaProvider(DTMProvider):
12
- """Provider of Lithuania data."""
13
-
14
- _code = "lithuania"
15
- _name = "Lithuania"
16
- _region = "LT"
17
- _icon = "🇱🇹"
18
- _resolution = 1.0
19
- _author = "[Tox3](https://github.com/Tox3)"
20
- _is_community = True
21
- _is_base = False
22
- _extents = [
23
- (
24
- 56.4501789128452,
25
- 53.8901567283941,
26
- 26.8198345671209,
27
- 20.9312456789123,
28
- )
29
- ]
30
- _max_tile_size = 4096
31
- _url = (
32
- "https://utility.arcgis.com/usrsvcs/servers/fef66dec83c14b0295180ecafa662aa0/"
33
- "rest/services/DTM_LT2020/ImageServer/exportImage"
34
- )
35
-
36
- def download_tiles(self) -> List[str]:
37
- """Download DTM tiles for Lithuania."""
38
- bbox = self.get_bbox()
39
- grid_size = max(1, self.size // self._max_tile_size)
40
- tile_size = (self.size / grid_size) / 111000 # Convert to degrees
41
-
42
- raw_tiles = tile_bbox(bbox, tile_size)
43
- # Fix coordinate swapping from utils.tile_bbox
44
- tiles = [(t[1], t[3], t[0], t[2]) for t in raw_tiles] # Reorder N,S,E,W correctly
45
-
46
- download_urls = []
47
- for i, (north, south, east, west) in enumerate(tiles):
48
- params = {
49
- "f": "json",
50
- "bbox": f"{west},{south},{east},{north}",
51
- "bboxSR": "4326",
52
- "imageSR": "3346",
53
- "format": "tiff",
54
- "pixelType": "F32",
55
- "size": f"{self._max_tile_size},{self._max_tile_size}",
56
- }
57
-
58
- response = requests.get(
59
- self.url, params=params, verify=False, timeout=60 # type: ignore
60
- )
61
- data = response.json()
62
- if "href" not in data:
63
- raise RuntimeError(f"No image URL in response for tile {i}")
64
- download_urls.append(data["href"])
65
-
66
- return self.download_tif_files(download_urls, self._tile_directory)
@@ -1,42 +0,0 @@
1
- """This module contains provider of Mecklenburg-Vorpommern data."""
2
-
3
- from maps4fs.generator.dtm.base.wcs import WCSProvider
4
- from maps4fs.generator.dtm.dtm import DTMProvider, DTMProviderSettings
5
-
6
-
7
- class MecklenburgVorpommernProviderSettings(DTMProviderSettings):
8
- """Settings for the Mecklenburg-Vorpommern provider."""
9
-
10
- dataset: dict | str = {
11
- "mv_dgm": "Mecklenburg-Vorpommern DGM1",
12
- "mv_dgm5": "Mecklenburg-Vorpommern DGM5",
13
- "mv_dgm25": "Mecklenburg-Vorpommern DGM25",
14
- }
15
-
16
-
17
- class MecklenburgVorpommernProvider(WCSProvider, DTMProvider):
18
- """Provider of Mecklenburg-Vorpommern data."""
19
-
20
- _code = "mv"
21
- _name = "Mecklenburg-Vorpommern"
22
- _region = "DE"
23
- _icon = "🇩🇪"
24
- _resolution = "1-25"
25
- _author = "[kbrandwijk](https://github.com/kbrandwijk)"
26
- _is_community = True
27
- _instructions = None
28
- _is_base = False
29
- _settings = MecklenburgVorpommernProviderSettings
30
- _extents = [(54.8, 53, 14.5, 10.5)]
31
-
32
- _url = "https://www.geodaten-mv.de/dienste/dgm_wcs"
33
- _wcs_version = "2.0.1"
34
- _source_crs = "EPSG:25833"
35
- _tile_size = 1000
36
-
37
- def get_wcs_parameters(self, tile):
38
- return {
39
- "identifier": [self.user_settings.dataset],
40
- "subsets": [("x", str(tile[1]), str(tile[3])), ("y", str(tile[0]), str(tile[2]))],
41
- "format": "image/tiff",
42
- }
@@ -1,38 +0,0 @@
1
- """This module contains provider of Niedersachsen data."""
2
-
3
- from maps4fs.generator.dtm.base.wms import WMSProvider
4
- from maps4fs.generator.dtm.dtm import DTMProvider
5
-
6
-
7
- class NiedersachsenProvider(WMSProvider, DTMProvider):
8
- """Provider of Niedersachsen data."""
9
-
10
- _code = "niedersachsen"
11
- _name = "Lower Saxony DGM1"
12
- _region = "DE"
13
- _icon = "🇩🇪󠁥󠁢󠁹󠁿"
14
- _resolution = 1
15
- _author = "[kbrandwijk](https://github.com/kbrandwijk)"
16
- _is_community = True
17
- _instructions = (
18
- "Warning: The Niedersachsen DGM1 data is provided as 8-bit Cloud Optimized GeoTIFF "
19
- "(whole meters only). You will need to use blur ('Blur Radius' under 'DEM Settings') "
20
- "to smooth the data."
21
- )
22
- _is_base = False
23
- _extents = [(54.148101, 51.153098, 11.754046, 6.505772)]
24
-
25
- _url = "https://opendata.lgln.niedersachsen.de/doorman/noauth/dgm_wms"
26
- _source_crs = "EPSG:25832"
27
- _tile_size = 2000
28
- _wms_version = "1.3.0"
29
-
30
- def get_wms_parameters(self, tile):
31
- return {
32
- "layers": ["ni_dgm1_grau"],
33
- "srs": "EPSG:25832",
34
- "bbox": (tile[1], tile[0], tile[3], tile[2]),
35
- "size": (2000, 2000),
36
- "format": "image/tiff",
37
- "transparent": False,
38
- }
@@ -1,41 +0,0 @@
1
- """This module contains provider of Norway data."""
2
-
3
- from maps4fs.generator.dtm.base.wcs import WCSProvider
4
- from maps4fs.generator.dtm.dtm import DTMProvider
5
-
6
-
7
- class NorwayProvider(WCSProvider, DTMProvider):
8
- """Provider of Norway data."""
9
-
10
- _code = "norway"
11
- _name = "Norway Topobathy"
12
- _region = "NO"
13
- _icon = "🇳🇴"
14
- _resolution = 1
15
- _author = "[kbrandwijk](https://github.com/kbrandwijk)"
16
- _is_community = True
17
- _instructions = None
18
- _is_base = False
19
- _extents = [
20
- (72.1016879476356962, 57.2738836442695103, 33.3365910058243742, -2.0075617181675725)
21
- ]
22
-
23
- _instructions = (
24
- "This is a topobathy dataset which means it includes water depth information as well. "
25
- "You do not have to manually set a water depth to get realistic water depths in your map."
26
- )
27
-
28
- _url = "https://wms.geonorge.no/skwms1/wcs.hoyde-dtm-nhm-topobathy-25833"
29
- _wcs_version = "1.0.0"
30
- _source_crs = "EPSG:25833"
31
- _tile_size = 1000
32
-
33
- def get_wcs_parameters(self, tile):
34
- return {
35
- "identifier": "nhm_dtm_topobathy_25833",
36
- "bbox": (tile[1], tile[0], tile[3], tile[2]),
37
- "crs": "EPSG:25833",
38
- "width": 1000,
39
- "height": 1000,
40
- "format": "tiff",
41
- }
@@ -1,30 +0,0 @@
1
- """This module contains provider of NRW data."""
2
-
3
- from maps4fs.generator.dtm.base.wcs import WCSProvider
4
- from maps4fs.generator.dtm.dtm import DTMProvider
5
-
6
-
7
- class NRWProvider(WCSProvider, DTMProvider):
8
- """Provider of NRW data."""
9
-
10
- _code = "NRW"
11
- _name = "North Rhine-Westphalia DGM1"
12
- _region = "DE"
13
- _icon = "🇩🇪󠁥󠁢󠁹󠁿"
14
- _resolution = 1
15
- _author = "[kbrandwijk](https://github.com/kbrandwijk)"
16
- _is_community = True
17
- _is_base = False
18
- _extents = [(52.6008271, 50.1506045, 9.5315425, 5.8923538)]
19
-
20
- _url = "https://www.wcs.nrw.de/geobasis/wcs_nw_dgm"
21
- _wcs_version = "2.0.1"
22
- _source_crs = "EPSG:25832"
23
- _tile_size = 1000
24
-
25
- def get_wcs_parameters(self, tile: tuple[float, float, float, float]) -> dict:
26
- return {
27
- "identifier": ["nw_dgm"],
28
- "subsets": [("y", str(tile[0]), str(tile[2])), ("x", str(tile[1]), str(tile[3]))],
29
- "format": "image/tiff",
30
- }
@@ -1,74 +0,0 @@
1
- """This module contains provider of Antarctic data."""
2
-
3
- import os
4
-
5
- import requests
6
-
7
- from maps4fs.generator.dtm.dtm import DTMProvider
8
-
9
-
10
- class REMAProvider(DTMProvider):
11
- """Provider of Antarctic data."""
12
-
13
- _code = "rema"
14
- _name = "REMA Antarctica"
15
- _region = "Global"
16
- _icon = "🌍"
17
- _resolution = 2
18
- _author = "[kbrandwijk](https://github.com/kbrandwijk)"
19
- _is_community = True
20
-
21
- _extents = [(-53.5443873459092, -53.5443873459092, 179.99698443265999, -180)]
22
-
23
- _instructions = (
24
- "This provider source includes 2 meter DEM data for the entire Antarctic region below 53 "
25
- "degrees South. The tiles are very big, around 1 GB each, so downloading and processing "
26
- "them can take a long time."
27
- )
28
-
29
- _url = "https://stac.pgc.umn.edu/api/v1/collections/rema-mosaics-v2.0-2m/items"
30
-
31
- def download_tiles(self):
32
- download_urls = self.get_download_urls()
33
- all_tif_files = self.download_tif_files(download_urls, self.shared_tiff_path)
34
- return all_tif_files
35
-
36
- def __init__(self, *args, **kwargs):
37
- super().__init__(*args, **kwargs)
38
- self.shared_tiff_path = os.path.join(self._tile_directory, "shared")
39
- os.makedirs(self.shared_tiff_path, exist_ok=True)
40
-
41
- def get_download_urls(self) -> list[str]:
42
- """Get download URLs of the GeoTIFF files from the OGC API.
43
-
44
- Returns:
45
- list: List of download URLs.
46
- """
47
- urls = []
48
-
49
- try:
50
- # Make the GET request
51
- north, south, east, west = self.get_bbox()
52
- response = requests.get( # pylint: disable=W3101
53
- self.url, # type: ignore
54
- params={
55
- "bbox": f"{west},{south},{east},{north}",
56
- "limit": "100",
57
- },
58
- timeout=60,
59
- )
60
- self.logger.debug("Getting file locations from REMA OGC API...")
61
-
62
- # Check if the request was successful (HTTP status code 200)
63
- if response.status_code == 200:
64
- # Parse the JSON response
65
- json_data = response.json()
66
- items = json_data["features"]
67
- for item in items:
68
- urls.append(item["assets"]["dem"]["href"])
69
- else:
70
- self.logger.error("Failed to get data. HTTP Status Code: %s", response.status_code)
71
- except requests.exceptions.RequestException as e:
72
- self.logger.error("Failed to get data. Error: %s", e)
73
- self.logger.debug("Received %s urls", len(urls))
74
- return urls
@@ -1,36 +0,0 @@
1
- """This module contains provider of Sachsen-Anhalt data."""
2
-
3
- from maps4fs.generator.dtm.base.wcs import WCSProvider
4
- from maps4fs.generator.dtm.dtm import DTMProvider
5
-
6
-
7
- class SachsenAnhaltProvider(WCSProvider, DTMProvider):
8
- """Provider of Sachsen-Anhalt data."""
9
-
10
- _code = "sachsen-anhalt"
11
- _name = "Sachsen-Anhalt"
12
- _region = "DE"
13
- _icon = "🇩🇪"
14
- _resolution = 1
15
- _author = "[kbrandwijk](https://github.com/kbrandwijk)"
16
- _is_community = True
17
- _is_base = False
18
- _extents = [
19
- (53.0769416826493412, 50.8927195980075453, 13.3232545527125836, 10.5092298520646867)
20
- ]
21
-
22
- _url = "https://www.geodatenportal.sachsen-anhalt.de/wss/service/ST_LVermGeo_DGM1_WCS_OpenData/guest" # pylint: disable=line-too-long
23
- _wcs_version = "1.0.0"
24
- _source_crs = "EPSG:4326"
25
- _tile_size = 0.02
26
-
27
- def get_wcs_parameters(self, tile: tuple[float, float, float, float]) -> dict:
28
- return {
29
- "identifier": "1",
30
- "bbox": tile,
31
- "format": "GeoTIFF",
32
- "crs": "EPSG:4326",
33
- "width": 1000,
34
- "height": 1000,
35
- "timeout": 600,
36
- }
@@ -1,118 +0,0 @@
1
- """This module contains provider of Scotland data."""
2
-
3
- import os
4
-
5
- import requests
6
-
7
- from maps4fs.generator.dtm.dtm import DTMProvider, DTMProviderSettings
8
-
9
-
10
- class ScotlandProviderSettings(DTMProviderSettings):
11
- """Settings for the Scotland provider."""
12
-
13
- dataset: dict | str = {
14
- "scotland-gov/lidar/phase-1/dtm": "LiDAR for Scotland Phase I DTM",
15
- "scotland-gov/lidar/phase-2/dtm": "LiDAR for Scotland Phase II DTM",
16
- "scotland-gov/lidar/phase-3/dtm": "LiDAR for Scotland Phase III DTM",
17
- "scotland-gov/lidar/phase-4/dtm": "LiDAR for Scotland Phase IV DTM",
18
- "scotland-gov/lidar/phase-5/dtm": "LiDAR for Scotland Phase V DTM",
19
- "scotland-gov/lidar/phase-6/dtm": "LiDAR for Scotland Phase VI DTM",
20
- "scotland-gov/lidar/hes/hes-2010/dtm": (
21
- "HES LiDAR Data Stirling City and surrounding area (2010) DTM"
22
- ),
23
- "scotland-gov/lidar/hes/hes-2010s10/dtm": (
24
- "LiDAR for Historic Environment Scotland Scottish Ten Project (2010) DTM"
25
- ),
26
- "scotland-gov/lidar/hes/hes-2016-2017/dtm": (
27
- "LiDAR for Historic Environment Scotland Projects (2016-2017 sub project 4) DTM"
28
- ),
29
- "scotland-gov/lidar/hes/hes-2016/dtm": (
30
- "LiDAR for Historic Environment Scotland Projects (2016) DTM"
31
- ),
32
- "scotland-gov/lidar/hes/hes-2017/dtm": (
33
- "LiDAR for Historic Environment Scotland Projects (2017) DTM"
34
- ),
35
- "scotland-gov/lidar/hes/hes-2017sp3/dtm": (
36
- "LiDAR for Historic Environment Scotland Project (2017 Sub Project 3) DTM"
37
- ),
38
- "scotland-gov/lidar/hes/hes-luing/dtm": (
39
- "LiDAR for Historic Environment Scotland Projects Isle of Luing DTM"
40
- ),
41
- "scotland-gov/lidar/outerheb-2019/dtm/25cm": "LiDAR for Outer Hebrides 2019 - 25cm DTM",
42
- "scotland-gov/lidar/outerheb-2019/dtm/50cm": "LiDAR for Outer Hebrides 2019 - 50cm DTM",
43
- }
44
-
45
-
46
- class ScotlandProvider(DTMProvider):
47
- """Provider of Scotland."""
48
-
49
- _code = "scotland"
50
- _name = "Scotland LiDAR"
51
- _region = "UK"
52
- _icon = "🏴󠁧󠁢󠁳󠁣󠁴󠁿"
53
- _resolution = "variable"
54
- _settings = ScotlandProviderSettings
55
- _author = "[kbrandwijk](https://github.com/kbrandwijk)"
56
- _is_community = True
57
- _instructions = (
58
- "Coverage for Scotland is very limited. "
59
- "Make sure to check the [coverage map](https://remotesensingdata.gov.scot/data#/map)."
60
- )
61
- _extents = [
62
- (60.2151105070992756, 54.5525982243521881, -1.1045617513147328, -6.7070796770431951)
63
- ]
64
-
65
- _url = "https://srsp-catalog.jncc.gov.uk/search/product"
66
-
67
- def download_tiles(self):
68
- download_urls = self.get_download_urls()
69
- all_tif_files = self.download_tif_files(download_urls, self.shared_tiff_path)
70
- return all_tif_files
71
-
72
- def __init__(self, *args, **kwargs):
73
- super().__init__(*args, **kwargs)
74
- self.shared_tiff_path = os.path.join(self._tile_directory, "shared")
75
- os.makedirs(self.shared_tiff_path, exist_ok=True)
76
-
77
- def get_download_urls(self) -> list[str]:
78
- """Get download URLs of the GeoTIFF files from the USGS API.
79
-
80
- Returns:
81
- list: List of download URLs.
82
- """
83
- urls = []
84
- try:
85
- # Make the GET request
86
- (north, south, east, west) = self.get_bbox()
87
- response = requests.post( # pylint: disable=W3101
88
- self.url, # type: ignore
89
- json={
90
- "collections": (
91
- [self.user_settings.dataset] if self.user_settings else [] # type: ignore
92
- ),
93
- "footprint": (
94
- f"POLYGON(({west} {south}, {west} {north}, "
95
- f"{east} {north}, {east} {south}, {west} {south}))"
96
- ),
97
- "offset": 0,
98
- "limit": 100,
99
- "spatialop": "intersects",
100
- },
101
- timeout=60,
102
- )
103
- self.logger.debug("Getting file locations from JNCC...")
104
-
105
- # Check if the request was successful (HTTP status code 200)
106
- if response.status_code == 200:
107
- # Parse the JSON response
108
- json_data = response.json()
109
- items = json_data["result"]
110
- for item in items:
111
- urls.append(item["data"]["product"]["http"]["url"])
112
- # self.download_tif_files(urls)
113
- else:
114
- self.logger.error("Failed to get data. HTTP Status Code: %s", response.status_code)
115
- except requests.exceptions.RequestException as e:
116
- self.logger.error("Failed to get data. Error: %s", e)
117
- self.logger.debug("Received %s urls", len(urls))
118
- return urls
@@ -1,33 +0,0 @@
1
- """This module contains provider of Spain data."""
2
-
3
- from maps4fs.generator.dtm.base.wcs import WCSProvider
4
- from maps4fs.generator.dtm.dtm import DTMProvider
5
-
6
-
7
- class SpainProvider(WCSProvider, DTMProvider):
8
- """Provider of Spain data."""
9
-
10
- _code = "spain"
11
- _name = "Spain"
12
- _region = "ES"
13
- _icon = "🇪🇸"
14
- _resolution = 5
15
- _author = "[kbrandwijk](https://github.com/kbrandwijk)"
16
- _is_community = True
17
- _is_base = False
18
- _extents = [
19
- (43.9299999999999997, 27.6299999999999990, 4.9400000000000004, -18.2100000000000009)
20
- ]
21
-
22
- _url = "https://servicios.idee.es/wcs-inspire/mdt"
23
- _wcs_version = "2.0.1"
24
- _source_crs = "EPSG:25830"
25
- _tile_size = 1000
26
-
27
- def get_wcs_parameters(self, tile: tuple[float, float, float, float]) -> dict:
28
- return {
29
- "identifier": ["Elevacion25830_5"],
30
- "subsets": [("y", str(tile[0]), str(tile[2])), ("x", str(tile[1]), str(tile[3]))],
31
- "format": "GEOTIFFINT16",
32
- "timeout": 600,
33
- }