GeoTools应用:提取Shape文件属性列头信息(1)
目录
一、环境准备
装配GeoTools有两种方式,一种是配置maven工程的pom文件(配置方式参考官网),另一种是下载geotools的jar包到本地导入依赖。我采用的是下载jar的方式,下载路径:https://sourceforge.net/projects/geotools/files/
二、实现功能
在实际项目中经常需要提取shape文件的属性列头信息,包含属性的名称和属性类型。下面的Demo代码实现提取列头数据打印到控制台的功能。
补充说明:shape文件的属性数据存储在*.dbf文件中,这个文件可以用excel打开。
这里有shape文件的样例,可下载作为研究测试使用:http://www.naturalearthdata.com/downloads/50m-cultural-vectors/
三、样例代码
1、定义shape文件属性信息模型
package com.elon.model;
import java.io.Serializable;
/**
* Shape文件字段信息模型。
*
* @author elon
* @version 2018年6月24日
*/
public class ShapeFieldInfo implements Serializable {
private static final long serialVersionUID = 6947403344262247581L;
/**
* 字段名称
*/
private String fieldName = "";
/**
* 字段类型
*/
private Class<?> fieldType = null;
@Override
public String toString() {
return "fieldName:" + fieldName + "|fieldType:" + fieldType.getName();
}
public String getFieldName() {
return fieldName;
}
public void setFieldName(String fieldName) {
this.fieldName = fieldName;
}
public Class<?> getFieldType() {
return fieldType;
}
public void setFieldType(Class<?> fieldType) {
this.fieldType = fieldType;
}
}
2、提取属性名称和类型信息
package com.elon.shape;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
import org.geotools.data.shapefile.ShapefileDataStore;
import org.geotools.data.shapefile.ShapefileDataStoreFactory;
import org.opengis.feature.type.AttributeDescriptor;
import com.elon.model.ShapeFieldInfo;
/**
* Shape文件操作公共类。
* @author elon
* @version 2018年6月24日
*/
public class ShapeUtils {
/**
* 提取shape文件包含的属性字段名称和类型信息。
*
* @param shpFilePath shape文件路径
* @return 属性信息
*/
public static List<ShapeFieldInfo> distillShapeFieldInfo(String shpFilePath) {
List<ShapeFieldInfo> fieldList = new ArrayList<>();
ShapefileDataStore dataStroe = buildDataStore(shpFilePath);
try {
List<AttributeDescriptor> attrList = dataStroe.getFeatureSource().getSchema()
.getAttributeDescriptors();
for (AttributeDescriptor attr : attrList) {
ShapeFieldInfo field = new ShapeFieldInfo();
field.setFieldName(attr.getLocalName());
field.setFieldType(attr.getType().getBinding());
fieldList.add(field);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
dataStroe.dispose();
}
System.out.println("fieldList:" + fieldList);
return fieldList;
}
/**
* 构建ShapeDataStore对象。
* @param shpFilePath shape文件路径。
* @return
*/
public static ShapefileDataStore buildDataStore(String shpFilePath) {
ShapefileDataStoreFactory factory = new ShapefileDataStoreFactory();
try {
ShapefileDataStore dataStore = (ShapefileDataStore) factory
.createDataStore(new File(shpFilePath).toURI().toURL());
if (dataStore != null) {
dataStore.setCharset(Charset.forName("UTF-8"));
}
return dataStore;
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
转载自:https://blog.csdn.net/ylforever/article/details/80790181