maps4fs 1.8.16__py3-none-any.whl → 1.8.17__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.
maps4fs/__init__.py CHANGED
@@ -8,6 +8,13 @@ from maps4fs.generator.dtm.niedersachsen import NiedersachsenProvider
8
8
  from maps4fs.generator.dtm.hessen import HessenProvider
9
9
  from maps4fs.generator.dtm.england import England1MProvider
10
10
  from maps4fs.generator.dtm.canada import CanadaProvider
11
+ from maps4fs.generator.dtm.scotland import ScotlandProvider
12
+ from maps4fs.generator.dtm.finland import FinlandProvider
13
+ from maps4fs.generator.dtm.italy import ItalyProvider
14
+ from maps4fs.generator.dtm.flanders import FlandersProvider
15
+ from maps4fs.generator.dtm.spain import SpainProvider
16
+ from maps4fs.generator.dtm.france import FranceProvider
17
+ from maps4fs.generator.dtm.norway import NorwayProvider
11
18
  from maps4fs.generator.game import Game
12
19
  from maps4fs.generator.map import Map
13
20
  from maps4fs.generator.settings import (
@@ -30,6 +30,18 @@ class WCSProvider(DTMProvider):
30
30
  dict: The parameters for the WCS request.
31
31
  """
32
32
 
33
+ def get_wcs_instance_parameters(self) -> dict:
34
+ """Get the parameters for the WCS instance.
35
+
36
+ Returns:
37
+ dict: The parameters for the WCS instance.
38
+ """
39
+ return {
40
+ "url": self._url,
41
+ "version": self._wcs_version,
42
+ "timeout": 120,
43
+ }
44
+
33
45
  def __init__(self, *args, **kwargs):
34
46
  super().__init__(*args, **kwargs)
35
47
  self.shared_tiff_path = os.path.join(self._tile_directory, "shared")
@@ -53,12 +65,9 @@ class WCSProvider(DTMProvider):
53
65
  list: List of paths to the downloaded GeoTIFF files.
54
66
  """
55
67
  all_tif_files = []
56
- wcs = WebCoverageService(
57
- self._url,
58
- version=self._wcs_version,
59
- # auth=Authentication(verify=False),
60
- timeout=600,
61
- )
68
+ params = self.get_wcs_instance_parameters()
69
+ wcs = WebCoverageService(**params)
70
+
62
71
  for tile in tqdm(tiles, desc="Downloading tiles", unit="tile"):
63
72
  file_name = "_".join(map(str, tile)) + ".tif"
64
73
  file_path = os.path.join(self.shared_tiff_path, file_name)
@@ -4,6 +4,7 @@ from abc import abstractmethod
4
4
  import os
5
5
 
6
6
  from owslib.wms import WebMapService
7
+ from tqdm import tqdm
7
8
 
8
9
  from maps4fs.generator.dtm import utils
9
10
  from maps4fs.generator.dtm.dtm import DTMProvider
@@ -58,7 +59,7 @@ class WMSProvider(DTMProvider):
58
59
  # auth=Authentication(verify=False),
59
60
  timeout=600,
60
61
  )
61
- for tile in tiles:
62
+ for tile in tqdm(tiles, desc="Downloading tiles", unit="tile"):
62
63
  file_name = "_".join(map(str, tile)) + ".tif"
63
64
  file_path = os.path.join(self.shared_tiff_path, file_name)
64
65
  if not os.path.exists(file_path):
@@ -12,13 +12,14 @@ from zipfile import ZipFile
12
12
  import numpy as np
13
13
  import osmnx as ox # type: ignore
14
14
  import rasterio # type: ignore
15
- import requests
16
15
  from pydantic import BaseModel
17
16
  from rasterio.enums import Resampling
18
17
  from rasterio.merge import merge
19
18
  from rasterio.warp import calculate_default_transform, reproject
19
+ import requests
20
20
  from tqdm import tqdm
21
21
 
22
+
22
23
  from maps4fs.logger import Logger
23
24
 
24
25
  if TYPE_CHECKING:
@@ -395,28 +396,47 @@ class DTMProvider(ABC):
395
396
  list: List of paths to the downloaded GeoTIFF files.
