windows和docker环境下springboot整合gdal3.x

链接: gdal官网地址

gdal

gdal的一个用c++语言编写的库,用于处理地理信息相关的数据包括转换,识别数据,格式化数据以及解析

同时提供第三方语言的SDK包括python,java上述需要编译后使用 java是需要使用jni接口调用实现方法在window平台是DLL文件,在linux平台是so文件,最后需要使用和初始化服务。

windows环境

链接: gdal Download

在这里插入图片描述

(1)第一种简单粗暴的方式就是把gdal包bin目录下所有的dll文件和bin\gdal\java下的dll文件丢到你的JDK的bin目录下,对应的jar包也许在\bin\gdal\java目录下。

链接: windows Springboot 集成GDAL开发环境配置

1.将解压后的GDAL压缩包bin文件夹下的所有dll文件拷贝到自己电脑的jdk安装目录下的bin文件夹中(我的电脑是C:\jdk\bin),如果有冲突文件可以跳过。 注意是jdk下bin文件夹,不是jre下的bin。

在这里插入图片描述
2.将压缩包解压后的bin\gdal\java\gdalalljni.dll文件同样到jdk下的bin文件夹中
在这里插入图片描述

(2)第二种是自己新建一个文件夹把需要的dll文件全放在一起,然后自己配环境变量(总之让系统能找到你的库就行了)。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Path 添加
在这里插入图片描述

Linux和docker环境

链接: OSGeo/gdal github地址

在Linux上,gdal官网上没有编译好的包,要自己去下gdal的源码包,然后自己编译,后面会生成.so文件和jar包,和windows一样可以配置环境变量或者把so文件丢到jdk的bin目录下。


-- 拉取镜像
docker pull osgeo/gdal:latest


-- 以本机的网络模式运行 内部的端口则可以直接访问了 
docker run -it --rm -v /home/gadl/tmp/sll:/tmp/sll -d --network=host osgeo/gdal:latest

-- 查看GDAL库的版本。
gdalinfo --version

-- 查看java的版本。
java -version

-- 进入目录
docker exec -it 容器id /bin/bash

cd /tmp/sll/

-- 把jar复制进来
java -jar 启动 jar包

在这里插入图片描述

docker-compose启动

  gdalservice:
    image: "osgeo/gdal:latest"
    container_name: gdalservice
    volumes:
      - ./gdalservice/data:/data
      - /opt/docker-project/gdalservice/data/geo-api-0.0.1-SNAPSHOT.jar:/app/geo-api-0.0.1-SNAPSHOT.jar
    environment:
      - SOME_ENV_VAR=value
    command: /bin/sh -c "java -jar /app/geo-api-0.0.1-SNAPSHOT.jar"
    ports:
      - "9003:9003"

测试代码

链接: 官方gdal的java调用API

写个springboot项目接口 打包上去测试即可

引入依赖


        <!-- https://mvnrepository.com/artifact/org.gdal/gdal -->
        <dependency>
            <groupId>org.gdal</groupId>
            <artifactId>gdal</artifactId>
            <version>3.7.0</version>
        </dependency>

 public static void main(String[] args) {

        // 指定文件的名字和路径
        String gdbFile = "D:\\test\\MyProject12.gdb";

        // 注册所有的驱动
        ogr.RegisterAll();

        // 为了支持中文路径,请添加下面这句代码
        gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES");
        // 为了使属性表字段支持中文,请添加下面这句
        gdal.SetConfigOption("SHAPE_ENCODING", "CP936");

        //打开文件获取数据集
        Dataset dataset = gdal.OpenEx(gdbFile);
        if (dataset == null) {
            System.out.println("打开"+gdbFile+"失败"+gdal.GetLastErrorMsg());
            System.exit(1);
        }

        Group group = dataset.GetRootGroup();

        Vector<String> vector1 = group.GetGroupNames();
        System.out.println(vector1);

        for (String name : vector1) {

            Group group1 = group.OpenGroup(name);
            Vector<String> vector = group1.GetVectorLayerNames();
            for (String o : vector) {
                Layer layer =  group1.OpenVectorLayer(o);
                System.out.println(layer.GetName());

            }

        }

        Vector vector2 = group.GetVectorLayerNames(vector1);
        System.out.println(vector2);


        // 读取数据,这里以gdb文件为例
        // 程序提供对ArcGIS 9及以上版本创建的文件geodatabase.gdb目录的矢量层的读取访问。数据集名称必须是目录/文件夹名称并且必须以.gdb扩展名结尾。它还可以直接读取zipped.gdb目录扩展名为.gdb.zip前提是它们在第一级包含一个.gdb目录。也可以直接打开特定的.gdbtable文件包括“system”表。几何图形中的曲线由GDAL>=2.2支持。
        String strDriverName = "OpenFileGDB";
        // 创建一个文件,根据strDriverName扩展名自动判断驱动类型
        org.gdal.ogr.Driver oDriver = ogr.GetDriverByName(strDriverName);



        if (oDriver == null) {
            System.out.println(strDriverName + " 驱动不可用!\n");
            return;
        }
        DataSource dataSource = oDriver.Open(gdbFile, 0);

        for (int i = 0; i < dataSource.GetLayerCount(); i++) {

            Layer layerIdx = dataSource.GetLayer(i);

            System.out.println("图层名称 要素类:<==>" + layerIdx.GetName());
        }

        Layer layer = dataSource.GetLayer("test");

        SpatialReference spatialReference = layer.GetSpatialRef();

        System.out.println("空间参考坐标系:" + spatialReference.GetAttrValue("AUTHORITY", 0)
                + spatialReference.GetAttrValue("AUTHORITY", 1));

        double[] layerExtent = layer.GetExtent();

        System.out.println("图层范围:minx:" + layerExtent[0] + ",maxx:" + layerExtent[1] + ",miny:" + layerExtent[2]
                + ",maxy:" + layerExtent[3]);

        FeatureDefn featureDefn = layer.GetLayerDefn();

        int fieldCount = featureDefn.GetFieldCount();

        Map<String, String> fieldMap = new HashMap<String, String>();
        for (int i = 0; i < fieldCount; i++) {
            FieldDefn fieldDefn = featureDefn.GetFieldDefn(i);
            // 得到属性字段类型
            int fieldType = fieldDefn.GetFieldType();
            String fieldTypeName = fieldDefn.GetFieldTypeName(fieldType);
            // 得到属性字段名称
            String fieldName = fieldDefn.GetName();
            fieldMap.put(fieldTypeName, fieldName);
        }

        //System.out.println(fieldMap);
        long featureCount = layer.GetFeatureCount();
        System.out.println("图层要素个数:" + featureCount);



        Feature feature2 = null;
        while ((feature2 = layer.GetNextFeature()) != null) {
            // System.out.println(feature2.GetGeometryRef().ExportToJson());
            //System.out.println(feature2.GetFieldAsString("Shape_Area") + "\t" + feature2.GetFieldAsString("省区"));
        }

        oDriver.delete();
        gdal.GDALDestroyDriverManager();

    }

