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); // } }