396
397
  """
397
398
  tif_files: list[str] = []
398
- for url in tqdm(urls, desc="Downloading tiles", unit="tile"):
399
+
400
+ existing_file_urls = [
401
+ f for f in urls if os.path.exists(os.path.join(output_path, os.path.basename(f)))
402
+ ]
403
+
404
+ for url in existing_file_urls:
405
+ self.logger.debug("File already exists: %s", os.path.basename(url))
399
406
  file_name = os.path.basename(url)
400
- self.logger.debug("Retrieving TIFF: %s", file_name)
401
407
  file_path = os.path.join(output_path, file_name)
402
- if not os.path.exists(file_path):
403
- try:
404
- # Send a GET request to the file URL
405
- response = requests.get(url, stream=True, timeout=60)
406
- response.raise_for_status() # Raise an error for HTTP status codes 4xx/5xx
407
-
408
- # Write the content of the response to the file
409
- with open(file_path, "wb") as file:
410
- for chunk in response.iter_content(chunk_size=8192): # Download in chunks
411
- file.write(chunk)
412
- self.logger.debug("File downloaded successfully: %s", file_path)
413
- except requests.exceptions.RequestException as e:
414
- self.logger.error("Failed to download file: %s", e)
415
- else:
416
- self.logger.debug("File already exists: %s", file_name)
417
408
  if file_name.endswith(".zip"):
418
409
  file_path = self.unzip_img_from_tif(file_name, output_path)
419
410
  tif_files.append(file_path)
411
+
412
+ for url in tqdm(
413
+ (u for u in urls if u not in existing_file_urls),
414
+ desc="Downloading tiles",
415
+ unit="tile",
416
+ initial=len(tif_files),
417
+ ):
418
+ try:
419
+ file_name = os.path.basename(url)
420
+ file_path = os.path.join(output_path, file_name)
421
+ self.logger.debug("Retrieving TIFF: %s", file_name)
422
+
423
+ # Send a GET request to the file URL
424
+ response = requests.get(url, stream=True, timeout=60)
425
+ response.raise_for_status() # Raise an error for HTTP status codes 4xx/5xx
426
+
427
+ # Write the content of the response to the file
428
+ with open(file_path, "wb") as file:
429
+ for chunk in response.iter_content(chunk_size=8192):
430
+ file.write(chunk)
431
+
432
+ self.logger.debug("File downloaded successfully: %s", file_path)
433
+
434
+ if file_name.endswith(".zip"):
435
+ file_path = self.unzip_img_from_tif(file_name, output_path)
436
+
437
+ tif_files.append(file_path)
438
+ except requests.exceptions.RequestException as e:
439
+ self.logger.error("Failed to download file: %s", e)
420
440
  return tif_files
421
441
 
422
442
  def unzip_img_from_tif(self, file_name: str, output_path: str) -> str:
@@ -585,7 +605,7 @@ class DTMProvider(ABC):
585
605
  "Applying power factor: %s to the DEM data.",
586
606
  power_factor,
587
607
  )
588
- data = np.power(data, power_factor).astype(np.uint16)
608
+ data = np.power(data, power_factor)
589
609
 
590
610
  normalized_data = np.round(data * scaling_factor).astype(np.uint16)
591
611
  self.logger.debug(
@@ -0,0 +1,53 @@
1
+ """This module contains provider of Finland 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, DTMProviderSettings
7
+
8
+
9
+ class FinlandProviderSettings(DTMProviderSettings):
10
+ """Settings for the Finland provider."""
11
+
12
+ api_key: str = ""
13
+
14
+
15
+ class FinlandProvider(WCSProvider, DTMProvider):
16
+ """Provider of Finland data."""
17
+
18
+ _code = "finland"
19
+ _name = "Finland"
20
+ _region = "FI"
21
+ _icon = "🇫🇮"
22
+ _resolution = 2
23
+ _settings = FinlandProviderSettings
24
+ _author = "[kbrandwijk](https://github.com/kbrandwijk)"
25
+ _is_community = True
26
+ _is_base = False
27
+ _extents = (70.09, 59.45, 31.59, 19.08)
28
+
29
+ _url = "https://avoin-karttakuva.maanmittauslaitos.fi/ortokuvat-ja-korkeusmallit/wcs/v2"
30
+ _wcs_version = "2.0.1"
31
+ _source_crs = "EPSG:3067"
32
+ _tile_size = 1000
33
+
34
+ _instructions = (
35
+ "ℹ️ This provider requires an API Key. See [here](https://www.maanmittausl"
36
+ "aitos.fi/rajapinnat/api-avaimen-ohje) for more information on how to create one, then "
37
+ "enter it below in the settings field for API Key."
38
+ )
39
+
40
+ def get_wcs_instance_parameters(self):
41
+ settings = super().get_wcs_instance_parameters()
42
+ settings["auth"] = Authentication(
43
+ username=self.user_settings.api_key, password=self.user_settings.api_key
44
+ )
45
+ return settings
46
+
47
+ def get_wcs_parameters(self, tile: tuple[float, float, float, float]) -> dict:
48
+ return {
49
+ "identifier": ["korkeusmalli_2m"],
50
+ "subsets": [("N", str(tile[0]), str(tile[2])), ("E", str(tile[1]), str(tile[3]))],
51
+ "format": "image/tiff",
52
+ "timeout": 600,
53
+ }
@@ -0,0 +1,34 @@
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
+ }
@@ -0,0 +1,59 @@
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 = (54.148101, 51.153098, 11.754046, 6.505772)
24
+
25
+ def download_tiles(self) -> list[str]:
26
+ with rasterio.open(
27
+ self.url,
28
+ crs="EPSG:2154",
29
+ ) as vrt_src:
30
+ # Get bbox in EPSG:2154 in the right order
31
+ bbox = self.get_bbox()
32
+ bbox = utils.transform_bbox(bbox, "EPSG:2154")
33
+ bbox = (bbox[0], bbox[3], bbox[1], bbox[2])
34
+
35
+ # read the window of data from the vrt
36
+ dst_window = vrt_src.window(*bbox)
37
+ data = vrt_src.read(1, window=dst_window)
38
+ width, height = data.shape[0], data.shape[1]
39
+
40
+ # define the transform for the new raster telling where it is in the world
41
+ transform = rasterio.transform.from_bounds(*bbox, width=width, height=height)
42
+
43
+ # write it to a temporary file following the standard DTMProvider interface
44
+ file_name = "_".join(map(str, bbox)) + ".tif"
45
+ file_path = os.path.join(self._tile_directory, file_name)
46
+ with rasterio.open(
47
+ file_path,
48
+ "w",
49
+ driver="GTiff",
50
+ crs="EPSG:2154",
51
+ width=width,
52
+ height=height,
53
+ transform=transform,
54
+ count=1,
55
+ dtype=data.dtype,
56
+ ) as dst:
57
+ dst.write(data, indexes=1)
58
+
59
+ return [file_path]
@@ -0,0 +1,40 @@
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
+ }
@@ -4,7 +4,6 @@ from maps4fs.generator.dtm.base.wms import WMSProvider
4
4
  from maps4fs.generator.dtm.dtm import DTMProvider
