zhongrj
2025-02-10 93264081cc9cbdf829d885d898cb06f9af2ad910
增加空间分析接口,增加geojson文件读取导入
8 files modified
165 ■■■■■ changed files
src/main/java/org/springblade/modules/yw/controller/EmergencySpaceController.java 12 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/yw/controller/GeomInfoController.java 13 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/yw/mapper/EmergencySpaceMapper.java 14 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/yw/mapper/EmergencySpaceMapper.xml 29 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/yw/service/IEmergencySpaceService.java 7 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/yw/service/IGeomInfoService.java 7 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/yw/service/impl/EmergencySpaceServiceImpl.java 25 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/yw/service/impl/GeomInfoServiceImpl.java 58 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/yw/controller/EmergencySpaceController.java
@@ -129,4 +129,16 @@
    public R getStatisticData(EmergencySpaceVO emergencySpace) {
        return R.data(emergencySpaceService.getStatisticData(emergencySpace));
    }
    /**
     * 通过空间分析点位,找到离风险源最近的防控点 风险源找1,1找2,2找3
     * @param emergencySpace pre_level: 1:一级防控点  2:二级防控点  3:三级防控点
     * @return
     */
    @GetMapping("spatialAnalysisPoint")
    @ApiOperationSupport(order = 10)
    @ApiOperation(value = "获取应急空间统计数据", notes = "")
    public R spatialAnalysisPoint(EmergencySpaceVO emergencySpace) {
        return R.data(emergencySpaceService.spatialAnalysisPoint(emergencySpace));
    }
}
src/main/java/org/springblade/modules/yw/controller/GeomInfoController.java
@@ -259,4 +259,17 @@
        }
    }
    /**
     * 导入 geojson 文件解析空间信息
     * @param file
     * @return
     */
    @PostMapping("/importGeoJson")
    @ApiOperationSupport(order = 10)
    @ApiOperation(value = "导入 geojson 文件解析空间信息", notes = "传入文件")
    public R importGeoJson(MultipartFile file) {
        return geomInfoService.importGeoJson(file);
    }
}
src/main/java/org/springblade/modules/yw/mapper/EmergencySpaceMapper.java
@@ -37,4 +37,18 @@
     * @return
     */
    String getEmePool();
    /**
     * 通过空间分析点位,找到离风险源最近的防控点 风险源找1,1找2,2找3
     * @param emergencySpace pre_level: 1:一级防控点  2:二级防控点  3:三级防控点
     * @return
     */
    EmergencySpaceVO spatialAnalysisPoint(@Param("emergencySpace") EmergencySpaceVO emergencySpace);
    /**
     * 查找距离当前点最近的线
     * @param emergencySpace
     * @return
     */
    EmergencySpaceVO spatialAnalysisPointToLines(@Param("emergencySpace") EmergencySpaceVO emergencySpace);
}
src/main/java/org/springblade/modules/yw/mapper/EmergencySpaceMapper.xml
@@ -52,4 +52,33 @@
        WHERE type = 1  AND is_deleted = 0
    </select>
    <!--通过空间分析点位,找到离风险源最近的防控点 风险源找1,1找2,2找3-->
    <select id="spatialAnalysisPoint" resultType="org.springblade.modules.yw.vo.EmergencySpaceVO">
        SELECT
            *,
            ST_Distance_Sphere (
                ST_GeomFromText(concat("POINT(",lng," ",lat,")")),
                ST_GeomFromText (concat("POINT(",#{emergencySpace.lng}," ",#{emergencySpace.lat},")"))
            ) AS distance
        FROM
            yw_emergency_space
        where lng is not null
        <if test="emergencySpace.preLevel!=null">
            and pre_level = #{emergencySpace.preLevel}
        </if>
        ORDER BY distance
        LIMIT 1
    </select>
    <!--查找距离当前点最近的线-->
    <select id="spatialAnalysisPointToLines" resultType="org.springblade.modules.yw.vo.EmergencySpaceVO">
        SELECT
        2 as preLevel,
        ST_AsText(geom) as geom,
        ST_Distance(ST_GeomFromText(concat("POINT(",#{emergencySpace.lng}," ",#{emergencySpace.lat},")")), geom) AS distance
        FROM yw_geom_info
        ORDER BY distance ASC
        LIMIT 1
    </select>
</mapper>
src/main/java/org/springblade/modules/yw/service/IEmergencySpaceService.java
@@ -45,4 +45,11 @@
     * @return
     */
    String getEmePool();
    /**
     * 通过空间分析点位,找到离风险源最近的防控点 风险源找1,1找2,2找3
     * @param emergencySpace pre_level: 1:一级防控点  2:二级防控点  3:三级防控点
     * @return
     */
    Object spatialAnalysisPoint(EmergencySpaceVO emergencySpace);
}
src/main/java/org/springblade/modules/yw/service/IGeomInfoService.java
@@ -44,4 +44,11 @@
     * @return
     */
    R importSpaceShpZip(MultipartFile file);
    /**
     * 导入 geojson 文件解析空间信息
     * @param file
     * @return
     */
    R importGeoJson(MultipartFile file);
}
src/main/java/org/springblade/modules/yw/service/impl/EmergencySpaceServiceImpl.java
@@ -18,6 +18,8 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -151,4 +153,27 @@
    public String getEmePool() {
        return baseMapper.getEmePool();
    }
    /**
     * 通过空间分析点位,找到离风险源最近的防控点 风险源找1,1找2,2找3
     * @param emergencySpace pre_level: 1:一级防控点  2:二级防控点  3:三级防控点
     * @return
     */
    @Override
    public Object spatialAnalysisPoint(EmergencySpaceVO emergencySpace) {
        List<EmergencySpaceVO> list = new ArrayList<>();
        if (null==emergencySpace.getPreLevel()){
            emergencySpace.setPreLevel(1);
        }
        // 查询一级
        list.add(baseMapper.spatialAnalysisPoint(emergencySpace));
        // 查询二级
        emergencySpace.setPreLevel(2);
        list.add(baseMapper.spatialAnalysisPointToLines(emergencySpace));
        // 查询三级
        emergencySpace.setPreLevel(3);
        list.add(baseMapper.spatialAnalysisPoint(emergencySpace));
        // 返回结果
        return list;
    }
}
src/main/java/org/springblade/modules/yw/service/impl/GeomInfoServiceImpl.java
@@ -1,9 +1,17 @@
package org.springblade.modules.yw.service.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.logging.log4j.util.Strings;
import org.geotools.feature.FeatureCollection;
import org.geotools.feature.FeatureIterator;
import org.geotools.geojson.feature.FeatureJSON;
import org.geotools.geojson.geom.GeometryJSON;
import org.locationtech.jts.geom.Geometry;
import org.opengis.feature.simple.SimpleFeature;
import org.springblade.common.utils.FileUtil;
import org.springblade.common.utils.ShapeFileUtil;
import org.springblade.core.tool.api.R;
@@ -17,7 +25,8 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.*;
import java.util.*;
/**
@@ -80,7 +89,6 @@
    /**
     * 导出 空间信息shp zip 包
     * @param ids
     * @param response
     * @return
     */
    @Override
@@ -167,4 +175,50 @@
        }
        return null;
    }
    /**
     * 导入 geojson 文件解析空间信息
     * @param multipartFile
     * @return
     */
    @Override
    public R importGeoJson(MultipartFile multipartFile) {
        // 转 file
        File file = FileUtil.toFile(multipartFile);
        FeatureJSON featureJSON = new FeatureJSON();
        try {
            FeatureCollection featureCollection = featureJSON.readFeatureCollection(file);
            FeatureIterator iterator = featureCollection.features();
            // 遍历feature转为json对象
            while (iterator.hasNext()) {
                SimpleFeature feature = (SimpleFeature) iterator.next();
                StringWriter writer = new StringWriter();
                featureJSON.writeFeature(feature, writer);
                String temp = writer.toString();
                JSONObject json = JSONObject.parseObject(temp);
                Object value = feature.getDefaultGeometryProperty().getValue();
                System.out.println("value = " + value);
                try {
                    GeomInfoEntity geomInfoEntity = new GeomInfoEntity();
                    // 空间坐标
                    geomInfoEntity.setGeom("'" + value + "'");
                    // 空间类型
                    if (json.getJSONObject("geometry").get("type") != null) {
                        geomInfoEntity.setType(json.getJSONObject("geometry").getString("type"));
                    }
                    // 保存
                    baseMapper.saveGeoInfo(geomInfoEntity);
                } catch (NumberFormatException e) {
                    log.error("NumberFormatException: {}", e);
                } catch (Exception e) {
                    log.error("Exception: {}", e);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 返回
        return R.data(200,"","操作成功!");
    }
}