pom.xml
@@ -244,6 +244,11 @@ </dependency> <dependency> <groupId>org.geotools</groupId> <artifactId>gt-geotiff</artifactId> <version>28.0</version> </dependency> <dependency> <groupId>org.geotools</groupId> <artifactId>gt-epsg-hsql</artifactId> <version>28.0</version> </dependency> src/main/java/org/springblade/modules/dem/DemConfigProperties.java
New file @@ -0,0 +1,20 @@ package org.springblade.modules.dem; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Component @Data @ConfigurationProperties("dem") public class DemConfigProperties { private String tifUrl; private String shanxiTifUrl; private int defaultHeiht; private int safeTrueHeight; } src/main/java/org/springblade/modules/dem/DemUtils.java
New file @@ -0,0 +1,109 @@ package org.springblade.modules.dem; import lombok.SneakyThrows; import org.geotools.coverage.grid.GridCoordinates2D; import org.geotools.coverage.grid.GridCoverage2D; import org.geotools.gce.geotiff.GeoTiffReader; import org.geotools.geometry.DirectPosition2D; import org.geotools.referencing.CRS; import org.geotools.referencing.crs.DefaultGeographicCRS; import org.locationtech.jts.geom.Coordinate; import org.opengis.geometry.DirectPosition; import org.opengis.referencing.crs.CoordinateReferenceSystem; import org.opengis.referencing.operation.MathTransform2D; import java.io.File; public class DemUtils { /** * 根据点获取海拔高 * @param file * @param point * @return */ @SneakyThrows public static int calculateMaxByPoint(File file, Coordinate point) { //获取高程文件 GeoTiffReader reader = new GeoTiffReader(file); GridCoverage2D coverage = reader.read(null); CoordinateReferenceSystem crs = coverage.getCoordinateReferenceSystem2D(); DirectPosition position = new DirectPosition2D(crs, point.x, point.y); int[] pixelValue = (int[]) coverage.evaluate(position); return pixelValue[0]; } /** * 计算两点之间最高海拔 * @param file * @param start * @param end * @return */ @SneakyThrows public static Coordinate calculateMaxElevation(File file, Coordinate start, Coordinate end) { //获取高程文件 GeoTiffReader reader = new GeoTiffReader(file); GridCoverage2D coverage = reader.read(null); CoordinateReferenceSystem crs = coverage.getCoordinateReferenceSystem2D(); MathTransform2D toGrid = (MathTransform2D) CRS.findMathTransform(DefaultGeographicCRS.WGS84, crs, true); MathTransform2D fromGrid = (MathTransform2D) CRS.findMathTransform(crs, DefaultGeographicCRS.WGS84, true); DirectPosition2D startPos = new DirectPosition2D(start.x, start.y); DirectPosition2D endPos = new DirectPosition2D(end.x, end.y); GridCoordinates2D startGrid = new GridCoordinates2D(); GridCoordinates2D endGrid = new GridCoordinates2D(); toGrid.transform(startPos, startGrid); toGrid.transform(endPos, endGrid); int maxPixelValue = Integer.MIN_VALUE; Coordinate retCoordinate = new Coordinate(); // 线性插值,计算中间的点 for (int i = 0; i <= 10000; i++) { double t = i / 10000.0; double lon = start.x + t * (end.x - start.x); double lat = start.y + t * (end.y - start.y); DirectPosition position = new DirectPosition2D(crs, lon, lat); int[] pixelValue = (int[]) coverage.evaluate(position); if (pixelValue[0] > maxPixelValue) { maxPixelValue = pixelValue[0]; retCoordinate.setX(lon); retCoordinate.setY(lat); retCoordinate.setZ(maxPixelValue); } } return retCoordinate; } public static void main(String[] args) { Coordinate start = new Coordinate(115.856725497, 28.624514734); //// Coordinate end = new Coordinate(115.84832847430599, 28.629107705136526); // Coordinate end = new Coordinate(115.85650343813958, 28.62419061027172); // String demPath = "C:\\Users\\vip_x\\Desktop\\无人机\\高程\\江西省12.5米DEM_CGCS2000\\江西省12.5米DEM_CGCS2000.tif"; File file = new File(demPath); // // Coordinate height = calculateMaxElevation(file,start,end); // System.out.println("height:" + height); // //// double maxElevation = calculateMaxElevation(file, start, end); //// System.out.println("Maximum elevation between points: " + maxElevation); // int height2 = calculateMaxByPoint(file,start); System.out.println("height2 = " + height2); } } src/main/java/org/springblade/modules/yw/controller/TestController.java
New file @@ -0,0 +1,177 @@ package org.springblade.modules.yw.controller; import lombok.AllArgsConstructor; import org.apache.logging.log4j.util.Strings; import org.locationtech.jts.geom.Coordinate; import org.springblade.modules.dem.DemUtils; import org.springblade.modules.yw.entity.*; import org.springblade.modules.yw.service.*; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.io.File; import java.util.List; /** * 测试数据处理 */ @RestController @AllArgsConstructor @RequestMapping("/test/data") public class TestController { private final IEmergencySpaceService emergencySpaceService; private final IFacilityService facilityService; private final IFirmInfoService firmInfoService; private final IGeomInfoService geomInfoService; private final IIndParkInfoService indParkInfoService; private final IPanoramicService panoramicService; private final IProTarService proTarService; private final ISuppliesService suppliesService; /** * 测试数据处理 */ @GetMapping("/emeSpace") public void handleDataEmeSpace(){ // 查询数据 List<EmergencySpaceEntity> list = emergencySpaceService.list(); // 获取高程 for (EmergencySpaceEntity emergencySpaceEntity : list) { if (!Strings.isBlank(emergencySpaceEntity.getLng()) && Strings.isBlank(emergencySpaceEntity.getGeom())){ Coordinate point = new Coordinate(Double.parseDouble(emergencySpaceEntity.getLng()), Double.parseDouble(emergencySpaceEntity.getLat())); int ele = DemUtils.calculateMaxByPoint(getFile(), point); // 设置高程 emergencySpaceEntity.setEle(Integer.toString(ele)); // 更新数据 emergencySpaceService.updateById(emergencySpaceEntity); } } } /** * 测试数据处理 */ @GetMapping("/fac") public void handleDataFac(){ // 查询数据 List<FacilityEntity> list = facilityService.list(); // 获取高程 for (FacilityEntity emergencySpaceEntity : list) { if (!Strings.isBlank(emergencySpaceEntity.getLng())){ Coordinate point = new Coordinate(Double.parseDouble(emergencySpaceEntity.getLng()), Double.parseDouble(emergencySpaceEntity.getLat())); int ele = DemUtils.calculateMaxByPoint(getFile(), point); // 设置高程 emergencySpaceEntity.setEle(Integer.toString(ele)); // 更新数据 facilityService.updateById(emergencySpaceEntity); } } } /** * 测试数据处理 */ @GetMapping("/firm") public void handleDataFirm(){ // 查询数据 List<FirmInfo> list = firmInfoService.list(); // 获取高程 for (FirmInfo emergencySpaceEntity : list) { if (!Strings.isBlank(emergencySpaceEntity.getLng())){ Coordinate point = new Coordinate(Double.parseDouble(emergencySpaceEntity.getLng()), Double.parseDouble(emergencySpaceEntity.getLat())); int ele = DemUtils.calculateMaxByPoint(getFile(), point); // 设置高程 emergencySpaceEntity.setEle(Integer.toString(ele)); // 更新数据 firmInfoService.updateById(emergencySpaceEntity); } } } /** * 测试数据处理 */ @GetMapping("/ind") public void handleDataInd(){ // 查询数据 List<IndParkInfoEntity> list = indParkInfoService.list(); // 获取高程 for (IndParkInfoEntity emergencySpaceEntity : list) { if (!Strings.isBlank(emergencySpaceEntity.getLng())){ Coordinate point = new Coordinate(Double.parseDouble(emergencySpaceEntity.getLng()), Double.parseDouble(emergencySpaceEntity.getLat())); int ele = DemUtils.calculateMaxByPoint(getFile(), point); // 设置高程 emergencySpaceEntity.setEle(Integer.toString(ele)); // 更新数据 indParkInfoService.updateById(emergencySpaceEntity); } } } /** * 测试数据处理 */ @GetMapping("/pan") public void handleDataPan(){ // 查询数据 List<PanoramicEntity> list = panoramicService.list(); // 获取高程 for (PanoramicEntity emergencySpaceEntity : list) { if (!Strings.isBlank(emergencySpaceEntity.getLng())){ Coordinate point = new Coordinate(Double.parseDouble(emergencySpaceEntity.getLng()), Double.parseDouble(emergencySpaceEntity.getLat())); int ele = DemUtils.calculateMaxByPoint(getFile(), point); // 设置高程 emergencySpaceEntity.setEle(Integer.toString(ele)); // 更新数据 panoramicService.updateById(emergencySpaceEntity); } } } /** * 测试数据处理 */ @GetMapping("/pro") public void handleDataPro(){ // 查询数据 List<ProTarEntity> list = proTarService.list(); // 获取高程 for (ProTarEntity emergencySpaceEntity : list) { if (!Strings.isBlank(emergencySpaceEntity.getLng())){ Coordinate point = new Coordinate(Double.parseDouble(emergencySpaceEntity.getLng()), Double.parseDouble(emergencySpaceEntity.getLat())); int ele = DemUtils.calculateMaxByPoint(getFile(), point); // 设置高程 emergencySpaceEntity.setEle(Integer.toString(ele)); // 更新数据 proTarService.updateById(emergencySpaceEntity); } } } /** * 测试数据处理 */ @GetMapping("/sup") public void handleDataSup(){ // 查询数据 List<SuppliesEntity> list = suppliesService.list(); // 获取高程 for (SuppliesEntity emergencySpaceEntity : list) { if (!Strings.isBlank(emergencySpaceEntity.getLng())){ Coordinate point = new Coordinate(Double.parseDouble(emergencySpaceEntity.getLng()), Double.parseDouble(emergencySpaceEntity.getLat())); int ele = DemUtils.calculateMaxByPoint(getFile(), point); // 设置高程 emergencySpaceEntity.setEle(Integer.toString(ele)); // 更新数据 suppliesService.updateById(emergencySpaceEntity); } } } public File getFile(){ String demPath = "F:\\aliyun\\江西省地形数据\\江西省12.5米DEM_CGCS2000.tif"; return new File(demPath); } } src/main/java/org/springblade/modules/yw/entity/EmergencySpaceEntity.java
@@ -130,4 +130,10 @@ @ApiModelProperty(value = "空间坐标") private String geom; /** * 高程 */ @ApiModelProperty(value = "高程") private String ele; } src/main/java/org/springblade/modules/yw/entity/FacilityEntity.java
@@ -101,4 +101,10 @@ @TableLogic private Integer isDeleted; /** * 高程 */ @ApiModelProperty(value = "高程") private String ele; } src/main/java/org/springblade/modules/yw/entity/FirmInfo.java
@@ -149,4 +149,10 @@ @TableField("is_deleted") @TableLogic private Integer isDeleted; /** * 高程 */ @ApiModelProperty(value = "高程") private String ele; } src/main/java/org/springblade/modules/yw/entity/GeomInfoEntity.java
@@ -90,4 +90,10 @@ @TableLogic private Integer isDeleted; /** * 高程 */ @ApiModelProperty(value = "高程") private String ele; } src/main/java/org/springblade/modules/yw/entity/IndParkInfoEntity.java
@@ -128,4 +128,10 @@ @TableLogic private Integer isDeleted; /** * 高程 */ @ApiModelProperty(value = "高程") private String ele; } src/main/java/org/springblade/modules/yw/entity/PanoramicEntity.java
@@ -97,4 +97,10 @@ @TableLogic private Integer isDeleted; /** * 高程 */ @ApiModelProperty(value = "高程") private String ele; } src/main/java/org/springblade/modules/yw/entity/ProTarEntity.java
@@ -142,4 +142,10 @@ @ApiModelProperty(value = "说明") private String remark; /** * 高程 */ @ApiModelProperty(value = "高程") private String ele; } src/main/java/org/springblade/modules/yw/entity/SuppliesEntity.java
@@ -121,4 +121,10 @@ @TableLogic private Integer isDeleted; /** * 高程 */ @ApiModelProperty(value = "高程") private String ele; } src/main/java/org/springblade/modules/yw/mapper/EmergencySpaceMapper.xml
@@ -6,7 +6,7 @@ <select id="selectEmergencySpacePage" resultType="org.springblade.modules.yw.vo.EmergencySpaceVO"> select yes.id,yes.name,yes.full_name,yes.type,yes.main_func,yes.lng,yes.lat,yes.pre_level, yes.capacity,yes.remark,yes.firm_id,yes.image_url,ST_AsGeoJSON(yes.geom) as geom, yes.capacity,yes.remark,yes.firm_id,yes.image_url,ST_AsGeoJSON(yes.geom) as geom,yes.ele, yfi.name as firmName, bdb.dict_value as emergencySpaceType from yw_emergency_space yes src/main/java/org/springblade/modules/yw/mapper/FacilityMapper.xml
@@ -44,7 +44,7 @@ <!--三道防线信息查询--> <select id="getTreeFacilityList" resultType="org.springblade.modules.yw.vo.FacilityVO"> select yes.id,yes.name,yes.lng,yes.lat,yes.image_url,yes.capacity,yfi.id as firm_id, yes.id,yes.name,yes.lng,yes.lat,yes.ele,yes.image_url,yes.capacity,yfi.id as firm_id, yfi.name as firmName from yw_emergency_space yes left join yw_firm_info yfi on yfi.id = yes.firm_id and yfi.is_deleted = 0 src/main/resources/application.yml
@@ -239,6 +239,7 @@ #接口放行 skip-url: - /blade-test/** - /test/** # - /yw/** # - /blade-resource/** #授权认证配置