5
5
 
6
6
 
7
- # pylint: disable=R0801
8
7
  class NiedersachsenProvider(WMSProvider, DTMProvider):
9
8
  """Provider of Niedersachsen data."""
10
9
 
@@ -0,0 +1,39 @@
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 = (72.1016879476356962, 57.2738836442695103, 33.3365910058243742, -2.0075617181675725)
20
+
21
+ _instructions = (
22
+ "This is a topobathy dataset which means it includes water depth information as well. "
23
+ "You do not have to manually set a water depth to get realistic water depths in your map."
24
+ )
25
+
26
+ _url = "https://wms.geonorge.no/skwms1/wcs.hoyde-dtm-nhm-topobathy-25833"
27
+ _wcs_version = "1.0.0"
28
+ _source_crs = "EPSG:25833"
29
+ _tile_size = 1000
30
+
31
+ def get_wcs_parameters(self, tile):
32
+ return {
33
+ "identifier": "nhm_dtm_topobathy_25833",
34
+ "bbox": (tile[1], tile[0], tile[3], tile[2]),
35
+ "crs": "EPSG:25833",
36
+ "width": 1000,
37
+ "height": 1000,
38
+ "format": "tiff",
39
+ }
@@ -0,0 +1,116 @@
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 = (60.2151105070992756, 54.5525982243521881, -1.1045617513147328, -6.7070796770431951)
62
+
63
+ _url = "https://srsp-catalog.jncc.gov.uk/search/product"
64
+
65
+ def download_tiles(self):
66
+ download_urls = self.get_download_urls()
67
+ all_tif_files = self.download_tif_files(download_urls, self.shared_tiff_path)
68
+ return all_tif_files
69
+
70
+ def __init__(self, *args, **kwargs):
71
+ super().__init__(*args, **kwargs)
72
+ self.shared_tiff_path = os.path.join(self._tile_directory, "shared")
73
+ os.makedirs(self.shared_tiff_path, exist_ok=True)
74
+
75
+ def get_download_urls(self) -> list[str]:
76
+ """Get download URLs of the GeoTIFF files from the USGS API.
77
+
78
+ Returns:
79
+ list: List of download URLs.
80
+ """
81
+ urls = []
82
+ try:
83
+ # Make the GET request
84
+ (north, south, east, west) = self.get_bbox()
85
+ response = requests.post( # pylint: disable=W3101
86
+ self.url, # type: ignore
87
+ json={
88
+ "collections": (
89
+ [self.user_settings.dataset] if self.user_settings else [] # type: ignore
90
+ ),
91
+ "footprint": (
92
+ f"POLYGON(({west} {south}, {west} {north}, "
93
+ f"{east} {north}, {east} {south}, {west} {south}))"
94
+ ),
95
+ "offset": 0,
96
+ "limit": 100,
97
+ "spatialop": "intersects",
98
+ },
99
+ timeout=60,
100
+ )
101
+ self.logger.debug("Getting file locations from JNCC...")
102
+
103
+ # Check if the request was successful (HTTP status code 200)
104
+ if response.status_code == 200:
105
+ # Parse the JSON response
106
+ json_data = response.json()
107
+ items = json_data["result"]
108
+ for item in items:
109
+ urls.append(item["data"]["product"]["http"]["url"])
110
+ # self.download_tif_files(urls)
111
+ else:
112
+ self.logger.error("Failed to get data. HTTP Status Code: %s", response.status_code)
113
+ except requests.exceptions.RequestException as e:
114
+ self.logger.error("Failed to get data. Error: %s", e)
115
+ self.logger.debug("Received %s urls", len(urls))
116
+ return urls
@@ -0,0 +1,31 @@
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 = (43.9299999999999997, 27.6299999999999990, 4.9400000000000004, -18.2100000000000009)
19
+
20
+ _url = "https://servicios.idee.es/wcs-inspire/mdt"
21
+ _wcs_version = "2.0.1"
22
+ _source_crs = "EPSG:25830"
23
+ _tile_size = 1000
24
+
25
+ def get_wcs_parameters(self, tile: tuple[float, float, float, float]) -> dict:
26
+ return {
27
+ "identifier": ["Elevacion25830_5"],
28
+ "subsets": [("y", str(tile[0]), str(tile[2])), ("x", str(tile[1]), str(tile[3]))],
29
+ "format": "GEOTIFFINT16",
30
+ "timeout": 600,
31
+ }
@@ -60,14 +60,17 @@ class USGSProvider(DTMProvider):
60
60
  Returns:
