吉安感知网项目-后端
xiebin
2026-01-06 d207a86cdf1ab52ef8cb7cd83bad8fceab8038cf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package org.sxkj.odm.utils;
 
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.geotools.geojson.geom.GeometryJSON;
import org.locationtech.jts.geom.Geometry;
import org.sxkj.odm.constant.OdmConstant;
import org.sxkj.odm.entity.OdmTaskInfo;
import org.sxkj.odm.entity.json.Boundary;
import org.sxkj.odm.entity.json.JsonData;
import java.io.File;
import java.io.IOException;
import java.io.StringReader;
import java.text.MessageFormat;
 
@Slf4j
public class GeoJsonToWktConverterUtils {
 
    /**
     * geojson 转 wkt
     * @param geoJson
     * @return
     * @throws IOException
     */
    public static String geoJsonToWkt(String geoJson) throws IOException {
        // 使用GeoTools解析GeoJSON
        GeometryJSON geometryJson = new GeometryJSON();
        Geometry geometry = geometryJson.read(new StringReader(geoJson));
        // 转换为WKT格式(包含Z坐标)
        return geometry.toText();
    }
 
    /**
     * 从文件中提取出 wkt 格式的数据
     * @param modelInfoFilePath
     * @return
     * @throws IOException
     */
    public static String jsonFileToWktData(String modelInfoFilePath) throws IOException {
        // 1. 读取JSON文件
        ObjectMapper objectMapper = new ObjectMapper();
        // 配置ObjectMapper忽略未知属性
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        // 读取文件路径
        File jsonFile = new File(modelInfoFilePath);
        if (jsonFile.exists()) {
            JsonData jsonData = objectMapper.readValue(jsonFile, JsonData.class);
            // 2. 提取EPSG:4326的boundary数据
            Boundary boundary = jsonData.getStats().getBbox().getEPSG4326().getBoundary();
            // 3. 转换数据(这里可以根据需要转换格式)
            String boundaryJson = objectMapper.writeValueAsString(boundary);
            // 4. 将 json 数据转换为 wkt 格式并返回
            return geoJsonToWkt(boundaryJson);
        }
        log.info("json 路径:{} 文件不存在", modelInfoFilePath);
        return null;
    }
 
//    public static void main(String[] args) throws IOException {
//        String path = "C:\\Users\\Administrator\\Desktop\\temp\\webodm\\01\\odm_georeferencing\\odm_georeferenced_model.info.json";
//        jsonFileToWktData(path);
//
//        OdmTaskInfo odmTaskInfo = new OdmTaskInfo();
//        odmTaskInfo.setType(1);
//        odmTaskInfo.setProjectId(4);
//        odmTaskInfo.setTaskId("c561552d-4143-489f-a619-7ea36d662f8a");
//        String modelInfoFilePath =  MessageFormat.format(OdmConstant.MODEL_INFO_FILE_PATH, odmTaskInfo.getProjectId(),odmTaskInfo.getTaskId());
//
//        modelInfoFilePath = OdmConstant.WEB_ODM_VOLUMES_BASE_PATH_TEST + modelInfoFilePath;
//
//        System.out.println("modelInfoFilePath = " + modelInfoFilePath);
//    }
}