张洋洋
2025-02-12 75a3851294865b31d228872ea677f80cd0cda028
src/main/java/com/se/simu/controller/SimuController.java
@@ -7,6 +7,7 @@
import com.se.simu.config.PropertiesConfig;
import com.se.simu.domain.dto.GeDb;
import com.se.simu.domain.dto.GeLayer;
import com.se.simu.domain.dto.GridDto;
import com.se.simu.domain.po.DataPo;
import com.se.simu.domain.po.SimuPo;
import com.se.simu.domain.vo.*;
@@ -14,14 +15,17 @@
import com.se.simu.utils.*;
import io.swagger.annotations.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.ClassPathResource;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.util.UriUtils;
import javax.annotation.Resource;
import java.io.*;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.stream.Collectors;
@@ -52,6 +56,9 @@
    @Value("${config.outPath}")
    private String outPath;
    @Value("${config.inPath}")
    private String inPath;
    @Resource
@@ -387,7 +394,7 @@
            metry.put("type", "MultiPoint");
            metry.put("lod", 0);
            JSONArray boundarie = new JSONArray();
            boundarie.add(jsonObject.getJSONArray("vertices").size()-1);
            boundarie.add(jsonObject.getJSONArray("vertices").size() - 1);
            metry.put("boundaries", boundarie);
            geometry.add(metry);
            cityObject.put("geometry", geometry);
