gdal for java 从安装到各种案例demo实现

本文介绍如何使用Java结合GDAL进行GIS数据处理,包括环境配置、打开shp及gdb文件、从PostgreSQL数据库导入导出shp文件、读取属性等,并提供了详细的代码示例。

java+GDAL

0、环境配置

  • 下载GDAL:

    ​ 下载地址:GISInternals Support Site

    ​ 建议使用最新版本(支持FileGDB)
    在这里插入图片描述

  • 本地部署:

    • 解压后将GDAL的bin文件夹下所有的dll(不包括bin目录下的文件夹)和bin/gdal/java下的dll文件拷贝到jdk安装路径的bin目录下

    • 将\bin\gdal\plugins-external内的ogr_FileGDB.dll拷贝到\bin\gdal\plugins下

    • 将GDAL的bin目录添加到Path环境变量

    在这里插入图片描述

    • \bin\gdal\plugins 目录添加到环境变量,变量名为GDAL_DRIVER_PATH

在这里插入图片描述

  • 将proj.db所在路径添加到环境变量,变量名为PROJ_LIB

在这里插入图片描述

  • 开发流程

    1.在IDEA里导入本地jar包

在这里插入图片描述

2.编写代码

package com.lulie.gdal;

import org.gdal.gdal.gdal;
import org.gdal.ogr.ogr;

//测试案例
class GdalDemo {
   
   
	//获取所有驱动的名称并打印
	public void printDriver() {
   
   
		gdal.AllRegister();
		int count = ogr.GetDriverCount();
		for (int i = 0; i < count; i++) {
   
   
			String driverName = ogr.GetDriver(i).getName();
			System.out.print(driverName + "\t");
		}
		gdal.GDALDestroyDriverManager();
	}

	public static void main(String[] args) {
   
   
		GdalDemo demo = new GdalDemo();
		demo.printDriver();
	}
}

结果:

在这里插入图片描述

注意:

遇到 ERROR 1: Can’t load requested DLL: E:\gdal\bin\gdal\plugins\gdal_GEOR.dll 错误,可以不管。

案例1-打开shp

package com.lulie.gdal;

import org.gdal.gdal.gdal;
import org.gdal.ogr.*;

public class GdalDemo_shp {
   
   

	public String opeanShp(String strVectorFile) {
   
   
		//准备,注册驱动
		ogr.RegisterAll();
        //设置支持中文
		gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8","YES");
		gdal.SetConfigOption("SHAPE_ENCODING","CP936");
		//获取驱动
		String shpDriverName = "ESRI Shapefile";
		Driver shpDriver =ogr.GetDriverByName(shpDriverName);
		if (shpDriver == null) {
   
   
			throw new RuntimeException(shpDriverName+ " 驱动不可用!\n");
		}

		//获取数据源
		DataSource shpDataSource = ogr.Open(strVectorFile,0);
		if (shpDataSource == null)
		{
   
   
			throw new RuntimeException("打开文件【"+ strVectorFile + "】失败!" );
		}
		//获取图层0
		Layer shpLayer = shpDataSource.GetLayerByIndex(0);
		if (shpLayer == null)
		{
   
   
			throw new RuntimeException("获取shp图层失败!\n");
		}
		//转化为json
		Feature feature = shpLayer.GetNextFeature();
		Geometry geometry = feature.GetGeometryRef();
		String json = geometry.ExportToJson();
        shpDataSource.delete();
		gdal.GDALDestroyDriverManager();
		return json;
	}

	public static void main(String[] args) {
   
   
		GdalDemo_shp shp = new  GdalDemo_shp();
		String strVectorFile ="D:\\新建文件夹\\4496\\天府新区.shp";
		String info = shp.opeanShp(strVectorFile);
		System.out.println(info);
	}
}

案例2-打开gdb

	public void openGdb() {
   
   
		//注册所有驱动
		ogr.RegisterAll();
		//支持中文路径
		gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES");
		//属性表支持中文
		gdal.SetConfigOption("SHAPE_ENCODING", "CP936");

		//获取GDB驱动
		String gdbDriverName = "FileGDB";
		org.gdal.ogr.Driver gdbDriver = ogr.GetDriverByName(gdbDriverName);
		if(gdbDriver == null){
   
   
			System.out.println("不支持" + gdbDriverName + "驱动");
			return;
		}
		String gdbPath = "C:\\Users\\lulie\\Desktop\\test.gdb";
		DataSource gdbDataSource = gdbDriver.Open(gdbPath, 0);
		if(gdbDataSource == null){
   
   
			System.out.println("GDAL打开gdb失败!");
			return;
		}
		for (int i = 0; i < gdbDataSource.GetLayerCount(); i++) {
   
   
			String layerName = gdbDataSource.GetLayer(i).GetName();
			System
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值