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