แƒจแƒ˜แƒ’แƒ—แƒแƒ•แƒกแƒ–แƒ” แƒ’แƒแƒ“แƒแƒกแƒ•แƒšแƒ

๐Ÿ—ป DEM (Digital Elevation Model) โ€” แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ


๐Ÿงฉ แƒแƒ แƒ˜ แƒ แƒแƒกแƒขแƒ แƒฃแƒšแƒ˜ DEM-แƒ˜แƒก แƒ’แƒแƒ”แƒ แƒ—แƒ˜แƒแƒœแƒ”แƒ‘แƒ (merge)

fn = r'C:/Users/Public/Documents/GK/PyQGIS/shp/tema_9/Raster/DEM/srtm_46_04.tif'
fn1 = r'C:/Users/Public/Documents/GK/PyQGIS/shp/tema_9/Raster/DEM/srtm_45_04.tif'

output = r'C:/Users/Public/Documents/GK/PyQGIS/shp/tema_9/Raster/DEM/dem.tif'

processing.run("gdal:merge", {
    'INPUT': [fn, fn1],
    'PCT': False,
    'SEPARATE': False,
    'NODATA_INPUT': None,
    'NODATA_OUTPUT': None,
    'OPTIONS': '',
    'EXTRA': '',
    'DATA_TYPE': 5,
    'OUTPUT': output
})

layer = iface.addRasterLayer(output, '')

โœ‚๏ธ แƒ™แƒแƒ•แƒ™แƒแƒกแƒ˜แƒ˜แƒก DEM-แƒ˜แƒก แƒ›แƒแƒญแƒ แƒ แƒกแƒแƒฅแƒแƒ แƒ—แƒ•แƒ”แƒšแƒแƒก แƒ™แƒแƒœแƒขแƒฃแƒ แƒ˜แƒ— (cliprasterbymasklayer)

fn = r'C:/Users/Public/Documents/GK/PyQGIS/shp/tema_9/Raster/DEM/dem.tif'
fn1 = r'C:/Users/Public/Documents/GK/PyQGIS/shp/tema_9/shp/Georgia_regionebi.shp'

output = r'C:/Users/Public/Documents/GK/PyQGIS/shp/tema_9/Raster/DEM/Georgia_dem.tif'

processing.run("gdal:cliprasterbymasklayer", {
    'INPUT': fn,
    'MASK': fn1,
    'SOURCE_CRS': QgsCoordinateReferenceSystem('EPSG:4326'),
    'TARGET_CRS': QgsCoordinateReferenceSystem('EPSG:32638'),
    'TARGET_EXTENT': None,
    'NODATA': 255,
    'ALPHA_BAND': False,
    'CROP_TO_CUTLINE': True,
    'KEEP_RESOLUTION': False,
    'SET_RESOLUTION': False,
    'MULTITHREADING': False,
    'OPTIONS': '',
    'DATA_TYPE': 0,
    'EXTRA': '',
    'OUTPUT': output
})

layer = iface.addRasterLayer(output, '')

๐Ÿ“‰ แƒคแƒ”แƒ แƒ“แƒแƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒฎแƒ แƒ˜แƒšแƒแƒ‘แƒ (Slope)

dem = r'C:/Users/Public/Documents/GK/PyQGIS/shp/tema_9/Raster/DEM/Georgia_dem.tif'
slp = r'C:/Users/Public/Documents/GK/PyQGIS/shp/tema_9/Raster/DEM/Georgia_slope.tif'

processing.run('qgis:slope', {
    'INPUT': dem,
    'Z_FACTOR': 1,
    'OUTPUT': slp
})

iface.addRasterLayer(slp)

๐Ÿงญ แƒ”แƒฅแƒกแƒžแƒแƒ–แƒ˜แƒชแƒ˜แƒ (Aspect)

dem = r'C:/Users/Public/Documents/GK/PyQGIS/shp/tema_9/Raster/DEM/Georgia_dem.tif'
aspect = r'C:/Users/Public/Documents/GK/PyQGIS/shp/tema_9/Raster/DEM/Georgia_aspect.tif'

processing.run("native:aspect", {
    'INPUT': dem,
    'Z_FACTOR': 1,
    'OUTPUT': aspect
})

iface.addRasterLayer(aspect)

๐ŸŒ„ แƒ แƒ”แƒšแƒ˜แƒ”แƒคแƒ˜แƒก แƒฉแƒ แƒ“แƒ˜แƒšแƒ˜ (Hillshade)

dem = r'C:/Users/Public/Documents/GK/PyQGIS/shp/tema_9/Raster/DEM/Georgia_dem.tif'
hillshade = r'C:/Users/Public/Documents/GK/PyQGIS/shp/tema_9/Raster/DEM/Georgia_hillshade.tif'

processing.run("native:hillshade", {
    'INPUT': dem,
    'Z_FACTOR': 1,
    'AZIMUTH': 300,
    'V_ANGLE': 40,
    'OUTPUT': hillshade
})

iface.addRasterLayer(hillshade)

๐Ÿ—บ๏ธ แƒ˜แƒ–แƒแƒฐแƒ˜แƒคแƒกแƒ”แƒ‘แƒ˜แƒก แƒแƒ›แƒแƒฆแƒ”แƒ‘แƒ (Contour lines)

dem = r'C:/Users/Public/Documents/GK/PyQGIS/shp/tema_9/Raster/DEM/Georgia_dem.tif'
contour = r'C:/Users/Public/Documents/GK/PyQGIS/shp/tema_9/shp/contour.shp'

processing.run("gdal:contour", {
    'INPUT': dem,
    'BAND': 1,
    'INTERVAL': 150,
    'FIELD_NAME': 'ELEV',
    'CREATE_3D': False,
    'IGNORE_NODATA': False,
    'NODATA': 255,
    'OFFSET': 0,
    'EXTRA': '',
    'OUTPUT': contour
})

iface.addVectorLayer(contour, '', 'ogr')

๐Ÿ“Š แƒ แƒแƒกแƒขแƒ แƒฃแƒšแƒ˜ แƒฐแƒ˜แƒกแƒขแƒแƒ’แƒ แƒแƒ›แƒ (Raster Histogram)

fn = r'C:/Users/Public/Documents/GK/PyQGIS/shp/tema_9/Raster/DEM/Georgia_dem.tif'
histogram = r'C:/Users/Public/Documents/GK/PyQGIS/shp/tema_9/histogram/dem_histogram.html'

processing.run("qgis:rasterlayerhistogram", {
    'INPUT': fn,
    'BAND': 1,
    'BINS': 15,
    'OUTPUT': histogram
})

๐Ÿ“ Extent-แƒ˜แƒ“แƒแƒœ แƒžแƒแƒšแƒ˜แƒ’แƒแƒœแƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ (Polygon from Layer Extent)

cont = r'D:/!Work/!BTU/Raster/Contour_Vere.shp'
ext = r'D:/!Work/!BTU/Raster/Extent_Vere.shp'

processing.run("native:polygonfromlayerextent", {
    'INPUT': cont,
    'ROUND_TO': 0,
    'OUTPUT': ext
})

iface.addVectorLayer(ext, '', 'ogr')

๐Ÿ•ณ๏ธ TIN แƒ˜แƒœแƒขแƒ”แƒ แƒžแƒแƒšแƒแƒชแƒ˜แƒ (Triangulated Irregular Network)

cont = r'D:/!Work/!BTU/Raster/Contour_Vere.shp'
tin = r'D:/!Work/!BTU/Raster/TIN_Vere.tif'

processing.run("qgis:tininterpolation", {
    'INTERPOLATION_DATA': cont + '::~::0::~::1::~::1',
    'METHOD': 0,
    'EXTENT': '451209,483929,4608998,4625248 [EPSG:32638]',
    'PIXEL_SIZE': 10,
    'OUTPUT': tin
})

iface.addRasterLayer(tin)

๐ŸŽจ แƒกแƒ˜แƒ›แƒ‘แƒแƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒ (Graduated Symbol Renderer)

from qgis.PyQt.QtGui import QColor
from qgis.core import QgsVectorLayer, QgsSymbol, QgsRendererRange, QgsGraduatedSymbolRenderer, QgsWkbTypes, QgsProject

file_name = r'C:/Users/KETI/Desktop/QGIS/gis-masala/tema_6/rivers.shp'
layer_name = 'Rivers'
layer = QgsVectorLayer(file_name, layer_name, 'ogr')

range_field = 'Shape_Leng'
opacity = 0.75
minval = 1000
maxval = 20000
color = '#c0ec19'
label = 'short'

range1_symbol = QgsSymbol.defaultSymbol(QgsWkbTypes.LineGeometry)
range1_symbol.setColor(QColor(color))
range1_symbol.setOpacity(opacity)
range1 = QgsRendererRange(minval, maxval, range1_symbol, label)

renderer = QgsGraduatedSymbolRenderer(range_field, [range1])
layer.setRenderer(renderer)
QgsProject.instance().addMapLayer(layer)