61
61
  list: List of download URLs.
62
62
  """
63
+ assert self.url is not None
64
+
63
65
  urls = []
64
66
  try:
65
67
  # Make the GET request
66
68
  (north, south, east, west) = self.get_bbox()
67
- response = requests.get( # pylint: disable=W3101
68
- self.url # type: ignore
69
+ response = requests.get(
70
+ self.url
69
71
  + f"&datasets={self.user_settings.dataset}" # type: ignore
70
- + f"&bbox={west},{north},{east},{south}"
72
+ + f"&bbox={west},{north},{east},{south}",
73
+ timeout=60,
71
74
  )
72
75
  self.logger.debug("Getting file locations from USGS...")
73
76
 
@@ -5,7 +5,7 @@ import numpy as np
5
5
  import trimesh # type: ignore
6
6
 
7
7
 
8
- # pylint: disable=R0801, R0914
8
+ # pylint: disable=R0914
9
9
  def plane_from_np(
10
10
  dem_data: np.ndarray,
11
11
  resize_factor: float,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: maps4fs
3
- Version: 1.8.16
3
+ Version: 1.8.17
4
4
  Summary: Generate map templates for Farming Simulator from real places.
5
5
  Author-email: iwatkot <iwatkot@gmail.com>
6
6
  License: MIT License
@@ -1,4 +1,4 @@
1
- maps4fs/__init__.py,sha256=j-7p1Qew6slQDJZ2zib0a9MbvhdPJ_R6ISY4Lmlvwms,909
1
+ maps4fs/__init__.py,sha256=iq4GcHoQ-by-BK6CzDOfVcdDww6osyi9Wv6pKXub68U,1307
2
2
  maps4fs/logger.py,sha256=B-NEYpMjPAAqlV4VpfTi6nbBFnEABVtQOaYe6nMpidg,1489
3
3
  maps4fs/generator/__init__.py,sha256=zZMLEkGzb4z0xql650gOtGSvcgX58DnJ2yN3vC2daRk,43
4
4
  maps4fs/generator/dem.py,sha256=RsIaL3LabYnZzow2fzmccsnzBo0m1YjcVVxUkJJGJMU,10735
@@ -21,22 +21,29 @@ maps4fs/generator/component/base/component_xml.py,sha256=6OO1dKoceO1ACk7-k1oGtnk
21
21
  maps4fs/generator/dtm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
22
  maps4fs/generator/dtm/bavaria.py,sha256=7njrEvSCYAC8ZVyvS-_84iXHhWA0oHKrEqSzxdnZuGs,4293
23
23
  maps4fs/generator/dtm/canada.py,sha256=lYONwm6aNX5cjVggR3AiZZF9dlCDAWg0M8RMaObog8s,1288
24
- maps4fs/generator/dtm/dtm.py,sha256=Ox4uo16L8T1JdDjsceNn74gvoL_o9qX7_YZ5pLHg3Dg,22732
24
+ maps4fs/generator/dtm/dtm.py,sha256=Bu6-wHH2MXxLmfSEz_LYjfRdXmzsvnTBs18qHgdta0E,23191
25
25
  maps4fs/generator/dtm/england.py,sha256=YyCYwnNUJuBeeMNUozfKIj_yNjHpGeuH1Mz0NiAJL-U,1122
26
+ maps4fs/generator/dtm/finland.py,sha256=Chi3-3sanLIYpipjtPpTu9tqnL3DYcnygSDCPm1s24c,1753
27
+ maps4fs/generator/dtm/flanders.py,sha256=81pKkrM40SeOe1LSlcsTNXSmUNpofC4D454DG6WFSyA,1037
28
+ maps4fs/generator/dtm/france.py,sha256=aPHrHiDr7nBND_yAh-xnhKeS5OJXJ3Qwb1s3Kkh5OJA,2050
26
29
  maps4fs/generator/dtm/hessen.py,sha256=dYu7TUXICaFMI1sc2l1i3ZDdM5fecXkj5jcz5ZuXIOw,964
27
- maps4fs/generator/dtm/niedersachsen.py,sha256=rHScUGrI8JYseBb3xeSN6mdZ7b28YgdlPVCMlluaAMM,1297
30
+ maps4fs/generator/dtm/italy.py,sha256=GCyEaNNLgNzjvvvpo8JfXTSijqeoG6TheOXNpSUWZaU,1222
31
+ maps4fs/generator/dtm/niedersachsen.py,sha256=8HS8suZU3lKe2mPR1FVCSNHSsW5AuebIu_De3mpCQe8,1273
32
+ maps4fs/generator/dtm/norway.py,sha256=kSsNZGEqb3IQ3a82UCJ_Iw_0wqdCgEvuRJ4JpEK7QYU,1269
28
33
  maps4fs/generator/dtm/nrw.py,sha256=1zMa10O0NdQbiTwOa7XXGrx3NhdHUqRXI4yBn_Scb2M,958
34
+ maps4fs/generator/dtm/scotland.py,sha256=Od4dDMuCM_iteewjGBbmZXJ26S0bDwrhRhXeV4HyyOA,4803
35
+ maps4fs/generator/dtm/spain.py,sha256=HxN0MvrtRqqeTmhl47q60-1DGaMDb2wq6neMcDlDCl8,1005
29
36
  maps4fs/generator/dtm/srtm.py,sha256=abggmxrR1rC22llkJ6kFle9MYLqP-raMc76O9qm6qag,4411
30
- maps4fs/generator/dtm/usgs.py,sha256=LYtbtecpluAsfS3vhJ2xpVKPbBWerTIJ2uqaM2UmBEw,3228
37
+ maps4fs/generator/dtm/usgs.py,sha256=1XzLP5GJbe6xcqzkOrEBUtR2SPw7gm6rl1nw5YXmBP8,3253
31
38
  maps4fs/generator/dtm/utils.py,sha256=I-wUSA_J85Xbt8sZCZAVKHSIcrMj5Ng-0adtPVhVmk0,2315
32
- maps4fs/generator/dtm/base/wcs.py,sha256=3Irnk9eJPsuRXe1GNpnEK4sWlbpPSJIJUT1V2W-qpKo,2278
33
- maps4fs/generator/dtm/base/wms.py,sha256=tevNGOf9VgGYBtc1TTd_oXWHLjU-nLowTIG8QShWDA0,2197
39
+ maps4fs/generator/dtm/base/wcs.py,sha256=UfkLNHqsYTr2ytjyZjWDocq2hFC_qyFCvl-_tnz6gHM,2510
40
+ maps4fs/generator/dtm/base/wms.py,sha256=hiupNvNjwDZs3oUE41R9OhDtsMgqQI0rfVBYKB4N7GE,2264
34
41
  maps4fs/toolbox/__init__.py,sha256=zZMLEkGzb4z0xql650gOtGSvcgX58DnJ2yN3vC2daRk,43
35
- maps4fs/toolbox/background.py,sha256=ym9a6TjZpRC2ButAUaQ_rwhOEuAo2ScwUQsXdJrV_Hs,2111
42
+ maps4fs/toolbox/background.py,sha256=RclEqxEWLbMxuEkkegQP8jybzugwQ1_R3rdfDe0s21U,2104
36
43
  maps4fs/toolbox/custom_osm.py,sha256=X6ZlPqiOhNjkmdD_qVroIfdOl9Rb90cDwVSLDVYgx80,1892
37
44
  maps4fs/toolbox/dem.py,sha256=z9IPFNmYbjiigb3t02ZenI3Mo8odd19c5MZbjDEovTo,3525
38
- maps4fs-1.8.16.dist-info/LICENSE.md,sha256=pTKD_oUexcn-yccFCTrMeLkZy0ifLRa-VNcDLqLZaIw,10749
39
- maps4fs-1.8.16.dist-info/METADATA,sha256=rTvChr7bK-RL24CWY6j0i4o3l9gMFfhlqWvHC4BKf6U,43207
40
- maps4fs-1.8.16.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
41
- maps4fs-1.8.16.dist-info/top_level.txt,sha256=Ue9DSRlejRQRCaJueB0uLcKrWwsEq9zezfv5dI5mV1M,8
42
- maps4fs-1.8.16.dist-info/RECORD,,
45
+ maps4fs-1.8.17.dist-info/LICENSE.md,sha256=pTKD_oUexcn-yccFCTrMeLkZy0ifLRa-VNcDLqLZaIw,10749
46
+ maps4fs-1.8.17.dist-info/METADATA,sha256=TRJU38laadwnDBkXQ9yJNPVQf06oq9FtJOfkQvTHxGQ,43207
47
+ maps4fs-1.8.17.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
48
+ maps4fs-1.8.17.dist-info/top_level.txt,sha256=Ue9DSRlejRQRCaJueB0uLcKrWwsEq9zezfv5dI5mV1M,8
49
+ maps4fs-1.8.17.dist-info/RECORD,,