package com.se.simu.utils;
|
|
import org.gdal.gdal.Dataset;
|
import org.gdal.gdal.TranslateOptions;
|
import org.gdal.gdal.gdal;
|
import org.gdal.gdalconst.gdalconstConstants;
|
|
import java.util.Vector;
|
|
public class TiffClipper {
|
public static void cropTiffByLatLon(String inputFilePath, String outputFilePath,
|
double minX, double minY, double maxX, double maxY) throws Exception{
|
// 注册所有 GDAL 驱动
|
gdal.AllRegister();
|
Vector vector=new Vector();
|
vector.add("-projwin");
|
vector.add(String.valueOf(minX));
|
vector.add(String.valueOf(maxY));
|
vector.add(String.valueOf(maxX));
|
vector.add(String.valueOf(minY));
|
TranslateOptions options = new TranslateOptions(vector);
|
// 打开输入数据集
|
Dataset ds = gdal.Open(inputFilePath, gdalconstConstants.GA_ReadOnly);
|
if (ds == null) {
|
throw new Exception("无法打开输入文件: " + inputFilePath);
|
}
|
// 执行裁剪操作
|
Dataset outputDataset = gdal.Translate(outputFilePath, ds, options);
|
if (outputDataset != null) {
|
System.out.println("裁剪成功,输出文件: " + outputFilePath);
|
// 释放数据集资源
|
outputDataset.delete();
|
} else {
|
System.err.println("裁剪失败");
|
}
|
// 销毁 GDAL 驱动管理器
|
gdal.GDALDestroyDriverManager();
|
}
|
public static void main(String[] args) throws Exception{
|
cropTiffByLatLon("D:\\城市内涝\\sem\\DEM.tif","D:\\城市内涝\\sem\\DEM100.tif",470066.5191659781,4417962.449727667,470922.1436516798,4418059.07638588);
|
}
|
}
|