From 837de64d418206dbaea76145586cabf6081914c9 Mon Sep 17 00:00:00 2001 From: underwhelmingToaster <65400197+underwhelmingToaster@users.noreply.github.com> Date: Thu, 23 Jun 2022 15:48:59 +0200 Subject: [PATCH 1/6] - added geotiff support --- raster_cutter.py | 8 +++++--- raster_cutter_dialog_base.ui | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/raster_cutter.py b/raster_cutter.py index 6721872..f21bb5f 100644 --- a/raster_cutter.py +++ b/raster_cutter.py @@ -263,15 +263,17 @@ def run(self): format_string = "" # Set format string and format specific settings + # worldfile is always generated for non georeferenced types, as wished by stefan if directory_url.endswith(".jpg"): format_string = "JPEG" # enables progressive jpg creation (https://gdal.org/drivers/raster/jpeg.html#creation-options) # options_string += "-co PROGRESSIVE=ON, " + options_string += "-co WORLDFILE=YES, " elif directory_url.endswith(".png"): format_string = "PNG" - - # worldfile is always generated, as wished by stefan - options_string += "-co WORLDFILE=YES, " + options_string += "-co WORLDFILE=YES, " + elif directory_url.endswith(".tif"): + pass # create the task which contains the actual calculations and add the task to the task manager, starting it # the task is saved in a global variable to avoid a bug (https://gis.stackexchange.com/questions/390652/qgstask-fromfunction-not-running-on-finished-method-unless-an-exception-is-raise) diff --git a/raster_cutter_dialog_base.ui b/raster_cutter_dialog_base.ui index 87e2a8e..2b9acfd 100644 --- a/raster_cutter_dialog_base.ui +++ b/raster_cutter_dialog_base.ui @@ -124,7 +124,7 @@ - PNG (*.png);;JPG (*.jpg) + PNG (*.png);;JPG (*.jpg);;GeoTIFF (*.tif) QgsFileWidget::SaveFile From 672449e9e85a9988daa628e356a29e70c60b0aa6 Mon Sep 17 00:00:00 2001 From: underwhelmingToaster <65400197+underwhelmingToaster@users.noreply.github.com> Date: Mon, 27 Jun 2022 09:53:03 +0200 Subject: [PATCH 2/6] - disabling and unchecking create lexocad checbox when file format is tif (geotiff) --- raster_cutter.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/raster_cutter.py b/raster_cutter.py index f21bb5f..98499b1 100644 --- a/raster_cutter.py +++ b/raster_cutter.py @@ -299,9 +299,14 @@ def widget_init(self): self.dlg.layer_combobox.setShowCrs(True) self.dlg.lexocad_checkbox.toggled.connect(lambda: on_lexocad_toggled(self)) self.dlg.resolution_checkbox.toggled.connect(lambda: on_resolution_checkbox_toggled(self)) - on_resolution_checkbox_toggled(self) + self.dlg.file_dest_field.fileChanged.connect(lambda: on_tif_selected(self)) self.dlg.button_box.helpRequested.connect(lambda: help_mode()) + # also check states when dialog is opened + on_resolution_checkbox_toggled(self) + on_lexocad_toggled(self) + on_tif_selected(self) + # enables/disables x & y resolution spin boxes depending on resolution checkbox state def on_resolution_checkbox_toggled(self): @@ -321,6 +326,16 @@ def on_lexocad_toggled(self): else: self.dlg.proj_selection.setEnabled(True) +def on_tif_selected(self): + # enables/disables the lexocad checkbox depending on if output file is a geotiff + path = self.dlg.file_dest_field.filePath() + filename, file_extension = os.path.splitext(path) + if file_extension == ".tif": + self.dlg.lexocad_checkbox.setChecked(False) + self.dlg.lexocad_checkbox.setEnabled(False) + else: + self.dlg.lexocad_checkbox.setEnabled(True) + # sets the layer dropdown to the selected layer in the QGIS layer manager, if one is selected def select_current_layer(self): From 3baaa4245776e3db000f98618c8400169da5cc61 Mon Sep 17 00:00:00 2001 From: underwhelmingToaster <65400197+underwhelmingToaster@users.noreply.github.com> Date: Mon, 27 Jun 2022 11:49:11 +0200 Subject: [PATCH 3/6] - implemented some f strings - replaced " " with ' ' in tooltips.py - added resampling method & tooltips --- raster_cutter.py | 31 +++++++++++++++--------- raster_cutter_dialog_base.ui | 46 ++++++++++++++++++++++++++++++++++++ tooltips.py | 45 ++++++++++++++++++++++++++++------- 3 files changed, 102 insertions(+), 20 deletions(-) diff --git a/raster_cutter.py b/raster_cutter.py index 98499b1..4cae039 100644 --- a/raster_cutter.py +++ b/raster_cutter.py @@ -289,7 +289,8 @@ def run(self): generate_lexocad=self.dlg.lexocad_checkbox.isChecked(), generate_worldfile=True, add_to_map=self.dlg.add_to_map_checkbox.isChecked(), - target_resolution=get_target_resolution(self)) + target_resolution=get_target_resolution(self), + resampling_method=get_resampling_method(self)) QgsApplication.taskManager().addTask(globals()['process_task']) QgsMessageLog.logMessage('Starting process...', MESSAGE_CATEGORY, Qgis.Info) @@ -353,21 +354,30 @@ def get_extent_win(self): e = self.dlg.extent_box.outputExtent() return f"{e.xMinimum()} {e.yMaximum()} {e.xMaximum()} {e.yMinimum()}" +def get_resampling_method(self): + if self.dlg.nearest_neighbour_radio_button.isChecked(): + return "near" + elif self.dlg.cubic_spline_radio_button.isChecked(): + return "cubicspline" + else: + error_message("Could not get resampling method.") + + # this is where all calculations actually happen def process(task, src, iface, directory_url, dest_srs, format_string, extent_win_string, options_string, generate_lexocad: bool, - generate_worldfile: bool, add_to_map: bool, target_resolution: {"x": float, "y": float}): + generate_worldfile: bool, add_to_map: bool, target_resolution: {"x": float, "y": float}, resampling_method): # Crop raster, so that only the needed parts are reprojected, saving processing time QgsMessageLog.logMessage('Cropping raster (possibly downloading)...', MESSAGE_CATEGORY, Qgis.Info) - cropped = crop('/vsimem/cropped.tif', src, extent_win_string, dest_srs) + cropped = crop('/vsimem/cropped.tif', src, extent_win_string, dest_srs, resampling_method) if task.isCanceled(): # check if task was cancelled between each step stopped(task) return None # reproject and set resolution QgsMessageLog.logMessage('Warping raster...', MESSAGE_CATEGORY, Qgis.Info) - warped = warp('/vsimem/warped.tif', cropped, dest_srs, extent_win_string, target_resolution) + warped = warp('/vsimem/warped.tif', cropped, dest_srs, target_resolution, resampling_method) if task.isCanceled(): stopped(task) return None @@ -461,16 +471,15 @@ def delete_tms_xml(): def get_file_path(file_name): return os.path.join(os.path.dirname(__file__), file_name) -def crop(out, src, extent_win_string, extent_srs): - return gdal.Translate(out, src, options="-projwin %s, -projwin_srs %s, -outsize 2000 0, -r bilinear" % ( - extent_win_string, extent_srs)) - +def crop(out, src, extent_win_string, extent_srs, resampling_method): + return gdal.Translate(out, src, options=f"-projwin {extent_win_string}, -projwin_srs {extent_srs}, -outsize 2000 0, -r {resampling_method}") -def warp(out, src, dst_srs, extent_win_string, target_resolution): - options_string = "-t_srs %s, " % dst_srs +def warp(out, src, dst_srs, target_resolution, resampling_method): + options_string = f"-t_srs {dst_srs}, " if target_resolution['x'] > 0 and target_resolution[ 'y'] > 0: # if no custom target res is defined, these should both be 0 - options_string += "-tr %s %s" % (target_resolution['x'], target_resolution['y']) + options_string += f"-tr {target_resolution['x']} {target_resolution['y']}, " + options_string += f"-r {resampling_method}" return gdal.Warp(out, src, options=options_string) diff --git a/raster_cutter_dialog_base.ui b/raster_cutter_dialog_base.ui index 2b9acfd..6698f7f 100644 --- a/raster_cutter_dialog_base.ui +++ b/raster_cutter_dialog_base.ui @@ -278,6 +278,52 @@ + + + + + + Resampling algorithm + + + + + + + + 150 + 16777215 + + + + Nearest Neighbour + + + + + + + + 100 + 0 + + + + + 100 + 100 + + + + Cubic Spline + + + true + + + + + diff --git a/tooltips.py b/tooltips.py index 4ef4fe8..f218b9c 100644 --- a/tooltips.py +++ b/tooltips.py @@ -6,35 +6,39 @@ def add_tooltips(self): checkbox_tips(self) crs_tips(self) resolution_tips(self) + resampling_algorithm_tips(self) def section_tips(self): - input_section_tooltip = "

