GeoTools使用--jts处理线的自相交问题

时间:2025-02-14 18:12:45
public static void main(String[] args) { String geometryStr="POLYGON ((13798650 4826450, 13812600 4827600, 13798100 4813550, 13802450 4813800, 13807600 4814350, 13804700 4813000, 13811400 4812900, 13813400 4817500, 13810000 4818350, 13813400 4813900, 13811750 4820300, 13807500 4828350, 13805000 4828000, 13802750 4827650, 13798650 4826450))"; Geometry geometry1 = JTSNewUtil.geometry(geometryStr); if(geometry1 instanceof MultiPolygon){ int numGeometries = geometry1.getNumGeometries(); List<Polygon> polygons=new ArrayList<>(); for(int i=0;i<numGeometries;i++){ Geometry geometryN = geometry1.getGeometryN(i); Polygon polygon = getPolygonByInteriorPoint((Polygon) geometryN); polygons.add(polygon); } geometry1=geometry1.getFactory().createMultiPolygon(polygons.toArray(new Polygon[]{})); }else if(geometry1 instanceof Polygon){ geometry1 = getPolygonByInteriorPoint((Polygon) geometry1); } System.out.println(geometry1.toText()); } /** * 使用jts的两线相交方法解决线的自相交问题 * @param geometry1 * @return */ private static Polygon getPolygonByInteriorPoint(Polygon geometry1) { LineString exteriorRing = geometry1.getExteriorRing(); Coordinate[] coordinates = exteriorRing.union(exteriorRing).getCoordinates(); return geometry1.getFactory().createPolygon(coordinates); }