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

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

被折叠的 条评论
为什么被折叠?



