文章目录
简要说明
在java开发中,将gdb的图层数据转为postgresql的空间表
maven依赖
java
<!--需要安装完gdal后,本地install gdal包才能使用 -->
<!--gdal安装可参考 https://blog.csdn.net/qq_41613913/article/details/135743562 -->
<dependency>
<groupId>org.gdal</groupId>
<artifactId>gdal</artifactId>
<version>3.7.3</version>
</dependency>
样例代码
java
public static void main(String[] args) {
// 注册所有的驱动
ogr.RegisterAll();
// 为了支持中文路径,请添加下面这句代码
gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8","YES");
// 为了使属性表字段支持中文,请添加下面这句
gdal.SetConfigOption("SHAPE_ENCODING", "CP936");
String strVectorFile = "D:\\gdb\\test.gdb";
//打开数据
DataSource gdbDataSource = ogr.Open(strVectorFile,0);
Layer gdbLayer = gdbDataSource.GetLayerByName("图层名称");
if (gdbLayer == null)
{
System.out.println("获取gdb图层失败!");
return;
}
Driver postgreSQLDriver = ogr.GetDriverByName("PostgreSQL");
if(postgreSQLDriver == null){
System.out.println("不支持 PostgreSQL 驱动");
return;
}
//GDAL连接PostGIS
String path = "PG:dbname=数据库名称 host=主机地址 port=端口 user=用户名称 password=密码";
DataSource pgDataSource = postgreSQLDriver.Open(path, 1);
if(pgDataSource == null){
System.out.println("GDAL连接PostGIS数据库失败!");
return;
}
//直接复制模式,这样以后做追加有问题
pgDataSource.CopyLayer(gdbLayer, "表名", null);
pgDataSource.delete();
gdbDataSource.delete();
gdal.GDALDestroyDriverManager();
System.out.println("gd图层导入成功!");
}