@@ -400,10 +407,91 @@
        FileWriter fileWriter = new FileWriter(path + tableName + "\\降雨量.json");
        fileWriter.write(jsonObject.toJSONString());
        fileWriter.close();
        SemUtils.cityJsonToSem(path + tableName + "\\降雨量.json",path + tableName + "\\降雨量.sem");
        return success(path + tableName + "\\降雨量.sem");
        String filePatn = inPath + "\\tongzhou\\";
        File file = new File(filePatn);
        if (!file.exists()) {
            file.mkdirs();
        }
        SemUtils.cityJsonToSem(path + tableName + "\\降雨量.json", filePatn + "raingage.sem");
        return success(filePatn + "raingage.sem");
    }
    @ApiOperation(value = "管点转sem")
    @PostMapping(value = "/pointTosem", produces = "application/json; charset=UTF-8")
    public R<String> pointTosem(@RequestBody List<GridDto> dtos) throws Exception {
        String path = outPath + "\\point\\";
        String publicKey = EntityLibraryUtils.getPublicKey();
        String token = EntityLibraryUtils.login();
        JSONArray jsonArrayList = EntityLibraryUtils.getPointInfo(dtos, token);
        JSONObject jsonObject = getModule("pointmodule.json");
        for (int s = 0; s < jsonArrayList.size(); s++) {
            JSONObject pointObject = jsonArrayList.getJSONObject(s);
            //拼装坐标
            JSONArray vertice = new JSONArray();
            vertice.add(Double.valueOf(pointObject.getString("lon")));
            vertice.add(Double.valueOf(pointObject.getString("lat")));
            vertice.add(0.0);
            jsonObject.getJSONArray("vertices").add(vertice);
            //拼装基础信息
            JSONObject cityObject = new JSONObject();
            cityObject.put("type", "+PipePoint");
            JSONObject attribute = new JSONObject();
            attribute.put("维护时间", pointObject.get("operatetime"));
            attribute.put("维护人", pointObject.get("operator"));
            attribute.put("唯一编码", pointObject.get("seid"));
            attribute.put("ID", pointObject.get("id"));
            attribute.put("enti_uuid", pointObject.get("enti_uuid"));
            attribute.put("标识码", pointObject.get("bsm"));
            attribute.put("管线种类", pointObject.get("gxzl"));
            attribute.put("地面高程", pointObject.get("dmgc"));
            attribute.put("特征", pointObject.get("tz"));
            attribute.put("附属物", pointObject.get("fsw"));
            attribute.put("建筑物", pointObject.get("jzw"));
            attribute.put("井底高程", pointObject.get("jdgc"));
            attribute.put("井底埋深", pointObject.get("jdms"));
            attribute.put("井脖埋深", pointObject.get("jbms"));
            attribute.put("井盖形状", pointObject.get("jgxz"));
            attribute.put("井盖尺寸", pointObject.get("jgcc"));
            attribute.put("井盖材质", pointObject.get("jgcz"));
            attribute.put("井盖状态", pointObject.get("jgzt"));
            attribute.put("井脖材质", pointObject.get("jbcz"));
            attribute.put("井脖尺寸", pointObject.get("jbcc"));
            attribute.put("井材质", pointObject.get("jcz"));
            attribute.put("井尺寸", pointObject.get("jcc"));
            attribute.put("使用状况", pointObject.get("syzk"));
            attribute.put("lon", Double.valueOf(pointObject.getString("lon")));
            attribute.put("lat", Double.valueOf(pointObject.getString("lat")));
            attribute.put("atti", pointObject.get("atti"));
            attribute.put("雨水集结点", pointObject.get("ysjjd"));
            cityObject.put("attributes", attribute);
            JSONArray geometry = new JSONArray();
            JSONObject metry = new JSONObject();
            metry.put("type", "MultiPoint");
            metry.put("lod", 0);
            JSONArray boundarie = new JSONArray();
            boundarie.add(jsonObject.getJSONArray("vertices").size() - 1);
            metry.put("boundaries", boundarie);
            geometry.add(metry);
            cityObject.put("geometry", geometry);
            jsonObject.getJSONObject("CityObjects").put("UUID_" + UUID.randomUUID().toString(), cityObject);
        }
        long times = System.currentTimeMillis();
        String pointPath = path + times + "\\管点.json";
        File dirFile = new File(path + times);
        if (!dirFile.exists()) {
            dirFile.mkdirs();
        }
        FileWriter fileWriter = new FileWriter(pointPath);
        fileWriter.write(jsonObject.toJSONString());
        fileWriter.close();
        String filePatn = inPath + "\\tongzhou\\";
        File file = new File(filePatn);
        if (!file.exists()) {
            file.mkdirs();
        }
        SemUtils.cityJsonToSem(pointPath, filePatn + "node.sem");
        return success(filePatn + "node.sem");
    }
    @ApiOperation(value = "管点转cityjson")
    @GetMapping(value = "/pointToCityJson", produces = "application/json; charset=UTF-8")
    public R<String> pointToCityJson(@RequestParam("shpPath") String shpPath) throws Exception {
@@ -429,7 +517,7 @@
            metry.put("type", "MultiPoint");
            metry.put("lod", 0);
            JSONArray boundarie = new JSONArray();
            boundarie.add(jsonObject.getJSONArray("vertices").size()-1);
            boundarie.add(jsonObject.getJSONArray("vertices").size() - 1);
            metry.put("boundaries", boundarie);
            geometry.add(metry);
            cityObject.put("geometry", geometry);
@@ -444,8 +532,116 @@
        FileWriter fileWriter = new FileWriter(pointPath);
        fileWriter.write(jsonObject.toJSONString());
        fileWriter.close();
        SemUtils.cityJsonToSem(pointPath,path + times + "\\管点.sem");
        return success(path + times + "\\管点.sem");
        String filePatn = inPath + "\\tongzhou\\";
        File file = new File(filePatn);
        if (!file.exists()) {
            file.mkdirs();
        }
        SemUtils.cityJsonToSem(pointPath, filePatn + "node.sem");
        return success(filePatn + "node.sem");
    }
    @ApiOperation(value = "管线sem生成")
    @PostMapping(value = "/lineToSem", produces = "application/json; charset=UTF-8")
    public R<String> lineToSem(@RequestBody List<GridDto> dtos) throws Exception {
        String path = outPath + "\\line\\";
        String publicKey = EntityLibraryUtils.getPublicKey();
        String token = EntityLibraryUtils.login();
        JSONArray jsonArrayList = EntityLibraryUtils.getLineInfo(dtos, token);
        if (jsonArrayList.size() == 0) {
            return fail("该区域不存在管线!");
        }
        StringBuffer stringBuffer = new StringBuffer("id in (");
        for (int i = 0; i < jsonArrayList.size(); i++) {
            jsonArrayList.getJSONObject(i).getInteger("id");
            stringBuffer.append("'" + jsonArrayList.getJSONObject(i).getInteger("id") + "',");
        }
        String sql = stringBuffer.toString();
        sql = sql.substring(0, sql.length() - 1) + ")";
        StringBuffer paramBuffer = new StringBuffer("");
        while (!"".equals(sql)) {
            if (sql.length() > 110) {
                String item = sql.substring(0, 110);
                paramBuffer.append(EntityLibraryUtils.encrypt(item, publicKey) + ",");
                sql = sql.replace(item, "");
            } else {
                paramBuffer.append(EntityLibraryUtils.encrypt(sql, publicKey) + ",");
                sql = "";
            }
        }
        String src = paramBuffer.toString().substring(0, paramBuffer.length() - 1);
        JSONArray arrayDetail = EntityLibraryUtils.getLineDetail(src, token);
        JSONObject jsonObject = getModule("linemodule.json");
        for (int i = 0; i < arrayDetail.size(); i++) {
            JSONObject detailJSONObject = arrayDetail.getJSONObject(i);
            //拼装基础信息
            JSONObject cityObject = new JSONObject();
            cityObject.put("type", "+PipeLine");
            JSONObject attribute = new JSONObject();
            attribute.put("维护时间", detailJSONObject.getJSONObject("properties").getLong("operatetime"));
            attribute.put("维护人", detailJSONObject.getJSONObject("properties").getString("operator"));
            attribute.put("唯一编码", detailJSONObject.getJSONObject("properties").get("seid"));
            attribute.put("ENTI_UUID", detailJSONObject.getJSONObject("properties").get("enti_uuid"));
            attribute.put("ID", detailJSONObject.getJSONObject("properties").get("id"));
            attribute.put("lon", detailJSONObject.getJSONObject("properties").get("lon"));
            attribute.put("lat", detailJSONObject.getJSONObject("properties").get("lat"));
            attribute.put("atti", detailJSONObject.getJSONObject("properties").get("atti"));
            attribute.put("管线种类", detailJSONObject.getJSONObject("properties").get("gxzl"));
            attribute.put("起点标识码", detailJSONObject.getJSONObject("properties").get("qdbsm"));
            attribute.put("止点标识码", detailJSONObject.getJSONObject("properties").get("zdbsm"));
            attribute.put("起点高程", detailJSONObject.getJSONObject("properties").get("qdgc"));
            attribute.put("起高程类型", detailJSONObject.getJSONObject("properties").get("qgclx"));
            attribute.put("起点埋深", detailJSONObject.getJSONObject("properties").get("qdms"));
            attribute.put("止点高程", detailJSONObject.getJSONObject("properties").get("zdgc"));
            attribute.put("止高程类型", detailJSONObject.getJSONObject("properties").get("zgclx"));
            attribute.put("止点埋深", detailJSONObject.getJSONObject("properties").get("zdms"));
            attribute.put("材质", detailJSONObject.getJSONObject("properties").get("cz"));
            attribute.put("埋设方式", detailJSONObject.getJSONObject("properties").get("msfs"));
            attribute.put("管径1", detailJSONObject.getJSONObject("properties").get("gja"));
            attribute.put("管径2", detailJSONObject.getJSONObject("properties").get("gjb"));
            attribute.put("使用状况", detailJSONObject.getJSONObject("properties").get("syzk"));
            attribute.put("管线段长度", detailJSONObject.getJSONObject("properties").get("gxdcd"));
            attribute.put("groupID", detailJSONObject.getJSONObject("properties").get("groupid"));
            attribute.put("Shape_Length", detailJSONObject.getJSONObject("properties").get("shape_length"));
            attribute.put("标识码", detailJSONObject.getJSONObject("properties").get("bsm"));
            JSONArray geometry = new JSONArray();
            JSONObject metry = new JSONObject();
            metry.put("type", "MultiLineString");
            metry.put("lod", 0);
            JSONArray boundarie = new JSONArray();
            JSONArray array = detailJSONObject.getJSONObject("geometry").getJSONArray("coordinates").getJSONArray(0);
            for (int m = 0; m < array.size(); m++) {
                JSONArray object = array.getJSONArray(m);
                jsonObject.getJSONArray("vertices").add(ProjectionToGeographicUtil.getPoint(object.getDouble(0), object.getDouble(1)));
                boundarie.add(jsonObject.getJSONArray("vertices").size() - 1);
            }
            JSONArray jsonArray = new JSONArray();
            jsonArray.add(boundarie);
            metry.put("boundaries", jsonArray);
            JSONArray metryArray = new JSONArray();
            metryArray.add(metry);
            cityObject.put("geometry", metryArray);
            cityObject.put("attributes", attribute);
            cityObject.put("attributes", attribute);
            geometry.add(metry);
            jsonObject.getJSONObject("CityObjects").put("UUID_" + UUID.randomUUID().toString(), cityObject);
        }
        long times = System.currentTimeMillis();
        String pointPath = path + times + "\\管线.json";
        File dirFile = new File(path + times);
        if (!dirFile.exists()) {
            dirFile.mkdirs();
        }
        FileWriter fileWriter = new FileWriter(pointPath);
        fileWriter.write(jsonObject.toJSONString());
        fileWriter.close();
        String filePatn = inPath + "\\tongzhou\\";
        File file = new File(filePatn);
        if (!file.exists()) {
            file.mkdirs();
        }
        SemUtils.cityJsonToSem(pointPath, filePatn + "link.sem");
        return success(filePatn + "link.sem");
    }
    @ApiOperation(value = "管线转cityjson")
@@ -469,16 +665,16 @@
            JSONArray array = JSONObject.parseObject(map.get("the_geom").toString()).getJSONArray("coordinates");
            for (int i = 0; i < array.size(); i++) {
                JSONObject object = JSONObject.parseObject(array.get(i).toString());
                jsonObject.getJSONArray("vertices").add(ProjectionToGeographicUtil.getPoint(Double.valueOf(object.get("x").toString()),Double.valueOf(object.get("y").toString())));
                boundarie.add(jsonObject.getJSONArray("vertices").size()-1);
                jsonObject.getJSONArray("vertices").add(ProjectionToGeographicUtil.getPoint(Double.valueOf(object.get("x").toString()), Double.valueOf(object.get("y").toString())));
                boundarie.add(jsonObject.getJSONArray("vertices").size() - 1);
            }
            JSONArray jsonArray=new JSONArray();
            JSONArray jsonArray = new JSONArray();
            jsonArray.add(boundarie);
            metry.put("boundaries", jsonArray);
            JSONArray metryArray=new JSONArray();
            JSONArray metryArray = new JSONArray();
            metryArray.add(metry);
            cityObject.put("geometry",metryArray);
            cityObject.put("attributes",attribute);
            cityObject.put("geometry", metryArray);
            cityObject.put("attributes", attribute);
            cityObject.put("attributes", attribute);
            geometry.add(metry);
            jsonObject.getJSONObject("CityObjects").put("UUID_" + UUID.randomUUID().toString(), cityObject);
