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
6369
6470# %rules
6571# % requires_all: -k,download_dir
72+ # % excludes: -r,alignment_raster
6673# %end
6774
6875import atexit
7784from 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
8390path = get_lib_path (modname = "r.dem.import" )
95102ID = grass .tempname (12 )
96103ORIG_REGION = f"original_region_{ ID } "
97104rm_vectors = []
105+ rm_rasters = []
98106download_dir = None
99107rm_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
259296if __name__ == "__main__" :
0 commit comments