windows环境下使用Java配置GDAL的开发环境指南

前言

对于一个GIS开发者来说,GDAL是处理地理数据不可或缺的工具,虽然gdal提供的release版本中提供了java的JNI(Java Native Interface)包,但是正确的配置和部署打包还存在一些坑,这篇文章做一个完整的记录。


开发环境:Jdk1.8、IntelliJ IDEA 2023.1 (Ultimate Edition)、Maven3.8.1、gdal3.6.3

服务器环境:Windows Server 2022 Datacenter(Linux系统服务器随后更新

GDAL配置

网上有很多关于gdal的配置方法,以及添加到系统变量的过程,这里不多赘述。我们主要的任务是在Idea里面通过Maven的pom文件来管理gdal的依赖,可以正常在项目中使用,并且可以正确将gdal的JNI包打包进项目的完整jar包内,可以在服务器单独运行jar包,所以不做其他环境路径的配置。

  1. 下载gdal的release版本,以下是示例网址:GISInternals Support Site
  2.  解压后进入目录文件下的bin/gdal/java目录(如果没有java这个目录,说明下载的文件不对,再去官网找找):我们需要gdalalljni.dll文件和gdal-3.6.3文件。其中gdalalljni.dll文件是gdal的动态链接库,源码是C/C++编写的。gdal-3.6.3的jar包是将函数库封装了一层java的接口。注意:gdal-3.6.3中的内容只是接口,其实现要借助release版本下的dll文件的完成。
  3. 复制gdalalljni.dll到电脑本机的jdk的jre的bin目录下面。如果没有更改过的话默认应该是:C:\Program Files\Java\jdk1.8.0_281\jre\bin。如果在配置服务器环境,也可以这样操作。
  4.  返回gdal的release目录下的bin目录,按文件类型排序,复制所有后缀为.dll的应用程序扩展文件,粘贴进C:\Program Files\Java\jdk1.8.0_281\bin目录下。

 

(我本机java在D盘) 

                 

Maven配置

在上述的dll文件拷贝完成之后,将gdal-3.6.3.jar文件拷贝到项目路径中来,放在那里看自己(一般是放在resources下的lib就好)。

来到项目中,在maven的依赖添加如下代码:

        <dependency>
            <groupId>org.gdal</groupId>
            <artifactId>gdal</artifactId>
            <version>3.6.3</version>
            <scope>system</scope>
            <systemPath>D:/IdeaProjects/system_back/lib/gdal-3.6.3.jar</systemPath>
        </dependency>

由于我项目本身是基于springboot的多模块项目,比较复杂,这个只是在使用到gdal模块的pom中添加即可。

需要注意的是,在<systemPath>标签内的路径是本机电脑中刚才gdal-3.6.3.jar文件的绝对路径。这里如果你是单模块的项目,可以将jar包拷贝到项目的根目录下,用${project.basedir}来获取到项目根目录而不使用绝对路径。使用绝对路径对团队开发项目不友好,毕竟大家的文件路径都不是一致的。但如果对这些路径不熟悉,还是推荐使用绝对路径,确保程序能找到jar包。

            <systemPath>${project.basedir}/lib/gdal-3.6.3.jar</systemPath>

 之后刷新maven,然后依赖正常导入,没有标红,说明依赖引入正常。

接下来需要去代码中测试一下,这里提供一个简单的测试dem:

import org.gdal.gdal.Dataset;
import org.gdal.gdal.gdal;
import org.gdal.gdalconst.gdalconstConstants;

public class Gdal {

    /**
     * 必须注册
     */
    static {
        gdal.AllRegister();
    }

    private static final String FILE_PATH = "E:\\data\\压力测试数据\\testdata\\myresult.tif";
//    public static void main(String[] args) {
//        readTif();
//    }

    public static void readTif() {
        Dataset dataset = gdal.Open(Gdal.FILE_PATH, gdalconstConstants.GA_ReadOnly);
        //获取到六参数数组
        double[] ori_transform = dataset.GetGeoTransform();
        //最小x
        double minX = ori_transform[0];
        //x方向分辨率
        double resoutionX = ori_transform[1];
        //x方向旋转角度
        double angleX = ori_transform[2];
        //最大y
        double maxY = ori_transform[3];
        //Y方向旋转角度
        double angleY = ori_transform[4];
        //y方向分辨率
        double resoutionY = ori_transform[5];
        //x方向的像素数
        int pixelX = dataset.getRasterXSize();
        //y方向像素
        int pixelY = dataset.getRasterYSize();

        System.out.println(minX);
        System.out.println(resoutionX);
        System.out.println(angleX);
        System.out.println(maxY);
        System.out.println(resoutionY);
        System.out.println(pixelX);
        System.out.println(pixelY);

    }

}

上述tif文件路径换为自己的tif文件即可。这个readTif方法运行成功的话,说明gdal配置成功。

Windows服务器部署打包

在部署打包之前,要确保服务器的gdal版本和本机的版本一致,并且上述的dll文件全部都在服务器的java中进行了相同操作的配置。


  1. 在Idea的右侧maven中,来到主工程目录下的生命周期,运行一下clean。
  2. 我的项目是多模块,有一个所有模块的父pom文件管理。进入到父工程的POM文件中配置打包的设置,要将gdal-3.6.3.jar指定到打包路径中,不然默认的情况不会打包。
  3. 添加以下配置代码:(其中第一个resouce中的目录是gdal-3.6.3.jar的本机绝对路径,第二个resource是默认配置,不能丢。)
    <build>
            <resources>
                <resource>
                    <directory>D:/IdeaProjects/system_back/lib</directory>
                    <targetPath>BOOT-INF/lib/</targetPath>
                    <includes>
                        <include>**/*.jar</include>
                    </includes>
                </resource>
                <resource>
                    <directory>${project.basedir}/src/main/resources</directory>
                    <includes>
                        <include>**/*.*</include>
                    </includes>
                    <filtering>false</filtering>
                </resource>
            </resources>
    </build>
  4. 刷新maven,然后运行生命周期下面的package命令。等待打包完成。
  5.  打包完成之后,进入启动类所在模块下的target文件,找到模块打包好的项目jar包。用压缩软件看一下里面BOOT-INFO/lib下面的文件,可以找到gdal-3.6.3.jar已经被打包进来了,这样的jar包拷贝到服务器之后,进入cmd命令窗口运行java -jar xxxx.jar,就可以正常启动服务了。

​​​​​​​

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值