Hot answers tagged

18

QGIS 3.18+ supports point cloud visualisation natively.


12

Probably the best tool for this is Paraview. Once you've downloaded and acquired that you'll want to load your images: Use the CSV reader to load them: Below, you can find filters faster by pressing Ctrl+Space and starting to type the name of the filter you want. Next, apply the TableToPoints filter: Elevation often needs to be exaggerated to get a good ...


6

In the raster calculator, use the MIN function: MIN ( "raster1@1","raster2@1")


6

For QGIS versions older than 3.22, you can create a conditional statement for what you want to do with this expression: ("DEM@1" < 0) * (-1) * "DEM@1" + ABS ( ("DEM@1" < 0) - 1) * "DEM@1" Output: 100 -> 100 2 -> 2 -5 -> 5 -150 -> 150 etc.


6

Get a polygon layer representing the sea, put this over the DEM and give it a color for the water body. Then assign a different color to the DEM for elevation = 0. If you don't have a polygon for teh sea, use the land polygon you have and set its style to inverted polygons. Here, I used the pre-installed worldmap in QGIS (type world in the coordinates field) ...


6

I downloaded your contour geopackage. Open it with QGIS, right click the layer -> Layer CRS -> Set Layer CRS -> Search for "3912" -> OK Your contour lines should be where you want them


5

Use numpy.gradient import numpy as np # Example 2D array of elevation, and constant gridsize elev = np.array( [[2., 3., 2.], [3., 4., 4.]]) cellsize = 10. # Evaluate gradient in two dimensions px, py = np.gradient(elev, cellsize) slope = np.sqrt(px ** 2 + py ** 2) # If needed in degrees, convert using slope_deg = np.degrees(np.arctan(slope)) ...


5

The herringbone pattern in your image is a classic indication that a Nearest Neighbor resampling occurred somewhere in your workflow. I suggest that you go back through each processing step and closely review each tool's Resampling options and make sure that you select either Bilinear or Cubic. For example, you mention that you conducted a reprojection, but ...


4

Looking beyond QGIS I found the answer directly in GDAL VRT, and it's so simple. I only need to add <Scale>10.0</Scale> to the VRTRasterBand: <VRTDataset rasterXSize="412502" rasterYSize="323997"> <SRS dataAxisToSRSAxisMapping="1,2">EPSG:31255</SRS> <GeoTransform>-9.75e+04,0.5,0,362000,0,-...


4

You should use GDAL's virtual raster format to create one virtual raster, the Virtual Raster (VRT) will then reference each of your 792 rasters individually without duplicating data or making one large file. You can do this in QGIS. Go to Raster Menu > Miscellaneous > Virtual Raster Then click three dots to add individual rasters: Select Add Files/...


4

You most probably do not want to compress DEM data with JPEG, that would be lossy and introduce weird steps in the data. Instead I recommend the DEFLATE compression. To improve the size savings you can also use a predictor for the compressor. See https://gdal.org/drivers/raster/gtiff.html for details and more options. for %i in (*.tif) do gdal_translate -of ...


4

You can use rayshader::render_points(). Below a fully reproducible example with a point cloud on top of a rayshaded DTM library(lidR) LASfile = system.file("extdata", "Topography.laz", package="lidR") las = readLAS(LASfile) dtm = grid_terrain(las, algorithm = tin()) # RasterLayer bbox <- extent(dtm) library(rayshader) elmat =...


4

Your data reference two different vertical datums. You are comparing apples to oranges so the elevations will not align. See this link for a basic tutorial on different vertical datums. You can use vDatum to convert datasets between vertical datums. ArcGIS Pro now allows for vertical datum conversions but I have not tried this yet. You will most likely ...


4

Drape to transfer the raster values to your line vertices as z-values. (I used Densify by interval first to add more vertices.) Field Calculate mean z value of your vertices with: array_mean(array_foreach( (generate_series( 1, num_points( $geometry))), z(point_n($geometry, @element))))


4

If you use the newest QGIS version 3.22, the raster calculator has a new if-condition. Use this expression: if ( "DEM@1" <0, "DEM@1" * -1, "DEM@1")


4

The SRTM DEM has a ground resolution of 30 meters (1 arc-second), see https://en.wikipedia.org/wiki/Shuttle_Radar_Topography_Mission#Highest_Resolution_Global_Release and references. So the elevation is "averaged" over a 30x30 meter square. Average in quotes because it is not a mathematical operation, but a physical result of the backscattering of ...


4

If I understand you correctly, the DEM contains the values (elevation) that you want to use to create your cross sectional visualizations to show faults or fractures in the terrain. You may want to look into getting your hands on some LiDAR point clouds of the area, which can be used to extract the bare earth only and create a digital terrain model (DTM, ...


4

Try the GDAL "Fill nodata" utility under Raster --> Analysis. Documentation on the tool can be read here.


3

I made a tool for ArcGIS Desktop many years ago that may be able to help you. It's probably not very efficient because I wrote it before I had a lot of experience in scripting. But it is quite customizable and allows you to add "smooth" depressions while also specifying exactly how "smooth" they should be via a mathematical function. ...


3

While I don't have any experience in doing this procedure, I have heard of similar examples. Here are some articles that could help: (open access) "Automated accuracy assessment for ridge and valley polylines using high-resolution digital elevation models" https://doi.org/10.1130/GES01477.1 (open access) "A GIS add-in for automated ...


3

Titiler (map tile server), is not able to generate PNG files based on float32 TIFF PNG is not able to encode Float32, it's not TiTiler fault. You need to rescale the data to bytes (0-255) or to use the Mapbox/Mapzen trick (https://github.com/mapbox/rio-rgbify or https://github.com/cogeotiff/rio-tiler/blob/master/rio_tiler/utils.py#L364-L378) to encode ...


3

There is no simple and fast solution. Your DTM is indeed incorrect, but only where there are no points. Consequently this problem that is a known issue was considered not big problem. grid_terrain() has a parameter is_concave = FALSE. If your turns it to TRUE it computes a concave hull and interpolates only in the hull. Sadly it is slow to compute and will ...


3

Change the resampling option for the rendering. Here is an example with default display: The blocky nature is due to the way hillshades are sampled within cells. The Layer Styling panel has Resampling options. Change Nearest Neighbour to Bilinear or Cubic. This can be done when zoomed in or out or both: The result is a smoother raster:


3

I found another Question which gave me a hint on what the problem could be. SAGA recognize No Data values as -99999. Other values get processed as regular. I solved my problem reclassifying No Data values (which were being read as -3.4e+38) as -99999.


3

I took @FelixIP's advice and used the formula Tan(3.141593/180*degrees))*100. This correctly converts degree slope raster values to percent slope values.


3

GeoTiffs are a derivitive product. If you have the original LiDAR Point Clouds and the points are classified, then you can filter the ground points using software like LasTools or CloudCompare. But if all you have are the GeoTiffs, I don't think there's any way.


3

So I found the answer myself. This is the pipeline: Convert DSM to LAS. Classify LAS ground points. Create DTM from classified LAS file. There is LAStools in which there is a command txt2las. So if I have a txt file which contains XYZ values in each row of the file, then I can use this command to obtain LAS. So first I have to drag XYZ values from my ...


3

You can rotate a raster using an affine transformation. Several packages can do this, including gdal (see Raster API tutorial) and rasterio (see this answer to Defining Affine transform with rasterio). However, the order of the parameters is not the same between the transformation function of gdal and that of rasterio, so be careful. This code is a example ...


3

Get a vector (polygon) of the lake(s). Then you have at least two options: Option 1: Clip raster by mask layer Menu Processing / Toolbox / Extract layer extent from the DEM layer Menu Vector / Geoprocessing Tools / Difference: Input layer = Extent (from step 1), Overlay layer = lakes layer Menu Raster / Extraction / Clip Raster by Mask Layer with the DEM ...


3

In previous versions it simply performs an assignment, a conditional within a parenthesis followed by a *, performs an assignment to all pixels that meet that condition. Try this: ("DEM" < 0 ) *0 + ("DEM" >= 0 ) *"DEM" It will convert all values less than 0 to 0, and leave all other pixels the same. On the other hand, if ...


Only top voted, non community-wiki answers of a minimum length are eligible