吉安感知网项目-后端
linwei
2026-02-09 4c4a505ba4c0f10cededf701fc170c0c7b76fc5e
设备同步改造
1 files modified
38 ■■■■ changed files
drone-service/drone-gd/src/main/java/org/sxkj/gd/config/GeometryTypeHandler.java 38 ●●●● patch | view | raw | blame | history
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;
    }
    /**