public static Object handleGeoStructData()

in src/main/java/org/apache/doris/kafka/connector/converter/type/util/GeoUtils.java [39:66]


    public static Object handleGeoStructData(Object sourceValue) {
        // the Geometry datatype in MySQL will be converted to
        // a String with Json format
        Struct geometryStruct = (Struct) sourceValue;

        try {
            byte[] wkb = geometryStruct.getBytes("wkb");
            String geoJson = OGCGeometry.fromBinary(ByteBuffer.wrap(wkb)).asGeoJson();
            JsonNode originGeoNode = objectMapper.readTree(geoJson);

            Optional<Integer> srid = Optional.ofNullable(geometryStruct.getInt32("srid"));
            Map<String, Object> geometryInfo = new HashMap<>();
            String geometryType = originGeoNode.get("type").asText();

            geometryInfo.put("type", geometryType);
            if ("GeometryCollection".equals(geometryType)) {
                geometryInfo.put("geometries", originGeoNode.get("geometries"));
            } else {
                geometryInfo.put("coordinates", originGeoNode.get("coordinates"));
            }

            geometryInfo.put("srid", srid.orElse(0));
            return geometryInfo;
        } catch (Exception e) {
            LOGGER.warn("Failed to parse Geometry datatype, converting the value to null", e);
            return null;
        }
    }