geotools读取shp文件及shp文件操作工具类代码
生活随笔
收集整理的這篇文章主要介紹了
geotools读取shp文件及shp文件操作工具类代码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
geotools讀取shp文件及shp文件操作工具類代碼.pdf
完整文檔下載地址
https://download.csdn.net/download/a772304419/17468931
import com.lzugis.helper.CommonConfig; import com.vividsolutions.jts.geom.*; import com.vividsolutions.jts.io.WKTReader; import com.vividsolutions.jts.io.WKTWriter; import org.geotools.data.shapefile.ShapefileDataStore; import org.geotools.data.simple.SimpleFeatureCollection; import org.geotools.data.simple.SimpleFeatureIterator; import org.geotools.data.simple.SimpleFeatureSource; import org.geotools.geometry.jts.JTSFactoryFinder; import org.opengis.feature.simple.SimpleFeature;import java.util.*;import java.nio.charset.*; import java.io.*;/*** Created by admin on 2017/11/20.*/ public class ShpUtil {private String shpRoot;private GeometryFactory geometryFactory;private WKTReader wktReader;private WKTWriter wktWriter;public ShpUtil(){super();shpRoot = CommonConfig.getVal("geocode.shproot");geometryFactory = JTSFactoryFinder.getGeometryFactory( null );wktReader = new WKTReader( geometryFactory );wktWriter = new WKTWriter();}/*** 獲取所有的shp文件* @return*/public List listShapeFiles(){List<String> result = new ArrayList<String>();File file = new File(shpRoot);if (!file.isDirectory()) {System.out.println(file.getAbsolutePath());result.add(file.getAbsolutePath());} else {File[] directoryList = file.listFiles(new FileFilter() {public boolean accept(File file) {if (file.isFile() && file.getName().endsWith(".shp")) {return true;} else {return false;}}});for (int i = 0; i < directoryList.length; i++) {result.add(directoryList[i].getPath());}}return result;}/*** 獲取shp的features* @param shpPath* @return*/public List<SimpleFeature> getShapeFeatures(String shpPath){List<SimpleFeature> features = new ArrayList<SimpleFeature>();try {//初始化shapeFile file = new File(shpPath);ShapefileDataStore shpDataStore = null;shpDataStore = new ShapefileDataStore(file.toURL());//設置編碼Charset charset = Charset.forName("GBK");shpDataStore.setCharset(charset);String typeName = shpDataStore.getTypeNames()[0];SimpleFeatureSource featureSource = null;featureSource = shpDataStore.getFeatureSource(typeName);SimpleFeatureCollection result = featureSource.getFeatures();SimpleFeatureIterator itertor = result.features();while (itertor.hasNext()) {SimpleFeature feature = itertor.next();features.add(feature);}itertor.close();}catch (Exception e){e.printStackTrace();}return features;}/*** 獲取feature信息* @param feature* @return*/public Object[] getFeatureInfo(SimpleFeature feature){String geomType = getGeomtype(feature);if(geomType.indexOf("polygon")!=-1){return getPolygonInfo(feature);}else if(geomType.indexOf("polyline")!=-1){return getPolylineInfo(feature);}else{return getPointInfo(feature);}}/*** 獲取geometry類型* @param feature* @return*/public String getGeomtype(SimpleFeature feature){Geometry geom = (Geometry)feature.getAttribute("the_geom");return geom.getGeometryType().toLowerCase();}/*** 獲取多邊形的信息* 順序為:id, pointsnum, areaname, minx, miny, maxx, maxy,* minzoom, maxzoom, pointsdata* @param feature* @return*/private Object[] getPolygonInfo(SimpleFeature feature){Geometry geom = (Geometry)feature.getAttribute("the_geom");String id = UUID.randomUUID().toString();int pointsnum = geom.getNumPoints();String areaname = feature.getAttribute("areaname").toString();int minzoom = null==feature.getAttribute("minzoom")?0:(Integer) feature.getAttribute("minzoom"),maxzoom = null==feature.getAttribute("maxzoom")?21:(Integer) feature.getAttribute("maxzoom");Envelope envelope = geom.getEnvelopeInternal();String pointsdata = wktWriter.write(geom);return new Object[]{id,pointsnum,areaname,envelope.getMinX(),envelope.getMinY(),envelope.getMaxX(),envelope.getMaxY(),minzoom, maxzoom,pointsdata};}/*** 獲取線的信息* 順序為:"id", "pointsnum", "linetype", "linename","minx", "miny", "maxx", "maxy", "minzoom", "maxzoom", "pointsdata"* @param feature* @return*/private Object[] getPolylineInfo(SimpleFeature feature){Geometry geom = (Geometry)feature.getAttribute("the_geom");String id = UUID.randomUUID().toString();int pointsnum = geom.getNumPoints();String linename = feature.getAttribute("linename").toString();int minzoom = null==feature.getAttribute("minzoom")?0:(Integer) feature.getAttribute("minzoom"),maxzoom = null==feature.getAttribute("maxzoom")?21:(Integer) feature.getAttribute("maxzoom"),linetype = null==feature.getAttribute("linetype")?0:(Integer) feature.getAttribute("linetype");Geometry envelope = geom.getEnvelope();Coordinate[] coordinates = envelope.getCoordinates();Coordinate min = coordinates[0],max = coordinates[1];String pointsdata = wktWriter.write(geom);return new Object[]{id,pointsnum,linetype,linename,min.x, min.y, max.x, max.y,minzoom, maxzoom,pointsdata};}/*** 獲取點的信息* 順序為:"id", "poiname","x", "y", "minzoom", "maxzoom"* @param feature* @return*/private Object[] getPointInfo(SimpleFeature feature){GeoHash geohash = new GeoHash();Point geom = (Point)feature.getAttribute("the_geom");String id = UUID.randomUUID().toString();String poiname = feature.getAttribute("poiname").toString();int minzoom = null==feature.getAttribute("minzoom")?0:(Integer) feature.getAttribute("minzoom"),maxzoom = null==feature.getAttribute("maxzoom")?21:(Integer) feature.getAttribute("maxzoom");String strGeohash = geohash.encode(geom.getY(), geom.getX(), 0);return new Object[]{id,poiname,geom.getX(),geom.getY(),minzoom,maxzoom,strGeohash};} }?
總結
以上是生活随笔為你收集整理的geotools读取shp文件及shp文件操作工具类代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: geotools学习(一)Intelli
- 下一篇: spark rdd reduceByKe