๐ŸŒ„ Raster แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ›แƒกแƒฃแƒ‘แƒฃแƒฅแƒ˜ แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜ PyQGIS-แƒ˜แƒ—

แƒ”แƒก แƒคแƒแƒ˜แƒšแƒ˜ แƒ›แƒแƒ˜แƒชแƒแƒ•แƒก แƒ›แƒแƒ แƒขแƒ˜แƒ• แƒ“แƒ แƒกแƒฌแƒ แƒแƒค แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ”แƒ‘แƒก แƒ แƒแƒกแƒขแƒ แƒฃแƒšแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก (DEM, แƒกแƒแƒขแƒ”แƒšแƒ˜แƒขแƒฃแƒ แƒ˜ แƒ’แƒแƒ›แƒแƒกแƒแƒฎแƒฃแƒšแƒ”แƒ‘แƒ แƒ“แƒ แƒ.แƒจ.) แƒ“แƒแƒกแƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒšแƒแƒ“ PyQGIS-แƒจแƒ˜.


๐Ÿงฉ 1. แƒ›แƒ˜แƒœแƒ˜แƒ›แƒแƒšแƒฃแƒ แƒ˜ แƒ“แƒ แƒ›แƒแƒฅแƒกแƒ˜แƒ›แƒแƒšแƒฃแƒ แƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒ

layer = iface.activeLayer()
provider = layer.dataProvider()

stats = provider.bandStatistics(1, QgsRasterBandStats.All)
print(f"Min: {stats.minimumValue()}, Max: {stats.maximumValue()}")
๐Ÿ‘‰ แƒ’แƒแƒ›แƒแƒกแƒแƒ“แƒ”แƒ’แƒ˜แƒ DEM-แƒ˜แƒก แƒกแƒ˜แƒ›แƒแƒฆแƒšแƒ˜แƒก แƒ“แƒ˜แƒแƒžแƒแƒ–แƒแƒœแƒ˜แƒก แƒแƒœ แƒกแƒžแƒ”แƒฅแƒขแƒ แƒฃแƒšแƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒกแƒแƒ แƒ™แƒ•แƒ”แƒ•แƒแƒ“.


๐ŸŽš๏ธ 2. แƒžแƒ˜แƒฅแƒกแƒ”แƒšแƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒš แƒฌแƒ”แƒ แƒขแƒ˜แƒšแƒ–แƒ”

from qgis.core import QgsPointXY

layer = iface.activeLayer()
point = QgsPointXY(443000, 4615000)  # แƒฉแƒแƒกแƒ•แƒ˜ แƒจแƒ”แƒœแƒ˜ แƒ™แƒแƒแƒ แƒ“แƒ˜แƒœแƒแƒขแƒ”แƒ‘แƒ˜
value = layer.dataProvider().sample(point, 1)
print("Pixel value:", value)
๐Ÿ‘‰ แƒกแƒฌแƒ แƒแƒคแƒ˜ แƒ’แƒ–แƒแƒ แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒšแƒ˜ แƒแƒ“แƒ’แƒ˜แƒšแƒ˜แƒก แƒกแƒ˜แƒ›แƒแƒฆแƒšแƒ˜แƒก แƒแƒœ แƒกแƒฎแƒ•แƒ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒšแƒแƒ“.


๐Ÿงฎ 3. แƒ แƒแƒกแƒขแƒ แƒฃแƒšแƒ˜ แƒ’แƒแƒ›แƒ แƒแƒ•แƒšแƒ”แƒ‘แƒ แƒแƒœ แƒ’แƒแƒงแƒแƒคแƒ

import processing

input_raster = r'C:/data/dem.tif'
output = r'C:/data/dem_scaled.tif'

processing.run("gdal:rastercalculator", {
    'INPUT_A': input_raster,
    'BAND_A': 1,
    'FORMULA': 'A/10',  # แƒแƒœ 'A*1.5'
    'OUTPUT': output
})

iface.addRasterLayer(output, 'DEM_scaled')
๐Ÿ‘‰ แƒ’แƒแƒ›แƒแƒกแƒแƒ“แƒ”แƒ’แƒ˜แƒ DEM-แƒ˜แƒก แƒ”แƒ แƒ—แƒ”แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒแƒœ แƒ™แƒแƒœแƒขแƒ แƒแƒกแƒขแƒ˜แƒก แƒจแƒ”แƒกแƒแƒชแƒ•แƒšแƒ”แƒšแƒแƒ“.


๐Ÿงฉ 4. แƒ แƒแƒกแƒขแƒ แƒฃแƒšแƒ˜ แƒ แƒ”แƒžแƒ แƒแƒ”แƒฅแƒชแƒ˜แƒ (CRS แƒจแƒ”แƒชแƒ•แƒšแƒ)