@@ -492,28 +688,116 @@
        FileWriter fileWriter = new FileWriter(pointPath);
        fileWriter.write(jsonObject.toJSONString());
        fileWriter.close();
        SemUtils.cityJsonToSem(pointPath, path + times + "\\管线.sem");
        return success(path + times + "\\管线.sem");
        String filePatn = inPath + "\\tongzhou\\";
        File file = new File(filePatn);
        if (!file.exists()) {
            file.mkdirs();
        }
        SemUtils.cityJsonToSem(pointPath, filePatn + "link.sem");
        return success(filePatn + "link.sem");
    }
    @ApiOperation(value = "地形转cityjson")
    @GetMapping(value = "/terrainToCityJson", produces = "application/json; charset=UTF-8")
    public R<String> terrainToCityJson(@RequestParam("tifPath") String tifPath) throws Exception {
        long times = System.currentTimeMillis();
        String path = outPath + "\\terrain\\"+times+"\\";
        File dirFile = new File(path+"appearance");
        String path = outPath + "\\terrain\\" + times + "\\";
        File dirFile = new File(path + "appearance");
        if (!dirFile.exists()) {
            dirFile.mkdirs();
        }
        String pngPath=path+"appearance\\terrain.png";
        TiffToRGBUtil.tifToPng(tifPath,pngPath);
        String pngPath = path + "appearance\\terrain.png";
        TiffToRGBUtil.tifToPng(tifPath, pngPath);
        JSONObject jsonObject = getModule("terrainmodule.json");
        jsonObject.put("vertices",TiffCoordinateExtractorUtil.getCoordinate(tifPath));
        jsonObject.put("vertices", TiffCoordinateExtractorUtil.getCoordinate(tifPath));
        FileWriter fileWriter = new FileWriter(path + "terrain.json");
        fileWriter.write(jsonObject.toJSONString());
        fileWriter.close();
        SemUtils.cityJsonToSem(path + "terrain.json", path + "terrain.sem");
        return success(path + "terrain.sem");
        String filePatn = inPath + "\\tongzhou\\";
        File file = new File(filePatn);
        if (!file.exists()) {
            file.mkdirs();
        }
        SemUtils.cityJsonToSem(path + "terrain.json", filePatn + "terrain.sem");
        return success(filePatn + "terrain.sem");
    }
    @ApiOperation(value = "grid转cityjson")
    @PostMapping(value = "/gridToCityJson", produces = "application/json; charset=UTF-8")
    public R<String> gridToCityJson(@RequestBody List<GridDto> dtos) throws Exception {
        long times = System.currentTimeMillis();
        String path = outPath + "\\grid\\" + times + "\\";
        File dirFile = new File(path);
        if (!dirFile.exists()) {
            dirFile.mkdirs();
        }
        JSONObject jsonObject = getModule("grid.json");
        JSONArray array = jsonObject.getJSONArray("vertices");
        for (GridDto dto : dtos
        ) {
            JSONArray jsonArray = new JSONArray();
            jsonArray.add(dto.getLon());
            jsonArray.add(dto.getLat());
            jsonArray.add(0);
            array.add(jsonArray);
        }
        jsonObject.put("vertices", array);
        FileWriter fileWriter = new FileWriter(path + "grid.json");
        fileWriter.write(jsonObject.toJSONString());
        fileWriter.close();
        String filePatn = inPath + "\\tongzhou\\";
        File file = new File(filePatn);
        if (!file.exists()) {
            file.mkdirs();
        }
        SemUtils.cityJsonToSem(path + "grid.json", filePatn + "grid.sem");
        return success(filePatn + "grid.sem");
    }
    @ApiOperation(value = "river转sem")
    @GetMapping(value = "/riverToSem", produces = "application/json; charset=UTF-8")
    public R<String> riverToSem() throws Exception {
        long times = System.currentTimeMillis();
        String path = outPath + "\\river\\" + times + "\\";
        File dirFile = new File(path);
        if (!dirFile.exists()) {
            dirFile.mkdirs();
        }
        JSONObject jsonObject = getModule("river.json");
        FileWriter fileWriter = new FileWriter(path + "river.json");
        fileWriter.write(jsonObject.toJSONString());
        fileWriter.close();
        String filePatn = inPath + "\\tongzhou\\";
        File file = new File(filePatn);
        if (!file.exists()) {
            file.mkdirs();
        }
        SemUtils.cityJsonToSem(path + "river.json", filePatn + "river.sem");
        return success(filePatn + "river.sem");
    }
    @ApiOperation(value = "landuse转sem")
    @GetMapping(value = "/landuseToSem", produces = "application/json; charset=UTF-8")
    public R<String> landuseToSem() throws Exception {
        long times = System.currentTimeMillis();
        String path = outPath + "\\landuse\\" + times + "\\";
        File dirFile = new File(path);
        if (!dirFile.exists()) {
            dirFile.mkdirs();
        }
        JSONObject jsonObject = getModule("landuse.json");
        FileWriter fileWriter = new FileWriter(path + "landuse.json");
        fileWriter.write(jsonObject.toJSONString());
        fileWriter.close();
        String filePatn = inPath + "\\tongzhou\\";
        File file = new File(filePatn);
        if (!file.exists()) {
            file.mkdirs();
        }
        SemUtils.cityJsonToSem(path + "landuse.json", filePatn + "landuse.sem");
        return success(filePatn + "landuse.sem");
    }
    public JSONObject getModule(String moduleName) {
        JSONObject jsonObject = new JSONObject();
        try {