package com.onemap.file.utils; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.io.WKTWriter; import org.geotools.data.FileDataStore; import org.geotools.data.FileDataStoreFinder; import org.geotools.data.simple.SimpleFeatureCollection; import org.geotools.data.simple.SimpleFeatureSource; import org.geotools.feature.FeatureIterator; import org.geotools.referencing.CRS; import org.opengis.feature.simple.SimpleFeature; import org.opengis.referencing.crs.CoordinateReferenceSystem; import java.io.File; public class WktUtils { public static String getShpWkt(String shpPath) throws Exception { // 读取shp文件 FileDataStore store = FileDataStoreFinder.getDataStore(new File(shpPath)); SimpleFeatureSource featureSource = store.getFeatureSource(); SimpleFeatureCollection featureCollection = featureSource.getFeatures(); CoordinateReferenceSystem crs = featureSource.getSchema().getCoordinateReferenceSystem(); // 合并几何图形 Geometry combinedGeometry = null; try (FeatureIterator features = featureCollection.features()) { while (features.hasNext()) { SimpleFeature feature = features.next(); Geometry geometry = (Geometry) feature.getDefaultGeometry(); if (combinedGeometry == null) { combinedGeometry = geometry; } else { combinedGeometry = combinedGeometry.union(geometry); } } } String ewkt = geometryToEWKT(combinedGeometry, crs); return ewkt; } public static String geometryToEWKT(Geometry geometry, CoordinateReferenceSystem crs) throws Exception { WKTWriter writer = new WKTWriter(); String wkt = writer.write(geometry); Integer srid = CRS.lookupEpsgCode(crs, true); if (srid == null) { srid=4326; } else if (srid == -1) { srid=4326; } return "SRID=" + srid + ";" + wkt; } }