From 5d673472ce1c4e07463be492f6080157cbafc3e2 Mon Sep 17 00:00:00 2001 From: 13693261870 <252740454@qq.com> Date: 星期四, 17 十月 2024 10:21:13 +0800 Subject: [PATCH] 1 --- src/main/java/com/se/simu/service/ResultService.java | 21 ++++++++++++++++++--- 1 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/se/simu/service/ResultService.java b/src/main/java/com/se/simu/service/ResultService.java index cc15bf4..0af1ac7 100644 --- a/src/main/java/com/se/simu/service/ResultService.java +++ b/src/main/java/com/se/simu/service/ResultService.java @@ -366,9 +366,8 @@ Band band = ds.GetRasterBand(1); float[] buffer = new float[width * height]; - //band.ReadRaster(0, 0, width, height, buffer, width, height, 0, 0); band.ReadRaster(0, 0, width, height, buffer); - float[] building = dto.getBuildings().get(width + "_" + height); + double[] transform = ds.GetGeoTransform(); BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); double differ = layer.getExtension().getMaxHeight() - layer.getExtension().getMinHeight(), minHeight = layer.getExtension().getMinHeight(); @@ -376,7 +375,11 @@ for (int y = 0; y < height; y++) { int offset = x + y * width; if (Float.isNaN(buffer[offset]) || buffer[offset] < -999 || buffer[offset] < minHeight) continue; - if (!Float.isNaN(building[offset]) && building[offset] > -999) continue; + + double X = transform[0] + x * transform[1] + y * transform[2]; + double Y = transform[3] + x * transform[4] + y * transform[5]; + BuildingDto building = intersects(dto, X, Y); + if (null != building) continue; int r = 0, g, b; if (buffer[offset] - layer.getExtension().getMaxHeight() > 0) { @@ -397,6 +400,18 @@ } } + /** + * 鏄惁鐩镐氦 + * https://blog.csdn.net/flyingshineangel/article/details/135423025 + */ + private static BuildingDto intersects(ResultDto dto, double x, double y) { + Geometry p = new Geometry(ogr.wkbPoint); + p.AddPoint_2D(x, y); + p.AssignSpatialReference(dto.getBuildingList().get(0).getGeom().GetSpatialReference()); + + return dto.getBuildingList().parallelStream().filter(b -> b.getGeom().Intersects(p)).findFirst().orElse(null); + } + private void copeFlow(ResultDto dto, LayerDto layer) { List<String> vxFiles = new ArrayList<>(); List<String> vyFiles = new ArrayList<>(); -- Gitblit v1.9.3