张洋洋
2025-02-12 3f50254c68361dfc54f0f6e07df7a0b44ef203c8
[add]根据坐标提取管线管点
已添加1个文件
已修改3个文件
315 ■■■■ 文件已修改
src/main/java/com/se/simu/controller/SimuController.java 233 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/se/simu/utils/EntityLibraryUtils.java 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/layerQueryDetailParams.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/layerQueryPointParams.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/se/simu/controller/SimuController.java
@@ -416,25 +416,53 @@
        return success(filePatn + "raingage.sem");
    }
    @ApiOperation(value = "管点转cityjson")
    @GetMapping(value = "/pointToCityJson", produces = "application/json; charset=UTF-8")
    public R<String> pointToCityJson(@RequestParam("shpPath") String shpPath) throws Exception {
    @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\\";
        List<Map<String, Object>> list = ShpReadUtils.readPointShp(shpPath);
        String publicKey = EntityLibraryUtils.getPublicKey();
        String token = EntityLibraryUtils.login();
        JSONArray jsonArrayList = EntityLibraryUtils.getPointInfo(dtos, token);
        JSONObject jsonObject = getModule("pointmodule.json");
        for (Map<String, Object> map : list
        ) {
        for (int s = 0; s < jsonArrayList.size(); s++) {
            JSONObject pointObject = jsonArrayList.getJSONObject(s);
            //拼装坐标
            JSONArray vertice = new JSONArray();
            vertice.add(map.get("lon"));
            vertice.add(map.get("lat"));
            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("name", map.get("fsw"));
            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();
@@ -464,12 +492,62 @@
        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 {
//        String path = outPath + "\\point\\";
//        List<Map<String, Object>> list = ShpReadUtils.readPointShp(shpPath);
//        JSONObject jsonObject = getModule("pointmodule.json");
//        for (Map<String, Object> map : list
//        ) {
//            //拼装坐标
//            JSONArray vertice = new JSONArray();
//            vertice.add(map.get("lon"));
//            vertice.add(map.get("lat"));
//            vertice.add(0.0);
//            jsonObject.getJSONArray("vertices").add(vertice);
//            //拼装基础信息
//            JSONObject cityObject = new JSONObject();
//            cityObject.put("type", "+PipePoint");
//            JSONObject attribute = new JSONObject();
//            attribute.put("name", map.get("fsw"));
//            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 = "管线sem生成")
    @PostMapping(value = "/lineToSem", produces = "application/json; charset=UTF-8")
    public R<String> lineToSem(@RequestBody List<GridDto> dtos) throws Exception {
        String path = outPath + "\\line\\";
        JSONArray jsonArrayList = EntityLibraryUtils.getPointInfo(dtos);
        String publicKey = EntityLibraryUtils.getPublicKey();
        String token = EntityLibraryUtils.login();
        JSONArray jsonArrayList = EntityLibraryUtils.getLineInfo(dtos, token);
        if (jsonArrayList.size() == 0) {
            return fail("该区域不存在管线!");
        }
@@ -480,7 +558,6 @@
        }
        String sql = stringBuffer.toString();
        sql = sql.substring(0, sql.length() - 1) + ")";
        String publicKey = EntityLibraryUtils.getPublicKey();
        StringBuffer paramBuffer = new StringBuffer("");
        while (!"".equals(sql)) {
            if (sql.length() > 110) {
@@ -493,9 +570,85 @@
            }
        }
        String src=paramBuffer.toString().substring(0, paramBuffer.length() - 1);
        JSONArray arrayDetail = EntityLibraryUtils.getPointDetail(src);
        //todo æ›¿æ¢mapencodedString
        List<Map<String, Object>> list = new ArrayList<>();
        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")
    @GetMapping(value = "/lineToCityJson", produces = "application/json; charset=UTF-8")
    public R<String> lineToCityJson(@RequestParam("shpPath") String shpPath) throws Exception {
        String path = outPath + "\\line\\";
        List<Map<String, Object>> list = ShpReadUtils.readPointShp(shpPath);
        JSONObject jsonObject = getModule("linemodule.json");
        for (Map<String, Object> map : list
        ) {
@@ -543,58 +696,6 @@
        SemUtils.cityJsonToSem(pointPath, filePatn + "link.sem");
        return success(filePatn + "link.sem");
    }
//    @ApiOperation(value = "管线转cityjson")
//    @GetMapping(value = "/lineToCityJson", produces = "application/json; charset=UTF-8")
//    public R<String> lineToCityJson(@RequestParam("shpPath") String shpPath) throws Exception {
//        String path = outPath + "\\line\\";
//        List<Map<String, Object>> list = ShpReadUtils.readPointShp(shpPath);
//        JSONObject jsonObject = getModule("linemodule.json");
//        for (Map<String, Object> map : list
//        ) {
//            //拼装基础信息
//            JSONObject cityObject = new JSONObject();
//            cityObject.put("type", "+PipeLine");
//            JSONObject attribute = new JSONObject();
//            attribute.put("name", map.get("msfs"));
//            JSONArray geometry = new JSONArray();
//            JSONObject metry = new JSONObject();
//            metry.put("type", "MultiLineString");
//            metry.put("lod", 0);
//            JSONArray boundarie = new JSONArray();
//            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);
//            }
//            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")
    @GetMapping(value = "/terrainToCityJson", produces = "application/json; charset=UTF-8")
src/main/java/com/se/simu/utils/EntityLibraryUtils.java
@@ -45,6 +45,50 @@
        return null;
    }
    public static String getLoginPublicKey() {
        JSONObject jsonObject = new JSONObject();
        String json = jsonObject.toJSONString();
        // å‘送JSON格式的POST请求
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        HttpEntity<String> request = new HttpEntity<>(json, headers);
        RestTemplate restTemplate = new RestTemplate();
        ResponseEntity<String> responseEntity = restTemplate.postForEntity("http://106.120.22.26:8024/account-service/security/publickey", request, String.class);
        if (responseEntity.getStatusCode().is2xxSuccessful()) {
            String body = responseEntity.getBody();
            return JSONObject.parseObject(body).getString("data");
        }
        return null;
    }
    /**
     * ç™»å½•实体库
     *
     * @return å‚数内详情
     */
    public static String login() throws Exception {
        String publicKey = getLoginPublicKey();
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("userid", "admin");
        jsonObject.put("password", encrypt("admin", publicKey));
        RestTemplate restTemplate = new RestTemplate();
        // å‘送JSON格式的POST请求
        StringHttpMessageConverter converter = new StringHttpMessageConverter(StandardCharsets.UTF_8);
        converter.setSupportedMediaTypes(MediaType.parseMediaTypes("text/plain;charset=UTF-8"));
        restTemplate.getMessageConverters().add(0, converter);
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        headers.add("Access-Control-Allow-Origin", "*");
        String json = jsonObject.toJSONString();
        HttpEntity<String> request = new HttpEntity<>(json, headers);
        ResponseEntity<String> responseEntity = restTemplate.exchange("http://106.120.22.26:8024/account-service/security/login", HttpMethod.POST, request, String.class);
        if (responseEntity.getStatusCode().is2xxSuccessful()) {
            String body = responseEntity.getBody();
            return JSONObject.parseObject(body).getJSONObject("data").getString("token");
        }
        return null;
    }
    public static String encrypt(String str, String publicKey) throws Exception {
        //Base64编码的公钥
        byte[] decoded = Base64.decodeBase64(publicKey);
@@ -90,7 +134,36 @@
     * @param dtos å››ä¸ªåæ ‡ç‚¹
     * @return æ¡†é€‰å†…部管线
     */
    public static JSONArray getPointInfo(List<GridDto> dtos) {
    public static JSONArray getPointInfo(List<GridDto> dtos, String token) {
        JSONArray paramArray = new JSONArray();
        for (GridDto dto : dtos
        ) {
            paramArray.add(ProjectionToGeographicUtil.get4548Point(dto.getLon(), dto.getLat()));
        }
        paramArray.add(ProjectionToGeographicUtil.get4548Point(dtos.get(0).getLon(), dtos.get(0).getLat()));
        JSONObject jsonObject = getModule("layerQueryPointParams.json");
        jsonObject.getJSONObject("geometry").getJSONArray("coordinates").add(paramArray);
        jsonObject.put("token", token);
        RestTemplate restTemplate = new RestTemplate();
        // å‘送JSON格式的POST请求
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        String json = jsonObject.toJSONString();
        HttpEntity<String> request = new HttpEntity<>(json, headers);
        ResponseEntity<String> responseEntity = restTemplate.postForEntity("http://106.120.22.26:8024/geo-service/entitydbdata/layer/query", request, String.class);
        if (responseEntity.getStatusCode().is2xxSuccessful()) {
            String body = responseEntity.getBody();
            return JSONObject.parseObject(body).getJSONObject("data").getJSONArray("items");
        }
        return null;
    }
    /**
     * ç®¡çº¿åˆ—表
     *
     * @param dtos å››ä¸ªåæ ‡ç‚¹
     * @return æ¡†é€‰å†…部管线
     */
    public static JSONArray getLineInfo(List<GridDto> dtos, String token) {
        JSONArray paramArray = new JSONArray();
        for (GridDto dto : dtos
        ) {
@@ -99,6 +172,7 @@
        paramArray.add(ProjectionToGeographicUtil.get4548Point(dtos.get(0).getLon(), dtos.get(0).getLat()));
        JSONObject jsonObject = getModule("layerQueryParams.json");
        jsonObject.getJSONObject("geometry").getJSONArray("coordinates").add(paramArray);
        jsonObject.put("token", token);
        RestTemplate restTemplate = new RestTemplate();
        // å‘送JSON格式的POST请求
        HttpHeaders headers = new HttpHeaders();
@@ -119,9 +193,10 @@
     * @param param æŸ¥è¯¢å‚æ•°
     * @return å‚数内详情
     */
    public static JSONArray getPointDetail(String param) {
    public static JSONArray getLineDetail(String param,String token) {
        JSONObject jsonObject = getModule("layerQueryDetailParams.json");
        jsonObject.put("where", param);
        jsonObject.put("token",token);
        RestTemplate restTemplate = new RestTemplate();
        // å‘送JSON格式的POST请求
        StringHttpMessageConverter converter = new StringHttpMessageConverter(StandardCharsets.UTF_8);
src/main/resources/layerQueryDetailParams.json
@@ -1 +1 @@
{"dbid":"85257774fdb64e5f99f6778696cad02a","querytype":"polyline","layerid":"1e677d48-8dff-4975-b9a0-c16500193629","where":"","containCount":false,"token":"54bc48d424ee49c6b07c1c6f91a583ea"}
{"dbid":"85257774fdb64e5f99f6778696cad02a","querytype":"polyline","count":100000,"layerid":"1e677d48-8dff-4975-b9a0-c16500193629","where":"","containCount":false,"token":"54bc48d424ee49c6b07c1c6f91a583ea"}
src/main/resources/layerQueryPointParams.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1 @@
{"dbid":"85257774fdb64e5f99f6778696cad02a","layerid":"ede07887-7b58-47b4-ae96-b8a6a30e9c11","token":"54bc48d424ee49c6b07c1c6f91a583ea","start":1,"count":100000,"like":null,"outfields":"seid,enti_uuid","containCount":true,"geometry":{"type":"Polygon","coordinates":[]}}