吉安感知网项目-后端
xiebin
2026-01-19 4e48664942bbefe70699ca43d25cbbd56ecc8daa
drone-common/src/main/java/org/sxkj/common/utils/GeomUtils.java
@@ -1,9 +1,16 @@
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)) {
@@ -12,4 +19,35 @@
      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;
      }
   }
}