A raster layer - i.e. an internet map image service (WMS, WMTS, XYZ/TMS) - or a local file (GeoTIFF format). A list of map services is available e.g. in the \"Quick Map Services\" plugin. Make sure your QGIS project has a matching CRS.

" - input_section_whatsthis = input_section_tooltip + "

Select the raster data to cut and set the extent of the output raster with the two widgets below.

" - output_section_tooltip = "

A raster file in an image format (PNG, JPG, GeoTIFF) with a certain smaller extent, possibly with a sidecar file (World File etc.) and eventually reprojected into a CRS and with certain resolution.

" + input_section_tooltip = '

A raster layer - i.e. an internet map image service (WMS, WMTS, XYZ/TMS) - or a local file (GeoTIFF format). A list of map services is available e.g. in the \"Quick Map Services\" plugin. Make sure your QGIS project has a matching CRS.

' + input_section_whatsthis = input_section_tooltip + '

Select the raster data to cut and set the extent of the output raster with the two widgets below.

' + output_section_tooltip = '

A raster file in an image format (PNG, JPG, GeoTIFF) with a certain smaller extent, possibly with a sidecar file (World File etc.) and eventually reprojected into a CRS and with certain resolution.

' output_section_whatsthis = output_section_tooltip self.dlg.input_section_label.setToolTip(input_section_tooltip) self.dlg.input_section_label.setToolTip(input_section_whatsthis) self.dlg.output_section_label.setToolTip(output_section_tooltip) self.dlg.output_section_label.setToolTip(output_section_whatsthis) + def input_layer_tips(self): - input_layer_tooltip = "