参考链接

链接: Linux下安装GDAL(含docker部分)

链接: Java调用开源GDAL解析dxf成shp,再调用开源GeoTools解析shp文件

链接: Ubuntu基于Docker快速配置GDAL的Python、C++环境)

链接: docker pull osgeo/gdal:latest

链接: linux机器搭建java版gdal环境

链接: gdal容器化记录

链接: 【Linux】CentOS制作Java+GDAL环境镜像并部署运行SpringBoot项目

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/116218.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数码3C零售门店运营,智慧显示有何优势?以清远电信为例。

随着时代和科技的发展&#xff0c;线下实体零售门店运营方式也逐步进化&#xff0c;面对有大体量线门店&#xff0c;需要花费更多心思和资源管理的品牌&#xff0c;在全球经济缓慢增长的当下&#xff0c;开始走向去冗余、提效率的阶段&#xff0c;俗称降本增效。 在此阶段&…

网络协议的基本概念

网络协议的基本概念 随处可见的协议 在计算机网络与信息通信领域里&#xff0c;人们经常提及“协议”一词。互联网中常用的具有代表性的协议有IP、TCP、HTTP等。 “计算机网络体系结构”将这些网络协议进行了系统归纳。TCP/IP就是IP、TCP、HTTP等协议的集合。现在&#xff0…

centos9 stream 下 rabbitmq高可用集群搭建及使用

RabbitMQ是一种常用的消息队列系统&#xff0c;可以快速搭建一个高可用的集群环境&#xff0c;以提高系统的弹性和可靠性。下面是搭建RabbitMQ集群的步骤&#xff1a; 基于centos9 stream系统 1. 安装Erlang和RabbitMQ 首先需要在所有节点上安装Erlang和RabbitMQ。建议使用官…

thinkphp的路径参数(RESTFul风格),把参数写在路径里

thinkphp官方文档 https://www.kancloud.cn/manual/thinkphp5_1/353969 有一个Blog控制器&#xff0c;里面的read方法是固定的&#xff0c;不能该 route.php里添加如下代码&#xff0c;访问 blog对应的就是 android/blog Route::resource(blog,android/blog);然后访问路径

IS200EPSMG1AED 使用Lua创建逻辑脚本或完整程序

IS200EPSMG1AED 使用Lua创建逻辑脚本或完整程序 IS200EPSMG1AED 是一种支持网络的I/O控制器&#xff0c;它执行类似于可编程逻辑控制器(PLC)的控制、逻辑和监控功能。然而&#xff0c;与PLC不同&#xff0c;X-600M是为基于网络的应用而设计的。X-600M可以使用内置网络服务器和…

【MongoDB】Windows 安装MongoDB 6.0

一、下载安装包 安装包下载地址https://www.mongodb.com/try/download/community这里我选择的是 二、解压并安装 1、解压 这里我将压缩包解压到了D盘&#xff0c;并重命名成了mongodb&#xff0c;解压后的目录如下&#xff1a; 2、创建配置文件 在D:\mongodb下新建conf目录…

