Berikut merupakan cara menggabungkan single DEM, seperti di data DEMNAS, dengan memperhatikan sebaran data DEMNAS.
yang pertama kali kita lakukan ialah tentukan dahulu DEM yang akan digunakan.
import os
from osgeo import gdal
from tqdm import tqdm
dem_folder = "drive/MyDrive/demnas"
output_dem = "drive/MyDrive/demnas/merged_dem.tif"
dem_files = [os.path.join(dem_folder, f) for f in os.listdir(dem_folder) if f.endswith(".tif")]
if len(dem_files) == 0:
print("โ Tidak ada file DEM (.tif) di folder demnas.")
else:
print(f"๐ Menggabungkan {len(dem_files)} file DEM...")
with tqdm(total=len(dem_files), desc="๐ Memproses file DEM", unit="file") as bar:
vrt_file = "drive/MyDrive/document/demnas/temp.vrt"
gdal.BuildVRT(vrt_file, dem_files)
bar.update(len(dem_files))
with tqdm(total=100, desc="๐พ Menyimpan file gabungan", unit="%", position=0, leave=True) as bar:
gdal.Translate(output_dem, vrt_file)
bar.update(100)
os.remove(vrt_file)
print(f"โ
File DEM gabungan berhasil dibuat: {output_dem}")
lalu apabila sudah didownnload, tampilkan hasilnya dengan matplotlib sebagai berikut:
import rasterio
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import LinearSegmentedColormap
dem_path = "drive/MyDrive/demnas/merged_dem.tif"
with rasterio.open(dem_path) as src:
dem_data = src.read(1).astype(float)
extent = [src.bounds.left, src.bounds.right, src.bounds.bottom, src.bounds.top]
if src.nodata is not None:
dem_data[dem_data == src.nodata] = np.nan
dem_data = np.nan_to_num(dem_data, nan=0.0, posinf=np.max(dem_data[dem_data != np.inf]), neginf=0.0)
colors = [
(0.0, "darkgreen"),
(0.1, "green"),
(0.3, "yellowgreen"),
(0.5, "yellow"),
(0.7, "orange"),
(0.9, "red"),
(1.0, "darkred")
]
cmap = LinearSegmentedColormap.from_list("topo_cmap", colors)
fig, ax = plt.subplots(figsize=(10, 8))
dem_plot = ax.imshow(dem_data, cmap=cmap, extent=extent)
cbar = plt.colorbar(dem_plot, ax=ax)
cbar.set_label("Elevation (m)")
plt.title("Digital Elevation Model (DEM) - Smooth Topographic Colors")
plt.xlabel("Longitude")
plt.ylabel("Latitude")
plt.show()
Maka hasil yang didapatkan sebagai berikut:

Dari gambar diatas, perlu adanya batas administrasi atau batas garis pantau untuk memotong dem yang sudah digenerate.
Selain itu diharapkan kode ini bisa bermanfaat untuk menggabungkan data yang lebih teliti, dan ingat untuk mengecek kesesuaian batas antar dem agar tidak ada gap yang kosong maupun overlap.