Select the layer which should be saved as a image. Needs to be a raster layer.

" + input_layer_tooltip = '

Select the layer which should be saved as a image. Needs to be a raster layer.

' input_layer_whatsthis = input_layer_tooltip + '

Displayed in the list is the layer name, as well as the CRS (Coordinate Reference System) of the layer. The layer will be automatically reprojected into the selected CRS (see "CRS" further down).

' self.dlg.layer_label.setToolTip(input_layer_tooltip) self.dlg.layer_label.setWhatsThis(input_layer_whatsthis) self.dlg.layer_combobox.setWhatsThis(input_layer_tooltip) self.dlg.layer_combobox.setToolTip(input_layer_whatsthis) + def extent_box_tips(self): - extent_box_tooltip = "

Define the extent which will be cut.

" + extent_box_tooltip = '

Define the extent which will be cut.

' extent_box_whatsthis = '

Current Layer Extent sets the extent to match the currently selected layer, to ensure the whole layer will be visible on the exported image.

Calculate from Layer allows you to set the extent to the extents of any other layer in your project.

Map Canvas Extent sets the extent to your map canvas, e.g. what you currently see. This allows for easy cropping of a part of your layer.

' self.dlg.extent_box.setToolTip(extent_box_tooltip) self.dlg.extent_box.setWhatsThis(extent_box_whatsthis) + def file_dest_tips(self): - file_dest_tooltip = "

Here, one can define where the output image as well as possible sidecar files should be saved.

" - file_dest_whatsthis = file_dest_tooltip + "

Open the file explorer by clicking on the button on the right with the three dots. Here, you can select the directory where the file(s) should be saved. Enter a file name without the file extension.

Choose whether to save the image as a .png or a .jpg in the dropdown. This will also affect the lexocad sidecar file, which will have the same file name as the image, but with a .jpgl/.pngl instead of the .jpg/.png ending.

" + file_dest_tooltip = '

Here, one can define where the output image as well as possible sidecar files should be saved.

' + file_dest_whatsthis = file_dest_tooltip + '

Open the file explorer by clicking on the button on the right with the three dots. Here, you can select the directory where the file(s) should be saved. Enter a file name without the file extension.

Choose whether to save the image as a .png or a .jpg in the dropdown. This will also affect the lexocad sidecar file, which will have the same file name as the image, but with a .jpgl/.pngl instead of the .jpg/.png ending.

