您的位置:首页 > 其它

geotools处理shapefiles

2014-01-20 20:14 148 查看
package org.geotools;

import java.io.File;

import org.geotools.data.FileDataStore;
import org.geotools.data.FileDataStoreFinder;
import org.geotools.data.simple.SimpleFeatureIterator;
import org.geotools.data.simple.SimpleFeatureSource;
import org.geotools.map.FeatureLayer;
import org.geotools.map.Layer;
import org.geotools.map.MapContent;
import org.geotools.styling.SLD;
import org.geotools.styling.Style;
import org.geotools.swing.JMapFrame;
import org.geotools.swing.data.JFileDataStoreChooser;

import java.io.IOException;
import java.io.FileInputStream;
import java.nio.channels.FileChannel;
import java.nio.charset.Charset;
import java.util.Iterator;
import java.util.Vector;

import org.geotools.data.shapefile.ShapefileDataStore;
import org.geotools.data.shapefile.ShapefileDataStoreFactory;
import org.geotools.data.shapefile.dbf.DbaseFileReader;
import org.geotools.data.shapefile.dbf.DbaseFileHeader;
import org.geotools.data.shapefile.files.ShpFiles;
import org.geotools.data.shapefile.shp.ShapefileReader;
import org.opengis.feature.Property;
import org.opengis.feature.simple.SimpleFeature;

import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.GeometryFactory;

public static void main(String[] args) throws Exception {

FileChannel in = new FileInputStream("data/test.dbf").getChannel();
DbaseFileReader dr = new DbaseFileReader(in, true, Charset.forName("GBK"));
DbaseFileHeader dh = dr.getHeader();
int fields = dh.getNumFields();

ShpFiles sf = new ShpFiles("data/test.shp");
ShapefileReader r = new ShapefileReader( sf, false, false, new GeometryFactory() );

Vector v1=new Vector();
while(dr.hasNext()&&r.hasNext()){

Geometry shape = (Geometry) r.nextRecord().shape();  //com.vividsolutions.jts.geom.Geometry;
/*System.out.println(shape.toString());*/

Vector v=new Vector();
v.addElement(shape);
DbaseFileReader.Row row = dr.readRow();
for (int i=0;i<fields;i++){
Object data = row.read(i);

v.addElement(data);
//处理中文
if(dh.getFieldName(i).equals("NAME")){
// TO-DO:  charset error here.
String name = new String(data.toString().getBytes(),"utf-8");
/* System.out.print(name);*/
}else{
/*System.out.print(data);*/
}
/*  System.out.print("\t");*/
}
v1.addElement(v);
}
System.out.println(v1);
r.close();
dr.close();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: