package org.sxkj.common.utils; import org.apache.commons.lang3.StringUtils; import org.geotools.geometry.jts.JTSFactoryFinder; import org.locationtech.jts.geom.Geometry; import org.locationtech.jts.geom.GeometryFactory; import org.locationtech.jts.io.ParseException; import org.locationtech.jts.io.WKTReader; public class GeomUtils { private static final GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory(); private static final WKTReader wktReader = new WKTReader(geometryFactory); public static boolean isGeomInvalid(String geom) { if (StringUtils.isBlank(geom)) { return false; } String upper = geom.trim().toUpperCase(); return !upper.contains("POLYGON"); } /** * 验证并转换几何数据,确保其有效 * @param geom WKT格式的几何数据 * @return 有效的几何数据,或null如果转换失败 */ public static String validateAndFormatGeom(String geom) { if (StringUtils.isBlank(geom)) { return null; } try { // 解析WKT字符串 Geometry geometry = wktReader.read(geom); // 如果几何数据无效,尝试修复 if (!geometry.isValid()) { geometry = geometry.buffer(0); } // 确保几何数据有效 if (geometry.isValid()) { return geometry.toText(); } else { return null; } } catch (ParseException e) { // 解析失败 return null; } } }