张洋洋
2025-01-13 e4041d443700bde9c60777275de5ae7e9dfc7468
[add]管点json
已添加3个文件
已修改2个文件
199 ■■■■■ 文件已修改
pom.xml 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/se/simu/controller/SimuController.java 61 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/se/simu/utils/ShpReadUtils.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/linemodule.json 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/pointmodule.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml
@@ -265,13 +265,47 @@
            <scope>system</scope>
            <systemPath>${project.basedir}/libs/jzarr-0.4.2.jar</systemPath>
        </dependency>
        <!--gavaghan测距-->
        <dependency>
            <groupId>org.gavaghan</groupId>
            <artifactId>geodesy</artifactId>
            <version>1.1.3</version>
        </dependency>
        <!--geotools测距-->
        <dependency>
            <groupId>org.geotools</groupId>
            <artifactId>gt-referencing</artifactId>
            <version>27.2</version>
        </dependency>
        <!--读取shp文件-->
        <dependency>
            <groupId>org.geotools</groupId>
            <artifactId>gt-shapefile</artifactId>
            <version>22-RC</version>
        </dependency>
    </dependencies>
    <repositories>
        <repository>
            <id>jcenter</id>
            <url>https://jcenter.bintray.com/</url>
            <id>osgeo</id>
            <name>OSGeo Release Repository</name>
            <url>https://repo.osgeo.org/repository/release/</url>
            <snapshots><enabled>false</enabled></snapshots>
            <releases><enabled>true</enabled></releases>
        </repository>
        <repository>
            <id>osgeo-snapshot</id>
            <name>OSGeo Snapshot Repository</name>
            <url>https://repo.osgeo.org/repository/snapshot/</url>
            <snapshots><enabled>true</enabled></snapshots>
            <releases><enabled>false</enabled></releases>
        </repository>
        <repository>
            <id>geotools</id>
            <name>geotools</name>
            <url>http://maven.icm.edu.pl/artifactory/repo/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
        </repository>
    </repositories>
    <build>
src/main/java/com/se/simu/controller/SimuController.java
@@ -11,10 +11,7 @@
import com.se.simu.domain.po.SimuPo;
import com.se.simu.domain.vo.*;
import com.se.simu.service.*;
import com.se.simu.utils.CsvToSQLiteUtils;
import com.se.simu.utils.ShpToolUtils;
import com.se.simu.utils.ZarrUtils;
import com.se.simu.utils.ZipUtils;
import com.se.simu.utils.*;
import io.swagger.annotations.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@@ -52,6 +49,9 @@
    @Value("${simu-app.filePath}")
    private String uploadedFolder;
    @Value("${config.outPath}")
    private String outPath;
    @Resource
@@ -333,10 +333,6 @@
                    return fail("防汛范围不能为空", false);
                }
            }
            //todo ç»„装cityjson
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("shp", jsonArray);
            jsonObject.put("csv", array);
            // å¼€å§‹æ¨¡æ‹Ÿè®¡ç®—
            boolean flag = simuFilesService.createByfiles(vo);
            return success(flag, flag ? "成功" : "失败");
@@ -346,10 +342,10 @@
    }
    @ApiOperation(value = "tarr文件组装")
    @GetMapping(value = "/testZarr", produces = "application/json; charset=UTF-8")
    public R<Boolean> testZarr(@RequestParam("name") String tableName) throws IOException {
    @GetMapping(value = "/saveZarr", produces = "application/json; charset=UTF-8")
    public R<Boolean> saveZarr(@RequestParam("name") String tableName) throws IOException {
        List<String> list = CsvToSQLiteUtils.getNameList(tableName);
        String path = "D:\\城市内涝\\sem\\雨量站点数据\\";
        String path = outPath + "\\";
        String rainfall = "rainfall\\";
        String basePath = path + tableName + "\\" + rainfall;
        JSONObject jsonObject = getModule("rainfallmodule.json");
@@ -407,6 +403,49 @@
        return success(true);
    }
    @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 + "\\";
        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());
            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();
        return success(pointPath);
    }
    public JSONObject getModule(String moduleName) {
        JSONObject jsonObject = new JSONObject();
        try {
src/main/java/com/se/simu/utils/ShpReadUtils.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,62 @@
package com.se.simu.utils;
import org.geotools.data.DataStore;
import org.geotools.data.DataStoreFinder;
import org.geotools.data.FeatureSource;
import org.geotools.data.shapefile.ShapefileDataStore;
import org.geotools.feature.FeatureCollection;
import org.geotools.feature.FeatureIterator;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.io.WKTReader;
import org.opengis.feature.Property;
import org.opengis.feature.simple.SimpleFeature;
import org.opengis.feature.simple.SimpleFeatureType;
import java.io.File;
import java.nio.charset.Charset;
import java.util.*;
public class ShpReadUtils {
    public static void main(String[] args) throws Exception {
        readPointShp("D:\\城市内涝\\sem\\管点\\pipeline-point.shp");
        //readPointShp("D:\\城市内涝\\sem\\管线\\pipeline-conduit.shp");
    }
    /**
     * @param url shp文件路径
     * @return shp解析后的内容
     * @throws Exception å¼‚常
     */
    public static List<Map<String, Object>>  readPointShp(String url) throws Exception {
        Map<String, Object> map = new HashMap<String, Object>();
        File file = new File(url);
        map.put("url", file.toURI().toURL());// å¿…须是URL类型
        DataStore dataStore = DataStoreFinder.getDataStore(map);
        //字符转码,防止中文乱码
        ((ShapefileDataStore) dataStore).setCharset(Charset.forName("utf8"));
        String typeName = dataStore.getTypeNames()[0];
        FeatureSource<SimpleFeatureType, SimpleFeature> source = dataStore.getFeatureSource(typeName);
        FeatureCollection<SimpleFeatureType, SimpleFeature> collection = source.getFeatures();
        FeatureIterator<SimpleFeature> features = collection.features();
        List<Map<String, Object>> list = new ArrayList<>();
        WKTReader reader = new WKTReader();
        while (features.hasNext()) {
            // è¿­ä»£æå–属性
            SimpleFeature feature = features.next();
            Iterator<? extends Property> iterator = feature.getValue().iterator();
            Map<String, Object> objectMap = new HashMap<>();
            while (iterator.hasNext()) {
                Property property = iterator.next();
                if ("the_geom".equals(property.getName().toString())) {
                    Geometry geometry = reader.read(property.getValue().toString());
                    objectMap.put(property.getName().toString(), geometry);
                } else {
                    objectMap.put(property.getName().toString(), property.getValue());
                }
            }
            list.add(objectMap);
        }
        //读取property中的元素并返回
        return list;
    }
}
src/main/resources/linemodule.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
{
  "type": "CityJSON",
  "version": "1.0",
  "CityObjects": {
    "UUID_005f52a3-47c2-492c-a941-187c3a342901": {
      "type": "+PipeLine",
      "attributes": {
        "name": "管道"
      },
      "geometry": [
        {
          "type": "MultiLineString",
          "boundaries": [
            [1,2]
          ],
          "lod": 0
        }
      ]
    }
  },
  "vertices": [
    [
      116.7058333,
      39.98416667,
      0.0
    ],
    [
      116.7058326,
      39.98416637,
      0.0
    ]
  ]
}
src/main/resources/pointmodule.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1 @@
{"type":"CityJSON","version":"1.0","CityObjects":{},"vertices":[]}