' self.dlg.file_dest_label.setToolTip(file_dest_tooltip) self.dlg.file_dest_label.setWhatsThis(file_dest_whatsthis) self.dlg.file_dest_field.setWhatsThis(file_dest_whatsthis) @@ -62,8 +66,8 @@ def crs_tips(self): def resolution_tips(self): - resolution_tooltip = "

Set output file resolution (in target georeferenced units). The resolution defines the dimensions of a pixles in map units, for x and y.

" - resolution_whatsthis = resolution_tooltip + "

For example, for CH1903+ / LV95, the map unit is a meter. This means that a resolution of x: 0.5 equals two pixels for each meter on the map on the horizontal axis.

It is generally advisable to set the x and y resolution to the same value.

If a image cannot be saved because of a too large file size, increase the x and y values.

" + resolution_tooltip = '

Set output file resolution (in target georeferenced units). The resolution defines the dimensions of a pixles in map units, for x and y.

' + resolution_whatsthis = resolution_tooltip + '

For example, for CH1903+ / LV95, the map unit is a meter. This means that a resolution of x: 0.5 equals two pixels for each meter on the map on the horizontal axis.

It is generally advisable to set the x and y resolution to the same value.

If a image cannot be saved because of a too large file size, increase the x and y values.

' self.dlg.resolution_checkbox.setToolTip(resolution_tooltip) self.dlg.resolution_checkbox.setWhatsThis(resolution_whatsthis) self.dlg.x_resolution_label.setToolTip(resolution_tooltip) @@ -74,3 +78,26 @@ def resolution_tips(self): self.dlg.x_resolution_box.setWhatsThis(resolution_whatsthis) self.dlg.y_resolution_box.setToolTip(resolution_tooltip) self.dlg.y_resolution_box.setWhatsThis(resolution_whatsthis) + + +def resampling_algorithm_tips(self): + nearest_neighbour_tooltip = '

Suitable for categorical/classified mono or full color data. Pixel neighbor value is used without modification

' + nearest_neighbour_whatsthis = nearest_neighbour_tooltip + "" + + cubic_spline_tooltip = '

Suitable for continuous gray tone data. Values are interpolated

' + cubic_spline_whatsthis = cubic_spline_tooltip + '' + + + resampling_algorithm_tooltip = '

Determines how values are interpolated between known data points. This affects how sharp the exported image looks.

' + resampling_algorithm_whatsthis = resampling_algorithm_tooltip + f'

Nearest Neighbour

{nearest_neighbour_tooltip}

Cubic Spline

{cubic_spline_tooltip}' + + self.dlg.resampling_algorithm_label.setToolTip(resampling_algorithm_tooltip) + self.dlg.resampling_algorithm_label.setWhatsThis(resampling_algorithm_whatsthis) + + self.dlg.nearest_neighbour_radio_button.setToolTip(nearest_neighbour_tooltip) + self.dlg.nearest_neighbour_radio_button.setWhatsThis(nearest_neighbour_whatsthis) + + cubic_spline_tooltip = '

Suitable for continuous gray tone data. Values are interpolated

