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,"","操作成功!"); } }