input_raster = r'C:/data/dem.tif'
output = r'C:/data/dem_32638.tif'

processing.run("gdal:warpreproject", {
    'INPUT': input_raster,
    'SOURCE_CRS': 'EPSG:4326',
    'TARGET_CRS': 'EPSG:32638',
    'RESAMPLING': 0,
    'OUTPUT': output
})

iface.addRasterLayer(output, 'DEM_UTM')
๐Ÿ‘‰ แƒ’แƒแƒ›แƒแƒกแƒแƒ“แƒ”แƒ’แƒ˜แƒ แƒกแƒฎแƒ•แƒ แƒคแƒ”แƒœแƒ”แƒ‘แƒ—แƒแƒœ แƒ—แƒแƒœแƒฎแƒ•แƒ”แƒ“แƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.


โœ‚๏ธ 5. Extent-แƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ— แƒ›แƒแƒญแƒ แƒ

raster = r'C:/data/dem.tif'
output = r'C:/data/dem_clip.tif'

processing.run("gdal:cliprasterbyextent", {
    'INPUT': raster,
    'PROJWIN': [440000, 4610000, 450000, 4600000],  # xmin, ymin, xmax, ymax
    'OUTPUT': output
})

iface.addRasterLayer(output, 'DEM_clip')
๐Ÿ‘‰ แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒšแƒ˜ แƒฃแƒ‘แƒœแƒ˜แƒก แƒแƒ›แƒแƒกแƒแƒญแƒ แƒ”แƒšแƒแƒ“ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒ›แƒ”แƒ—แƒแƒ“แƒ˜.


๐ŸŽจ 6. แƒคแƒ”แƒ แƒ˜แƒก แƒžแƒแƒšแƒ˜แƒขแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ (Color Ramp)

layer = iface.activeLayer()
shader = QgsRasterShader()
color_ramp = QgsColorRampShader()
color_ramp.setColorRampType(QgsColorRampShader.Interpolated)
color_ramp.setColorRampItemList([
    QgsColorRampShader.ColorRampItem(0, QColor(0, 0, 255), 'Low'),
    QgsColorRampShader.ColorRampItem(1000, QColor(255, 255, 0), 'Mid'),
    QgsColorRampShader.ColorRampItem(2000, QColor(255, 0, 0), 'High')
])
shader.setRasterShaderFunction(color_ramp)
renderer = QgsSingleBandPseudoColorRenderer(layer.dataProvider(), 1, shader)
layer.setRenderer(renderer)
layer.triggerRepaint()
๐Ÿ‘‰ DEM-แƒก แƒแƒœแƒ˜แƒญแƒ”แƒ‘แƒก แƒกแƒ˜แƒ›แƒแƒฆแƒšแƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ— แƒคแƒ”แƒ แƒแƒ“ แƒ’แƒ แƒแƒ“แƒแƒชแƒ˜แƒแƒก.


๐Ÿงฎ Volume โ€” แƒ›แƒแƒชแƒฃแƒšแƒแƒ‘แƒ˜แƒก แƒ“แƒแƒ—แƒ•แƒšแƒ แƒ แƒแƒกแƒขแƒ แƒฃแƒš แƒ’แƒแƒ›แƒแƒกแƒแƒฎแƒฃแƒšแƒ”แƒ‘แƒแƒ–แƒ”

๐Ÿ‘‰ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ›แƒแƒชแƒฃแƒšแƒแƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒ—แƒ•แƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก DEM แƒคแƒ”แƒœแƒ˜แƒ“แƒแƒœ, แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒฃแƒšแƒ˜ แƒกแƒ˜แƒ›แƒแƒฆแƒšแƒ˜แƒก แƒ“แƒแƒœแƒ”แƒ–แƒ”.

rl = r'C:\Users\Public\Documents\GK\PyQGIS\shp\tema_11\Raster\chiatura_dem.tif'

chiatura_volume_html = r'C:\Users\Public\Documents\GK\PyQGIS\shp\tema_11\HTML_stat\chiatura_dem_volume.html'
chiatura_volume_Table = r'C:\Users\Public\Documents\GK\PyQGIS\shp\tema_11\shp\chiatura_dem_volume_table.shp'

processing.run(
    "native:rastersurfacevolume",
    {
        'INPUT': rl,
        'BAND': 1,
        'LEVEL': 0,
        'METHOD': 0,
        'OUTPUT_HTML_FILE': chiatura_volume_html,
        'OUTPUT_TABLE': chiatura_volume_Table
    }
)