前言
最近使用gdal和java进行gis开发,记录下遇到的开发问题
一、GDAL和Java版本
GDAL版本为3.0.1与3.9.1(两个版本都试验过)
Java为JDK 17.0.11
二、代码
1.引入gdal,设置gdal环境
代码如下:
import org.gdal.gdal.gdal;
import org.gdal.ogr.*;
ogr.RegisterAll();
gdal.AllRegister();
gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8","YES");//支持中文路径
gdal.SetConfigOption("SHAPE_ENCODING","CP936");//属性表字段支持中文
2.打开shp对指定字段进行重命名
代码如下(示例):
/**
* 更改字段名称
* @param oldName,原字段名
* @param newName,新字段名
* @param shpPath,shp文件路径
* @author 415411
* @create 2024/9/4
**/
public static void updateAttributeName(String oldName, String newName, String shpPath) {
// 打开Shp文件,1代表方式为可写,0代表只读
DataSource dataSource = ogr.Open(shpPath, 1);
// 获取图层
Layer layer = dataSource.GetLayer(0);
// 获取要修改字段名的字段索引
FeatureDefn featureDefn = layer.GetLayerDefn();
int index = featureDefn.GetFieldIndex(oldName);
// 使用新字段名创建字段
FieldDefn fieldDefn = new FieldDefn(newName, ogr.OFTString);
fieldDefn.SetWidth(50);
// 更新字段
layer.AlterFieldDefn(index,fieldDefn,1);
}
3.测试使用
public static void main(String[] args) {
// 将name1字段重名成type
updateAttributeName("name1","type",
"D:\\work\\testdata\\mapshp\\mbstyle_cookbook_line.shp");
}
总结
没想到更新字段的方法在layer里,找了比较久。关于读shp字段的方法网上很多,这里就不介绍了,或者也可以用ArcGIS、QGIS等打开shp数据查看属性表,观察下代码执行前后字段是否重命名。