Skip to content

Commit f57c3b3

Browse files
authored
Wdi basteln richtig (#2)
* fix region * updated flake8 for new worker and lib * linting
1 parent fe364fd commit f57c3b3

4 files changed

Lines changed: 63 additions & 30 deletions

File tree

.flake8

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
# F821 undefined name '_'
77

88
per-file-ignores =
9-
./r.dem.import.worker/r.dem.worker.py:E501,F821
9+
./lib_dem/r_dem_import_lib.py: E501,F821
10+
./r.dem.import.worker/r.dem.import.worker.py:E501,F821
1011
./r.dsm.import.bb/r.dsm.import.bb.py:E501,F821
1112
./r.dsm.import.be/r.dsm.import.be.py:E501,F821
1213
./r.dsm.import.hb/r.dsm.import.hb.py:E501,F821

lib_dem/r_dem_import_lib.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,6 @@
112112
},
113113
}
114114

115-
RETRIES = 30
116115
WAITING_TIME = 10
117116

118117

@@ -158,7 +157,7 @@ def create_grid_and_tiles_list(
158157
159158
Returns:
160159
rm_vectors (list): Extended list of vectors to remove in cleanup
161-
nummber_tiles (str): Number of tiles overlapping with aoi
160+
number_tiles (str): Number of tiles overlapping with aoi
162161
tiles_list (list): List of tile names overlapping with aoi
163162
"""
164163
# check if aoi is smaller than tile size
@@ -213,8 +212,6 @@ def create_grid_and_tiles_list(
213212
grass.message(_(f"Number of tiles: {number_tiles}"))
214213
tiles_list = []
215214
for tile in tiles_num_list:
216-
# TODO Möglichkeit nach DTM oder DSM zu bennenen einfügen,
217-
# bis dahin mit DEM bezeichnet
218215
tile_area = f"{fs}_DEM_{tile}"
219216
grass.run_command(
220217
"v.extract",
@@ -237,6 +234,7 @@ def import_dem_from_wms(
237234
layer_name,
238235
native_res,
239236
data_format="tiff",
237+
retries=30,
240238
):
241239
"""Import DEMs from WMS
242240
Args:
@@ -246,8 +244,10 @@ def import_dem_from_wms(
246244
resolution_to_import (float): Resolution to resample imported raster to
247245
layer_name (str): Name of WMS Layer, given as Layer_{fs}
248246
native_res (bool): Keep native DEM resolution
247+
retries (int): Set how often function is retried
249248
"""
250-
# set region and create variable names
249+
250+
# set region
251251
grass.run_command("g.region", vector=tile_key)
252252
if not native_res:
253253
grass.run_command("g.region", res=resolution_to_import, flags="a")
@@ -277,6 +277,6 @@ def import_dem_from_wms(
277277
flags="f",
278278
)
279279
grass.message(_("Retry download..."))
280-
if count > (RETRIES / 2):
280+
if count > (retries / 2):
281281
grass.fatal(f"Download of {tile_url} not working.")
282282
sleep(10)

r.dem.import.worker/r.dem.import.worker.py

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -77,11 +77,6 @@
7777
# % description: Name of raster output
7878
# %end
7979

80-
# %option
81-
# % key: raster_name_list
82-
# % description: List of all output rasters
83-
# %end
84-
8580
# %flag
8681
# % key: r
8782
# % description: Use native DEM resolution
@@ -101,7 +96,7 @@
10196
# import module library
10297
path = get_lib_path(modname="r.dem.import")
10398
if path is None:
104-
grass.fatal("Unable to find the dop library directory.")
99+
grass.fatal("Unable to find the dem library directory.")
105100
sys.path.append(path)
106101
try:
107102
from r_dem_import_lib import import_dem_from_wms
@@ -114,7 +109,7 @@
114109
# pylint: disable=C0103
115110
original_nprocs = None
116111

117-
RETRIES = 3
112+
RETRIES = 30
118113
WAITING_TIME = 10
119114

120115

@@ -173,9 +168,14 @@ def main():
173168
),
174169
)
175170

171+
# add all generated rasters to a list, later used to create vrt
176172
raster_name_list = []
173+
174+
# iterate through all layers
177175
for layer_name in layer_names_list:
178176
output_raster = f"{raster_name}_{layer_name}"
177+
178+
# import DEMs from WMS
179179
import_dem_from_wms(
180180
f"{tile_key}@{old_mapset}",
181181
output_raster,
@@ -187,41 +187,36 @@ def main():
187187
)
188188
raster_name_info = grass.raster_info(output_raster)
189189

190-
# Prüfen ob richtige min/max werte -> nicht NULL
190+
# test if raster is invalid
191191
if (
192192
raster_name_info["min"] is not None
193193
and raster_name_info["max"] is not None
194194
):
195195
raster_name_list.append(output_raster)
196196
else:
197-
# Ungültige Raster direkt entfernen
198-
grass.run_command(
199-
"g.remove",
200-
type="raster",
201-
name=output_raster,
202-
flags="f",
203-
quiet=True,
204-
)
205-
206-
# Falls kein einziges gültig war
197+
rm_rast.append(output_raster)
198+
199+
# no valid raster
207200
if not raster_name_list:
208-
grass.fatal("TODO: Fehlermeldung")
201+
grass.fatal("Unable to find DEM matching the given aoi")
209202

210-
# Falls nur eins gültig war -> direkt verwenden
203+
# one valid raster
211204
elif len(raster_name_list) == 1:
212205
grass.run_command(
213206
"g.rename",
214207
raster=f"{raster_name_list[0]},{raster_name}",
215208
)
216209

217-
# Mehrere gültige Raster -> patchen
210+
# multiple valid rasters
218211
else:
219212
grass.run_command(
220213
"r.patch",
221214
input=raster_name_list,
222215
output=raster_name,
223216
)
224217

218+
grass.message(_(f"Finishing raster import for {raster_name}..."))
219+
225220
# switch back to original location
226221
switch_back_original_location(gisrc)
227222
grass.utils.try_remove(newgisrc)

r.dsm.import.hb/r.dsm.import.hb.py

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,12 @@
3434
# % multiple: no
3535
# %end
3636

37+
# %option G_OPT_R_INPUT
38+
# % key: alignment_raster
39+
# % required: no
40+
# % description: Name of raster map, used for raster alignment (if not given, dem extent and region resolution is used)
41+
# %end
42+
3743
# %option G_OPT_R_OUTPUT
3844
# % description: Name for output raster map
3945
# %end
@@ -63,6 +69,7 @@
6369

6470
# %rules
6571
# % requires_all: -k,download_dir
72+
# % excludes: -r,alignment_raster
6673
# %end
6774

6875
import atexit
@@ -77,7 +84,7 @@
7784
from grass_gis_helpers.open_geodata_germany.download_data import (
7885
check_download_dir,
7986
)
80-
from grass_gis_helpers.raster import create_vrt
87+
from grass_gis_helpers.raster import adjust_raster_resolution, create_vrt
8188

8289
# import module library
8390
path = get_lib_path(modname="r.dem.import")
@@ -95,6 +102,7 @@
95102
ID = grass.tempname(12)
96103
ORIG_REGION = f"original_region_{ID}"
97104
rm_vectors = []
105+
rm_rasters = []
98106
download_dir = None
99107
rm_dirs = []
100108

@@ -111,6 +119,7 @@ def cleanup():
111119
general_cleanup(
112120
orig_region=ORIG_REGION,
113121
rm_vectors=rm_vectors,
122+
rm_rasters=rm_rasters,
114123
rm_dirs=rm_dirs,
115124
)
116125

@@ -120,6 +129,7 @@ def main():
120129
global rm_vectors
121130
aoi = options["aoi"]
122131
download_dir = check_download_dir(options["download_dir"])
132+
alignment_raster = options["alignment_raster"]
123133
nprocs = int(options["nprocs"])
124134
nprocs = setup_parallel_processing(nprocs)
125135
output = options["output"]
@@ -158,6 +168,7 @@ def main():
158168

159169
# set region if aoi is given
160170
if aoi:
171+
# pylint: disable=E0601
161172
grass.run_command("g.region", vector=aoi, res=ns_res, flags="a")
162173
# if no aoi save region as aoi
163174
else:
@@ -198,6 +209,7 @@ def main():
198209
gisenv = grass.gisenv()
199210
gisdbase = gisenv["GISDBASE"]
200211
location = gisenv["LOCATION_NAME"]
212+
201213
# set queue and variables for worker addon
202214
create_vrt_list = []
203215
try:
@@ -208,7 +220,7 @@ def main():
208220
key = tile
209221
new_mapset = f"tmp_mapset_r_dem_import_tile_{key}_{os.getpid()}"
210222
rm_dirs.append(os.path.join(gisdbase, location, new_mapset))
211-
raster_name = f"{tile}_{ID}"
223+
raster_name = tile
212224
create_vrt_list.append(f"{raster_name}@{new_mapset}")
213225
param = {
214226
"tile_key": key,
@@ -220,6 +232,7 @@ def main():
220232
"flags": "",
221233
}
222234
grass.message(_(f"raster name: {raster_name}"))
235+
223236
# modify params
224237
if aoi:
225238
param["aoi"] = aoi
@@ -231,6 +244,7 @@ def main():
231244
param["resolution_to_import"] = NATIVE_DSM_RES
232245
else:
233246
param["resolution_to_import"] = ns_res
247+
234248
# run worker addon in parallel
235249
r_dem_import_worker = Module(
236250
"r.dem.import.worker",
@@ -254,6 +268,29 @@ def main():
254268
)
255269

256270
create_vrt(create_vrt_list, output)
271+
if not flags["r"]:
272+
if alignment_raster:
273+
# set extent from imported data, and align with alignment raster
274+
grass.run_command(
275+
"g.region", raster=output, align=alignment_raster
276+
)
277+
ns_res = float(
278+
grass.parse_command("r.info", map=alignment_raster, flags="g")[
279+
"nsres"
280+
],
281+
)
282+
else:
283+
# if no alignemnt raster is given,
284+
# use extent of imported data and
285+
# set and align with current region resolution
286+
grass.run_command("g.region", raster=output)
287+
grass.run_command("g.region", res=ns_res, flags="a")
288+
grass.message(_("Resampling / interpolating data..."))
289+
grass.run_command("g.rename", raster=f"{output},{output}_tmp")
290+
adjust_raster_resolution(f"{output}_tmp", output, ns_res)
291+
rm_rasters.append(f"{output}_tmp")
292+
293+
grass.message(_(f"Generated following raster map: {output}"))
257294

258295

259296
if __name__ == "__main__":

0 commit comments

Comments
 (0)