吉安感知网项目-后端
linwei
2026-02-09 4c4a505ba4c0f10cededf701fc170c0c7b76fc5e
drone-service/drone-gd/src/main/java/org/sxkj/gd/config/GeometryTypeHandler.java
@@ -24,21 +24,27 @@
   @Override
   public void setNonNullParameter(PreparedStatement preparedStatement, int i, String s, JdbcType jdbcType) throws SQLException {
      if (s == null || s.isEmpty()) {
         preparedStatement.setNull(i, jdbcType.TYPE_CODE);
         return;
      }
      Geometry geo = null;
      try {
         // String转Geometry
         geo = new WKTReader(new GeometryFactory(new PrecisionModel())).read(s);
         // Geometry转WKB
         byte[] geometryBytes = new WKBWriter(2, ByteOrderValues.LITTLE_ENDIAN, false).write(geo);
         // 设置SRID为mysql默认的 0
         byte[] wkb = new byte[geometryBytes.length + 4];
         wkb[0] = wkb[1] = wkb[2] = wkb[3] = 0;
         System.arraycopy(geometryBytes, 0, wkb, 4, geometryBytes.length);
         if (geo == null) {
            preparedStatement.setNull(i, jdbcType.TYPE_CODE);
            return;
         }
         // 设置SRID为WGS84 (4326)
         geo.setSRID(4326);
         // Geometry转WKB,使用大端序(PostgreSQL 期望的格式),并包含SRID信息(EWKB格式)
         byte[] wkb = new WKBWriter(2, ByteOrderValues.BIG_ENDIAN, true).write(geo);
         preparedStatement.setBytes(i, wkb);
      } catch (ParseException e) {
         // 解析失败时设置为null
         preparedStatement.setNull(i, jdbcType.TYPE_CODE);
      }
   }
@@ -71,7 +77,21 @@
   @Override
   public String getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
      return "";
      try {
         // 使用 getBlob 方法获取 Blob 对象
         java.sql.Blob blob = callableStatement.getBlob(i);
         if (blob != null) {
            try (InputStream inputStream = blob.getBinaryStream()) {
               Geometry geo = getGeometryFromInputStream(inputStream);
               if (geo != null) {
                  return geo.toString();
               }
            }
         }
      } catch (Exception e) {
         // 处理异常
      }
      return null;
   }
   /**