有一个需求,是需要使用java程序批量处理shp文件,然后按照指定字段类型的长度和精度重新输出成shp文件。
shp文件读取后,可以读取到原字段的字段名和内容,但是长度和精度字段设置,都是在dbf文件中的,shp生成和读取,都是获取不到的,因此,直接输出shp是无法直接设置精度字段的,还需要重新生成一次dbf文件
java输出shp网上有很多,此处不再粘贴复制了,主要是对dbf输出做记录
网上基本找到的都是javadbf去管理dbf字段的设置,不过都是版本比较老的内容了,这边推荐2个很好用的pom下载地址:
这里直接下载最新的1.14.0
添加链接描述
这个就只有老版的0.4.0
添加链接描述
0.4.0版本的这个包,主要问题是在生成dbf文件时,对存入字符串只会存入一小半,尤其是中文字符,网上原因详细,此处不再复制
新版1.14.0的包,对dbf字段管理的方法和老版略有不同
分别设置为数值格式和字符串格式
fields[a].setType(DBFDataType.NUMERIC);
fields[a].setType(DBFDataType.CHARACTER);
设置字段长度和精度
fields[a].setLength(254);
fields[a].setDecimalCount(3)
并且最新版本的com.linuxense.javadbf.DBFWriter这个生成dbf方法,没有找到设置输出文件格式的方法,默认输出的为GBK格式,这样重新输出dbf文件后,无论原来输出shp时设置的是什么格式,后面都会使用GBK格式打开才不乱码
网上找到的输出shp方法,都不生成cpg文件,这边简单记录个输出小方法
//输出cpg,默认GBK格式
public void outCpg(String encode) throws Exception{
if(encode==null){
encode="GBK";
}
//创建shape文件对象
OutputStream out = new FileOutputStream("D:\\test.cpg");
out.write(encode.getBytes(encode));
}