From aa23fdacb23b6e7e194d3e02760ab47590345205 Mon Sep 17 00:00:00 2001 From: 13693261870 <252740454@qq.com> Date: 星期一, 04 十二月 2023 14:10:24 +0800 Subject: [PATCH] 修订分析的有效值 --- src/main/java/com/moon/server/service/data/RasterAnalysisService.java | 95 ++++++++++++++++++++++++++++++++++++----------- 1 files changed, 72 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/moon/server/service/data/RasterAnalysisService.java b/src/main/java/com/moon/server/service/data/RasterAnalysisService.java index fad1561..631eac8 100644 --- a/src/main/java/com/moon/server/service/data/RasterAnalysisService.java +++ b/src/main/java/com/moon/server/service/data/RasterAnalysisService.java @@ -7,6 +7,7 @@ import com.moon.server.entity.data.PublishEntity; import com.moon.server.helper.GeoHelper; import com.moon.server.helper.PathHelper; +import com.moon.server.helper.StringHelper; import com.moon.server.helper.WebHelper; import com.moon.server.service.all.WebSocketService; import org.apache.commons.logging.Log; @@ -17,11 +18,13 @@ import org.gdal.gdal.gdal; import org.gdal.ogr.Geometry; import org.gdal.ogr.ogr; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.awt.geom.Point2D; import java.io.File; +import java.io.FileWriter; import java.io.IOException; import java.util.*; @@ -32,6 +35,9 @@ */ @Service public class RasterAnalysisService { + @Value("${sys.gdal_path}") + String gdalPath; + @Resource PathHelper pathHelper; @@ -42,6 +48,11 @@ /** * 娴嬭瘯 + * <p> + * POINT (26.72 -48.58) + * LINESTRING(18.44 -46.69,20.14 -45.93) + * POLYGON ((5.11 -41.64,7.68 -43.59,4.73 -43.3,5.11 -41.64)) + * POLYGON ((42.6 -40.3,49.1 -40.4,49.1 -65.7,46.3 -65.6,42.6 -40.3)) */ public List<AnalysisResultEntity> test(Geometry geo, Integer size) { List<AnalysisResultEntity> rs = new ArrayList<>(); @@ -63,11 +74,12 @@ return; } - // for (PublishEntity pub : pubs) { + //for (PublishEntity pub : pubs) { pubs.parallelStream().forEach(pub -> { try { AnalysisResultEntity entity = new AnalysisResultEntity(token); entity.setLayerName(pub.getName()); + entity.setUnit(pub.getUnit()); List<MetaEntity> metas = publishService.selectMetasByPubid(pub.getId()); if (null == metas || metas.isEmpty()) { @@ -76,7 +88,7 @@ return; } - String filePath = pathHelper.getConfig().getUploadPath() + File.separator + metas.get(0).getPath(); + String filePath = getFilePath(metas); File file = new File(filePath); if (!file.exists() || file.isDirectory()) { setError(entity, "婧愭暟鎹笉瀛樺湪"); @@ -93,6 +105,31 @@ } /** + * 鑾峰彇鏂囦欢璺緞 + */ + private String getFilePath(List<MetaEntity> metas) throws IOException { + String basePath = pathHelper.getConfig().getUploadPath() + File.separator; + if (metas.size() == 1) { + return basePath + metas.get(0).getPath(); + } + + String tempPath = pathHelper.getTempPath() + File.separator, guid = StringHelper.getGuid(); + String fileList = tempPath + guid + ".txt"; + FileWriter fw = new FileWriter(fileList); + for (int i = 0, c = metas.size(); i < c; i++) { + String str = (i > 0 ? "\r\n" : "") + basePath + metas.get(i).getPath(); + fw.write(str.toCharArray()); + } + fw.close(); + + String vrt = tempPath + guid + ".vrt"; + String cmd = String.format("\"%s\\gdalbuildvrt.exe\" -input_file_list \"%s\" \"%s\"", gdalPath, fileList, vrt); + WebHelper.exec(cmd); + + return vrt; + } + + /** * 鎺ㄩ�佹秷鎭� */ private void postInfo(AnalysisResultEntity entity) throws IOException { @@ -100,7 +137,8 @@ map.put("analysisForPost", entity); String json = JSONObject.toJSONString(map); - // System.out.println(json) + //System.out.println(json) + WebSocketService.broadCastInfo(json); } @@ -116,26 +154,30 @@ } for (PublishEntity pub : pubs) { - AnalysisResultEntity entity = new AnalysisResultEntity(); - entity.setLayerName(pub.getName()); + try { + AnalysisResultEntity entity = new AnalysisResultEntity(); + entity.setLayerName(pub.getName()); + entity.setUnit(pub.getUnit()); - List<MetaEntity> metas = publishService.selectMetasByPubid(pub.getId()); - if (null == metas || metas.isEmpty()) { - setError(entity, "鎵句笉鍒板彂甯冩暟鎹�"); - continue; + List<MetaEntity> metas = publishService.selectMetasByPubid(pub.getId()); + if (null == metas || metas.isEmpty()) { + setError(entity, "鎵句笉鍒板彂甯冩暟鎹�"); + continue; + } + + String filePath = getFilePath(metas); + File file = new File(filePath); + if (!file.exists() || file.isDirectory()) { + setError(entity, "婧愭暟鎹笉瀛樺湪"); + continue; + } + + openRaster(entity, filePath, geo, size); + rs.add(entity); + } catch (Exception ex) { + log.error(ex.getMessage(), ex); } - - String filePath = pathHelper.getConfig().getUploadPath() + File.separator + metas.get(0).getPath(); - File file = new File(filePath); - if (!file.exists() || file.isDirectory()) { - setError(entity, "婧愭暟鎹笉瀛樺湪"); - continue; - } - - openRaster(entity, filePath, geo, size); - rs.add(entity); } - return rs; } @@ -216,7 +258,7 @@ for (int j = 1; j <= bandCount; j++) { double[] pixelValues = new double[1]; ds.GetRasterBand(j).ReadRaster(xPixel, yPixel, 1, 1, pixelValues); - if (!Double.isNaN(pixelValues[0])) { + if (isValid(pixelValues[0])) { vals.add(WebHelper.round(pixelValues[0], 3)); } } @@ -274,7 +316,7 @@ for (Integer x : xList) { for (Integer y : yList) { ds.GetRasterBand(i).ReadRaster(x, y, 1, 1, pixelValues); - if (!Double.isNaN(pixelValues[0])) { + if (isValid(pixelValues[0])) { list.add(pixelValues[0]); } } @@ -315,7 +357,7 @@ List<Double> list = new ArrayList<>(); for (double val : pixelValues) { - if (!Double.isNaN(val)) { + if (isValid(val)) { list.add(val); } } @@ -323,6 +365,13 @@ } /** + * 鍊兼槸鍚︽湁鏁� + */ + public static boolean isValid(Double val) { + return !Double.isNaN(val) && val > Integer.MIN_VALUE; + } + + /** * 璁剧疆Band鍊� */ private void setBandVals(AnalysisResultEntity entity, List<Double> list) { -- Gitblit v1.9.3