' + cubic_spline_whatsthis = cubic_spline_tooltip + "" + self.dlg.cubic_spline_radio_button.setToolTip(cubic_spline_tooltip) + self.dlg.cubic_spline_radio_button.setWhatsThis(cubic_spline_whatsthis) From 57b32201ea793c3899e86aef6ce73268d9a1ff00 Mon Sep 17 00:00:00 2001 From: underwhelmingToaster <65400197+underwhelmingToaster@users.noreply.github.com> Date: Mon, 27 Jun 2022 13:47:36 +0200 Subject: [PATCH 4/6] - small layout changes - filtering layer dropdown to only raster layers - changed error reporting --- raster_cutter.py | 4 +++- raster_cutter_dialog_base.ui | 29 +++++++++++++++++++---------- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/raster_cutter.py b/raster_cutter.py index 4cae039..e132891 100644 --- a/raster_cutter.py +++ b/raster_cutter.py @@ -28,6 +28,7 @@ from qgis.core import (QgsProject, QgsMapLayer, QgsCoordinateReferenceSystem, + QgsMapLayerProxyModel, QgsTask, Qgis, QgsRasterLayer, @@ -302,6 +303,7 @@ def widget_init(self): self.dlg.resolution_checkbox.toggled.connect(lambda: on_resolution_checkbox_toggled(self)) self.dlg.file_dest_field.fileChanged.connect(lambda: on_tif_selected(self)) self.dlg.button_box.helpRequested.connect(lambda: help_mode()) + self.dlg.layer_combobox.setFilters(QgsMapLayerProxyModel.RasterLayer) # also check states when dialog is opened on_resolution_checkbox_toggled(self) @@ -583,7 +585,7 @@ def error_message(message): self = globals()['self'] QgsMessageLog.logMessage(message, MESSAGE_CATEGORY, Qgis.Critical) self.iface.messageBar().pushMessage("Error", message, level=Qgis.Critical) - raise Exception(message) + # raise Exception(message) # enter WhatsThis mode diff --git a/raster_cutter_dialog_base.ui b/raster_cutter_dialog_base.ui index 6698f7f..2ea2d35 100644 --- a/raster_cutter_dialog_base.ui +++ b/raster_cutter_dialog_base.ui @@ -7,7 +7,7 @@ 0 0 610 - 479 + 488 @@ -24,9 +24,9 @@ 20 - 440 + 450 581 - 41 + 31 @@ -42,7 +42,7 @@ 19 19 581 - 401 + 424 @@ -282,6 +282,12 @@ + + + 0 + 30 + + Resampling algorithm @@ -298,6 +304,9 @@ Nearest Neighbour + + true + @@ -318,7 +327,7 @@ Cubic Spline - true + false
@@ -329,21 +338,21 @@ - 130 + 150 450 - 170 - 20 + 150 + 31 - 170 + 150 0 - 170 + 150 16777215 From 0471d7209617c6333d63e155935de920dda72e5b Mon Sep 17 00:00:00 2001 From: underwhelmingToaster <65400197+underwhelmingToaster@users.noreply.github.com> Date: Mon, 27 Jun 2022 15:32:40 +0200 Subject: [PATCH 5/6] - tooltips & whatsthis for add to map checkbox - deleting .aux.xml files when not adding to map --- raster_cutter.py | 23 +++++++++++++---------- tooltips.py | 9 ++++++++- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/raster_cutter.py b/raster_cutter.py index e132891..6e928c8 100644 --- a/raster_cutter.py +++ b/raster_cutter.py @@ -288,7 +288,6 @@ def run(self): options_string=options_string, extent_win_string=get_extent_win(self), generate_lexocad=self.dlg.lexocad_checkbox.isChecked(), - generate_worldfile=True, add_to_map=self.dlg.add_to_map_checkbox.isChecked(), target_resolution=get_target_resolution(self), resampling_method=get_resampling_method(self)) @@ -369,7 +368,7 @@ def get_resampling_method(self): # this is where all calculations actually happen def process(task, src, iface, directory_url, dest_srs, format_string, extent_win_string, options_string, generate_lexocad: bool, - generate_worldfile: bool, add_to_map: bool, target_resolution: {"x": float, "y": float}, resampling_method): + add_to_map: bool, target_resolution: {"x": float, "y": float}, resampling_method): # Crop raster, so that only the needed parts are reprojected, saving processing time QgsMessageLog.logMessage('Cropping raster (possibly downloading)...', MESSAGE_CATEGORY, Qgis.Info) cropped = crop('/vsimem/cropped.tif', src, extent_win_string, dest_srs, resampling_method) @@ -404,20 +403,19 @@ def process(task, src, iface, directory_url, dest_srs, format_string, extent_win file_name_no_ext, file_ext = os.path.splitext(file) file_name = f"{file_name_no_ext} cropped" - manage_files(generate_lexocad, generate_worldfile, directory_url) + manage_files(generate_lexocad, add_to_map, directory_url) return {"ds": translated, "iface": iface, "path": translated.GetDescription(), "file_name": file_name} -# generate lexocad file and delete worldfile if wanted -def manage_files(generate_lexocad, generate_worldfile, dir_url): - if not generate_worldfile and not generate_lexocad: - return - QgsMessageLog.logMessage("Creating sidecar files", MESSAGE_CATEGORY, Qgis.Info) +# generate lexocad file and delete worldfile and .aux.xml if needed +def manage_files(generate_lexocad: bool, add_to_map: bool, dir_url): + QgsMessageLog.logMessage("Managing sidecar files", MESSAGE_CATEGORY, Qgis.Info) if generate_lexocad: generate_lexocad_files(dir_url) - if not generate_worldfile and generate_lexocad: - delete_world_file(dir_url) + if not add_to_map: + delete_aux_xml_file(dir_url) + delete_tms_xml() # is only necessary if layer was XYZ, but executes always @@ -470,6 +468,11 @@ def delete_tms_xml(): if os.path.exists(temp_file_path): os.remove(temp_file_path) +def delete_aux_xml_file(path): + aux_xml_file_path = path + '.aux.xml' + os.remove(aux_xml_file_path) + + def get_file_path(file_name): return os.path.join(os.path.dirname(__file__), file_name) diff --git a/tooltips.py b/tooltips.py index f218b9c..8ceff2c 100644 --- a/tooltips.py +++ b/tooltips.py @@ -7,6 +7,7 @@ def add_tooltips(self): crs_tips(self) resolution_tips(self) resampling_algorithm_tips(self) + add_to_map_tooltips(self) def section_tips(self): @@ -87,7 +88,6 @@ def resampling_algorithm_tips(self): cubic_spline_tooltip = '