【C语言】备战校赛Day3

日期:11.3 星期五 L1-007 念数字 题目描述 输入一个整数&#xff0c;输出每个数字对应的拼音。当整数为负数时&#xff0c;先输出fu字。十个数字对应的拼音如下&#xff1a; 0: ling 1: yi 2: er 3: san 4: si 5: wu 6: liu 7: qi 8: ba 9: jiu 输入描述 输入在一行中给出一个…

Flutter GetX的使用

比较强大的状态管理框架 引入库&#xff1a; dependencies:get: ^4.6.6一.实现一个简单的demo 实现一个计数器功能 代码如下&#xff1a; import package:flutter/material.dart; import package:get/get.dart;void main() > runApp(const GetMaterialApp(home: Home()…

SpringBoot+AOP+自定义注解,优雅实现日志记录

文章目录 前言准备阶段1、数据库日志表2、自定义注解编写3、AOP切面类编写4、业务层4.1、Service 层&#xff1a;4.2 Service 实现层&#xff1a; 5、测试 前言 首先我们看下传统记录日志的方式是什么样的&#xff1a; DeleteMapping("/deleteUserById/{userId}") …

Gradle笔记 一 Gradle的安装与入门

文章目录 Gradle 入门Gradle 简介学习Gradle 的原因&#xff1a; 常见的项目构建工具Gradle 安装Gradle 安装说明安装JDK 下载并解压到指定目录配置环境变量检测是否安装成功 Gradle 项目目录结构Gradle 创建第一个项目Gradle 中的常用指令修改maven 下载源Wrapper 包装器使用教…

LeetCode----25. K 个一组翻转链表

题目 给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。 k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。 示…

Windows环境下使用VLC获取到大疆无人机的RTMP直播推流

1.环境准备 1.安装nginx 1.7.11.3 Gryphon 下载地址&#xff1a;http://nginx-win.ecsds.eu/download/ 下载nginx 1.7.11.3 Gryphon.zip&#xff0c;解压后修改文件夹名称为nginx-1.7.11.3-Gryphon&#xff1b; 2.安装nginx-rtmp-module 下载地址&#xff1a;GitHub - arut…

Centralized Feature Pyramid for Object Detection解读

Centralized Feature Pyramid for Object Detection 问题 主流的特征金字塔集中于层间特征交互&#xff0c;而忽略了层内特征规则。尽管一些方法试图在注意力机制或视觉变换器的帮助下学习紧凑的层内特征表示&#xff0c;但它们忽略了对密集预测任务非常重要的被忽略的角点区…

lua-resty-request库写入爬虫ip实现数据抓取

根据提供的引用内容&#xff0c;正确的库名称应该是lua-resty-http&#xff0c;而不是lua-resty-request。使用lua-resty-http库可以方便地进行爬虫&#xff0c;需要先安装OpenResty和lua-resty-http库&#xff0c;并将其引入到Lua脚本中。然后&#xff0c;可以使用lua-resty-h…

springmvc 讲解(2)

系列文章目录 springmvc讲解&#xff08;1 &#xff09;点击此处即可 文章目录 系列文章目录一、Springmvc发送数据1、快速跳转页面1.1 开发模式讲解1.2 jsp简述1.3 页面跳转控制1.4 转发和重定向 2、返回json数据2.1 ResponseBody 注解2.2 RestController注解 3、访问静态资源…

通过在Z平面放置零极点的来设计数字滤波器

文章来源地址&#xff1a;https://www.yii666.com/blog/393376.html 通过在Z平面放置零极点的来设计数字滤波器 要求&#xff1a;设计一款高通滤波器&#xff0c;用在音频信号处理过程中&#xff0c;滤掉100Hz以下的信号。 实现方法&#xff1a;通过在Z平面放置零极点的来设…

独创改进 | RT-DETR 引入双向级联特征融合结构 RepBi-PAN | 附手绘结构图原图

本专栏内容均为博主独家全网首发,未经授权,任何形式的复制、转载、洗稿或传播行为均属违法侵权行为,一经发现将采取法律手段维护合法权益。我们对所有未经授权传播行为保留追究责任的权利。请尊重原创,支持创作者的努力,共同维护网络知识产权。 文章目录 YOLOv6贡献RepBi-…

NLP之Bert介绍和简单示例

文章目录 1. Bert 介绍2. 代码示例2.1 代码流程 1. Bert 介绍 2. 代码示例 from transformers import AutoTokenizertokenizer AutoTokenizer.from_pretrained("bert-base-chinese") input_ids tokenizer.encode(欢迎来到Bert世界, return_tensorstf) print(input…

Linux下input子系统

文章目录 input子系统简单介绍相关的函数input_dev注册过程上报输入事件按键的input子系统实验 input子系统简单介绍 input子系统是管理输入的子系统&#xff0c;和pinctrl和gpio子系统一样&#xff0c;都是Linux内核针对某一类设备而创建的框架。比如按键输入、键盘、鼠标、触…