Skip to content

Commit

Permalink
Lithuania DTM provider
Browse files Browse the repository at this point in the history
* Lithuania DTM provider

* Lithuania DTM refactor

* Lithuania DTM provider tile fix

* Import fix

* Add LT info to readme

* Imports fix
  • Loading branch information
Tox3 authored Jan 27, 2025
1 parent db02a7e commit f2b5ab2
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 1 deletion.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -684,6 +684,8 @@ In addition to SRTM 30m, which provides global coverage, the map above highlight
| 🇩🇰 Denmark | 0.4 meter | [kbrandwijk](https://github.com/kbrandwijk) |
| 🇨🇭 Switzerland | 0.5-2 meter | [kbrandwijk](https://github.com/kbrandwijk) |
| 🇨🇿 Czech Republic | 5 meter | [kbrandwijk](https://github.com/kbrandwijk) |
| 🇱🇹 Lithuania | 1 meter | [Tox3](https://github.com/Tox3) |


## Special thanks

Expand Down
2 changes: 1 addition & 1 deletion maps4fs/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@
from maps4fs.generator.dtm.dtm import DTMProvider
from maps4fs.generator.game import Game
from maps4fs.generator.map import Map
from maps4fs.logger import Logger
from maps4fs.logger import Logger
1 change: 1 addition & 0 deletions maps4fs/generator/dtm/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
from maps4fs.generator.dtm.france import FranceProvider
from maps4fs.generator.dtm.hessen import HessenProvider
from maps4fs.generator.dtm.italy import ItalyProvider
from maps4fs.generator.dtm.lithuania import LithuaniaProvider
from maps4fs.generator.dtm.mv import MecklenburgVorpommernProvider
from maps4fs.generator.dtm.niedersachsen import NiedersachsenProvider
from maps4fs.generator.dtm.norway import NorwayProvider
Expand Down
49 changes: 49 additions & 0 deletions maps4fs/generator/dtm/lithuania.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
"""This module contains provider of Lithuania data."""

from typing import List
import requests
from maps4fs.generator.dtm.dtm import DTMProvider
from maps4fs.generator.dtm.utils import tile_bbox

class LithuaniaProvider(DTMProvider):
_code = "lithuania"
_name = "Lithuania"
_region = "LT"
_icon = "🇱🇹"
_resolution = 1.0
_author = "[Tox3](https://github.com/Tox3)"
_is_community = True
_is_base = False
_extents = (56.4501789128452, 53.8901567283941, 26.8198345671209, 20.9312456789123)
_max_tile_size = 4096
_url = "https://utility.arcgis.com/usrsvcs/servers/fef66dec83c14b0295180ecafa662aa0/rest/services/DTM_LT2020/ImageServer/exportImage"

def download_tiles(self) -> List[str]:
"""Download DTM tiles for Lithuania."""
bbox = self.get_bbox()
grid_size = max(1, self.size // self._max_tile_size)
tile_size = (self.size / grid_size) / 111000 # Convert to degrees

raw_tiles = tile_bbox(bbox, tile_size)
# Fix coordinate swapping from utils.tile_bbox
tiles = [(t[1], t[3], t[0], t[2]) for t in raw_tiles] # Reorder N,S,E,W correctly

download_urls = []
for i, (north, south, east, west) in enumerate(tiles):
params = {
'f': 'json',
'bbox': f"{west},{south},{east},{north}",
'bboxSR': '4326',
'imageSR': '3346',
'format': 'tiff',
'pixelType': 'F32',
'size': f"{self._max_tile_size},{self._max_tile_size}"
}

response = requests.get(self.url, params=params, verify=False, timeout=60)
data = response.json()
if 'href' not in data:
raise RuntimeError(f"No image URL in response for tile {i}")
download_urls.append(data['href'])

return self.download_tif_files(download_urls, self._tile_directory)

0 comments on commit f2b5ab2

Please sign in to comment.