Suitable for continuous gray tone data. Values are interpolated

' cubic_spline_whatsthis = cubic_spline_tooltip + '' - resampling_algorithm_tooltip = '

Determines how values are interpolated between known data points. This affects how sharp the exported image looks.

' resampling_algorithm_whatsthis = resampling_algorithm_tooltip + f'

Nearest Neighbour

{nearest_neighbour_tooltip}

Cubic Spline

{cubic_spline_tooltip}' @@ -101,3 +101,10 @@ def resampling_algorithm_tips(self): cubic_spline_whatsthis = cubic_spline_tooltip + "" self.dlg.cubic_spline_radio_button.setToolTip(cubic_spline_tooltip) self.dlg.cubic_spline_radio_button.setWhatsThis(cubic_spline_whatsthis) + + +def add_to_map_tooltips(self): + add_to_map_tooltip = '

When checked, the generated raster image will be added to the current project as a new layer after the image has been generated.

' + add_to_map_whatsthis = add_to_map_tooltip + '

If checked, a sidecar file with the ending ".aux.xml" will be generated. This file lets QGIS and other applications know in which CRS the coordinates in the worldfile are defined.

' + self.dlg.add_to_map_checkbox.setToolTip(add_to_map_tooltip) + self.dlg.add_to_map_checkbox.setWhatsThis(add_to_map_whatsthis) From cda8bfc65bf02f239e096b77aa662387bf721c15 Mon Sep 17 00:00:00 2001 From: underwhelmingToaster <65400197+underwhelmingToaster@users.noreply.github.com> Date: Mon, 27 Jun 2022 15:42:34 +0200 Subject: [PATCH 6/6] - updated screenshot.png - added "Using this tool" in README.md --- README.md | 13 ++++++++++++- docs/screenshot.png | Bin 32161 -> 28221 bytes 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 74ecd25..05783f7 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,18 @@ Additionally, the plugin can create a Worldfile and/or Lexocad sidecar file if d ### Using this tool -*Work in Progress* +1. Start QGIS - install QGIS plugin 'Raster Cutter' if necessary - and open "New Project". +2. Set the QGIS project to the CRS "EPSG:2056" (= Swiss coordinate reference system CH/LV95) (bottom right). +3. If necessary, load background/base map (e.g. OpenStreetMap or MapGeoAdmin). Make sure that the CRS is still "EPSG:2056". +4. Load raster file/data source (= input layer) (WMS, WMTS/XYZ/TMS, GeoTIFF) and zoom to the desired section. +5. Open the dialog of the 'Raster Cutter' plugin and define the necessary parameters: + 1. choose the input layer (if not already selected) + 2. set the extent by clicking on "Map Canvas Extent". + 3. Set the path and name of the output and the output format (GeoTIFF, PNG or JPG). +6. Set additional parameters if necessary (for advanced users): CRS and Output resolution. +7. finished (load and view with QGIS or Lexocad). + +(Translated from https://md.coredump.ch/2H-jGnDTSbuBk7ai0xWIxA?view#Bedienungsanleitung) ### Set up local developement diff --git a/docs/screenshot.png b/docs/screenshot.png index ddf9ae1d1163e44f56579dced2443d258962c6c6..66cfaaf1f71a6c4671d82bb1f60da29c140e8360 100644 GIT binary patch literal 28221 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 literal 32161 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