利用java读取shp以及相关的文件
对应geotools版本:2.7.2
读shape文件。
shape格式文件最少包含3个文件,他们的后缀是:.shp, .dbf, .shx。
.shp存储地理形状和位置信息,.dbf存储属性信息,.shx是索引文件。
单独读取DBF文件
public void readDBF(String path) {
Java代码DbaseFileReader reader = null;
try {
reader = new DbaseFileReader(new ShpFiles(path), false, Charset.forName("GBK"));
DbaseFileHeader header = reader.getHeader();
int numFields = header.getNumFields();
//迭代读取记录
while (reader.hasNext()) {
try {
Object[] entry = reader.readEntry();
for (int i=0; i
String title = header.getFieldName(i);
Object value = entry[i];
System.out.println(title+"="+value);
}
} catch (Exception e) {
e.printStackTrace();
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (reader != null) {
//关闭
try {reader.close();} catch (Exception e) {}
}
}
}
读取3个文件,以point为例:
public void readSHP(String path) {
Java代码ShapefileDataStore shpDataStore = null;
try{
shpDataStore = new ShapefileDataStore(new File(path).toURI().toURL());
shpDataStore.setStringCharset(Charset.forName("GBK"));
String typeName = shpDataStore.getTypeNames()[0];
FeatureSource featureSource = null;
featureSource = (FeatureSource)shpDataStore.getFeatureSource(typeName);
FeatureCollection result = featureSource.getFeatures();
System.out.println(result.size());
FeatureIterator itertor = result.features();
while(itertor.hasNext()){
SimpleFeature feature = itertor.next();
Collection p = feature.getProperties();
Iterator it = p.iterator();
while(it.hasNext()) {
Property pro = it.next();
if (pro.getValue() instanceof Point) {
System.out.println("PointX = " + ((Point)(pro.getValue())).getX());
System.out.println("PointY = " + ((Point)(pro.getValue())).getY());
} else { <