Java通过GDAL获取高程数据

下载GDAL依赖

下载GDAL
图例1博主用的是解压版,也没用最新版哈
图例2
下载zip包

配置环境

  1. 配置环境变量
    在这里插入图片描述

  2. 将release-1928-x64\bin目录下所有dll文件拷贝到jdk\bin目录下

图例3
copy all img

  1. 将release-1928-x64\bin\gdal\java目录下gdal.jar拷贝到项目工程内,并用maven引用
    方式1
<dependency>
            <groupId>org.gdal</groupId>
            <artifactId>gdal</artifactId>
            <scope>system</scope>
            <systemPath>${project.basedir}/gdal.jar</systemPath>
</dependency>

方式2
将jar通过maven命令打包至仓库

mvn install:install-file -Dfile=gdal.jar -DgroupId=org.gdal -DartifactId=gdal -Dversion=3.6.4 -Dpackaging=jar

<dependency>
    <groupId>org.gdal</groupId>
    <artifactId>gdal</artifactId>
    <version>3.6.4</version>
</dependency>

测试

  1. 代码
/**
     * 根据经纬度获取高程数据
     * @param lon 经度
     * @param lat 纬度
     * @return 高程
     */
    public static Double SelectAltitude(double lon, double lat) {
        //海拔
        Double altitude = 0d;
        //支持所有驱动
        gdal.AllRegister();
        //要读取的文件,经纬度不可超过查询地图的范围,否则结果为null
        //海拔读取为DEM高程数据
        String fileName_tif = "E:\\CC_workspace\\tif\\SRTMHGT90DEM\\SRTMHGT90.tif";
        //只读方式读取数据
        Dataset hDataset = gdal.Open(fileName_tif, gdalconstConstants.GA_ReadOnly);
        //支持中文路径
        gdal.SetConfigOption("gdal_FILENAME_IS_UTF8", "YES");
        //判断是否非空
        if (hDataset == null) {
            System.err.println("GDALOpen failed - " + gdal.GetLastErrorNo());
            System.err.println(gdal.GetLastErrorMsg());
            System.exit(1);
        }
        //图像的列和行
        Driver hDriver = hDataset.GetDriver();
        int iXSize = hDataset.getRasterXSize();
        int iYSize = hDataset.getRasterYSize();
        Band band = hDataset.GetRasterBand(1);

        //图像六要素
        double[] dGeoTrans = hDataset.GetGeoTransform();
        //经纬度转行列号
        double dTemp = dGeoTrans[1] * dGeoTrans[5] - dGeoTrans[2] * dGeoTrans[4];
        int Xline = (int) ((dGeoTrans[5] * (lon - dGeoTrans[0]) - dGeoTrans[2] * (lat - dGeoTrans[3])) / dTemp + 0.5);
        int Yline = (int) ((dGeoTrans[1] * (lat - dGeoTrans[3]) - dGeoTrans[4] * (lon - dGeoTrans[0])) / dTemp + 0.5);
        //这里是DEM数据,所以声明一个double数组来存储,如果是其他数据类型,声明相应的类型即可

        double[] buf = new double[iXSize];
        //通过xy确定行数据
        band.ReadRaster(0, Yline, iXSize, 1, buf);    //读取一行数据
        //取出像元值
        if (Xline < buf.length) {
            altitude = buf[Xline];
        }

        //删除加载的高程数据
        hDataset.delete();
        // 可选
        gdal.GDALDestroyDriverManager();

        return altitude;
    }
  1. 测试结果
    结果

附:下载高程文件

如何下载谷歌地球高程为TIF格式的文件

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值