WktUtils.java 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package com.onemap.file.utils;
  2. import com.vividsolutions.jts.geom.Geometry;
  3. import com.vividsolutions.jts.io.WKTWriter;
  4. import org.geotools.data.FileDataStore;
  5. import org.geotools.data.FileDataStoreFinder;
  6. import org.geotools.data.simple.SimpleFeatureCollection;
  7. import org.geotools.data.simple.SimpleFeatureSource;
  8. import org.geotools.feature.FeatureIterator;
  9. import org.geotools.referencing.CRS;
  10. import org.opengis.feature.simple.SimpleFeature;
  11. import org.opengis.referencing.crs.CoordinateReferenceSystem;
  12. import java.io.File;
  13. public class WktUtils {
  14. public static String getShpWkt(String shpPath) throws Exception {
  15. // 读取shp文件
  16. FileDataStore store = FileDataStoreFinder.getDataStore(new File(shpPath));
  17. SimpleFeatureSource featureSource = store.getFeatureSource();
  18. SimpleFeatureCollection featureCollection = featureSource.getFeatures();
  19. CoordinateReferenceSystem crs = featureSource.getSchema().getCoordinateReferenceSystem();
  20. // 合并几何图形
  21. Geometry combinedGeometry = null;
  22. try (FeatureIterator<SimpleFeature> features = featureCollection.features()) {
  23. while (features.hasNext()) {
  24. SimpleFeature feature = features.next();
  25. Geometry geometry = (Geometry) feature.getDefaultGeometry();
  26. if (combinedGeometry == null) {
  27. combinedGeometry = geometry;
  28. } else {
  29. combinedGeometry = combinedGeometry.union(geometry);
  30. }
  31. }
  32. }
  33. String ewkt = geometryToEWKT(combinedGeometry, crs);
  34. return ewkt;
  35. }
  36. public static String geometryToEWKT(Geometry geometry, CoordinateReferenceSystem crs) throws Exception {
  37. WKTWriter writer = new WKTWriter();
  38. String wkt = writer.write(geometry);
  39. Integer srid = CRS.lookupEpsgCode(crs, true);
  40. if (srid == null) {
  41. srid=4326;
  42. } else if (srid == -1) {
  43. srid=4326;
  44. }
  45. return "SRID=" + srid + ";" + wkt;
  46. }
  47. }