当前位置: 首页 > news >正文

gdal连接pg(java案例)

1、下载gdal

https://www.gisinternals.com/archive.php 打开官方下载地址。

我下载的是3.8.5版本,MSVC2022,x64,release-1930-x64-gdal-3-8-5-mapserver-8-0-1,区别不大,自身系统比较低的下载低版本。

进入3.8.5的下载列表,我选择的第一个,编译后的二进制压缩包

 

解压压缩包,cmd进入命令行C:\Users\HIGHGO\Desktop\GIS\release-1930-x64-gdal-3-8-5-mapserver-8-0-1\bin\gdal\apps 

查看支持格式.
ogr2ogr --formats

1.2、配置环境变量

PATH=G:\release-1930-x64-gdal-3-8-5-mapserver-8-0-1\bin

PATH=G:\release-1930-x64-gdal-3-8-5-mapserver-8-0-1\bin\gdal\apps

GDAL_DATA=G:\release-1930-x64-gdal-3-8-5-mapserver-8-0-1\bin\gdal-data

PROJ_LIB=G:\release-1930-x64-gdal-3-8-5-mapserver-8-0-1\proj

2、导入shp

#导入shp-linux
ogr2ogr -f "PostgreSQL" PG:"host='127.0.0.1' dbname='xxxxxx' user='xxxxx' password='xxxxx@123' port=5432" /opt/110m_physical/ne_110m_ocean.shp


#导入shp-win
ogr2ogr -f "PostgreSQL" PG:"host='xxxxxx' dbname='postgres' user='postgres' password='postgres' port=5432" C:\Users\HIGHGO\Desktop\GIS\data\NewYork\110m_physical\ne_110m_ocean.shp


3、导入xlsx


#导入xls-linux
ogr2ogr -f "PostgreSQL" PG:"host='127.0.0.1' dbname='highgo' user='sysdba' password='Test@123' port=5866" /opt/dltbxz_tqmj.xlsx
#导入xls-win
ogr2ogr -f "PostgreSQL" PG:"host='192.168.110.217' dbname='postgres' user='postgres' password='postgres' port=5432" C:\Users\HIGHGO\Desktop\GIS\data\dltbxz_tqmj.xlsx

4、导入gdb

#导入gdb-win
ogr2ogr -f "PostgreSQL" PG:"host='192.168.110.217' dbname='postgres' user='postgres' password='postgres' port=5432" C:\Users\HIGHGO\Desktop\GIS\data\test_highgo.gdb -nln chinasheng -overwrite chinasheng -progress -lco GEOMETRY_NAME=geom --config PG_USE_COPY YES

5、java调用(非最优方法)

注明:本方法只是快速使用,尽量不改变jdk目录结构,如果使用框架或更深入,请采用其他方法。

把gdal.jar和gdalalljni.dll拷贝到项目的lib下,然后配置maven

       <dependency><groupId>org.gdal</groupId><artifactId>gdal</artifactId><version>3.8.5</version><scope>system</scope><systemPath>E:\space\workspace4.30\test/lib/gdal.jar</systemPath></dependency>

添加运行参数

通过gdal把shp导入pg数据库

package test;
import org.gdal.gdal.gdal;
import org.gdal.ogr.DataSource;
import org.gdal.ogr.Layer;
import org.gdal.ogr.ogr;public class ShapefileToPostgres {public static void main(String[] args) {// 初始化 GDAL 和 OGRgdal.AllRegister();ogr.RegisterAll();// Shapefile 的路径String shpFilePath = "C:/Users/HIGHGO/Desktop/GIS/data/NewYork/110m_physical/ne_110m_coastline.shp";// PostgreSQL 的连接字符串String pgConnectionString = "PG:host=192.168.110.217 user=postgres dbname=postgres password=postgres";// 打开 Shapefile 数据源DataSource shpDataSource = ogr.Open(shpFilePath, 0); // 0 表示只读if (shpDataSource == null) {System.err.println("无法打开 Shapefile 文件: " + shpFilePath);return;}// 打开 PostgreSQL 数据源DataSource pgDataSource = ogr.Open(pgConnectionString, 1); // 1 表示读写if (pgDataSource == null) {System.err.println("无法连接 PostgreSQL 数据库: " + pgConnectionString);return;}// 获取 Shapefile 中的第一个图层Layer shpLayer = shpDataSource.GetLayer(0);// 创建 PostgreSQL 图层,名称为 Shapefile 图层的名称String layerName = shpLayer.GetName();Layer pgLayer = pgDataSource.CreateLayer(layerName, shpLayer.GetSpatialRef(), shpLayer.GetGeomType());if (pgLayer == null) {System.err.println("无法在 PostgreSQL 中创建图层: " + layerName);return;}// 将 Shapefile 中的每个字段添加到 PostgreSQL 图层中for (int i = 0; i < shpLayer.GetLayerDefn().GetFieldCount(); i++) {pgLayer.CreateField(shpLayer.GetLayerDefn().GetFieldDefn(i));}// 开始复制 Shapefile 中的每个要素到 PostgreSQL 图层shpLayer.ResetReading();org.gdal.ogr.Feature feature;while ((feature = shpLayer.GetNextFeature()) != null) {// 克隆要素以插入到 PostgreSQL 图层org.gdal.ogr.Feature pgFeature = feature.Clone();pgLayer.CreateFeature(pgFeature);// 清理资源pgFeature.delete();feature.delete();}// 关闭数据源shpDataSource.delete();pgDataSource.delete();System.out.println("Shapefile 成功导入 PostgreSQL 数据库!");}
}


http://www.mrgr.cn/news/64903.html

相关文章:

  • 你敢想象吗?我能远程控制家里的电脑进入Bios
  • 【计网不挂科】计算机网络期末考试中常见【选择题&填空题&判断题&简述题】题库(3)
  • python项目实战 小说下载源码
  • 深入探讨 Jenkins 中 HTML 格式无法正常显示的现象及解决方案
  • 天生倔强脸的白纸新人,徐畅演艺生涯初舞台获得肯定!
  • 有趣的实验-SM3计算多字节数据的消耗时间
  • 图神经网络在复杂系统中的应用
  • Python中常见的矩阵乘法操作
  • linux 系统扩容
  • 客户端时间 与 服务器时间
  • Flink本地模式安装详解
  • Linux第二周作业
  • Android13开发IPV4地址固定
  • 操作系统——计算机系统概述——1.4操作系统结构
  • 【数据结构】二叉树——前中后序遍历
  • 聚类算法综述
  • RC高通滤波器Bode图分析(传递函数零极点)
  • 【Jenkins】 上传docker包并推送到远程仓库
  • 基于YOLO11/v10/v8/v5深度学习的危险驾驶行为检测识别系统设计与实现【python源码+Pyqt5界面+数据集+训练代码】
  • ZYNQ7045之YOLO部署——FPGA-ZYNQ Soc实战笔记1
  • C#中const与readonly的区别:定义、赋值与用途
  • Observability:OpenTelemetry Elastic 分发简介
  • 全网最全的前端学习路线和编程指南
  • 微服务架构深入理解 | 技术栈
  • 基于java+SpringBoot+Vue的古典舞在线交流平台设计与实现
  • 高频电子线路---调幅方法与检波