| | |
| | | basePath + config.getBuildingFile(), |
| | | basePath + config.getWaterPath(), |
| | | basePath + config.getFlowPath(), |
| | | config.getInPath(), |
| | | config.getOutPath(), |
| | | data.getEpsg()); |
| | | LayerDto layer = new LayerDto(config.getVer(), data.getEpsg(), config.getSizes()); |
| | |
| | | |
| | | List<PondingPo> list = new ArrayList<>(); |
| | | for (Geometry geometry : geometries) { |
| | | List<PointDto> points = getValues(ds, geometry, transform, xSize, ySize); |
| | | if (CollectionUtils.isEmpty(points)) continue; |
| | | //List<PointDto> points = getValues(ds, geometry, transform, xSize, ySize); |
| | | //if (CollectionUtils.isEmpty(points)) continue; |
| | | |
| | | PointDto point = Collections.max(points); |
| | | //PointDto point = Collections.max(points); |
| | | PointDto point = getValues(ds, geometry, transform, xSize, ySize); |
| | | if (null == point) continue; |
| | | |
| | | list.add(new PondingPo(geometry, point)); |
| | | } |
| | | |
| | | return list; |
| | | } |
| | | |
| | | private List<PointDto> getValues(Dataset ds, Geometry g, double[] transform, int xSize, int ySize) { |
| | | private PointDto getValues(Dataset ds, Geometry g, double[] transform, int xSize, int ySize) { |
| | | double[] env = new double[4]; |
| | | g.GetEnvelope(env); |
| | | |
| | |
| | | if (endY > ds.getRasterYSize()) endY = ds.getRasterYSize(); |
| | | if (endX - startX < 1 || endY - startY < 1) return null; |
| | | |
| | | List<XYDto> xyList = new ArrayList<>(); |
| | | for (int x = startX; x <= endX; x++) { |
| | | for (int y = startY; y <= endY; y++) { |
| | | xyList.add(new XYDto(x, y)); |
| | | } |
| | | } |
| | | int width = endX - startX; |
| | | int height = endY - startY; |
| | | double[] pixelValues = new double[width * height]; |
| | | ds.GetRasterBand(1).ReadRaster(startX, startY, width, height, pixelValues); |
| | | |
| | | List<PointDto> points = new CopyOnWriteArrayList<>(); |
| | | xyList.stream().forEach(xy -> { |
| | | double X = transform[0] + xy.getX() * transform[1] + xy.getY() * transform[2]; |
| | | double Y = transform[3] + xy.getX() * transform[4] + xy.getY() * transform[5]; |
| | | Double val = Arrays.stream(pixelValues).max().getAsDouble(); |
| | | |
| | | float[] values = new float[1]; |
| | | ds.GetRasterBand(1).ReadRaster(xy.getX(), xy.getY(), 1, 1, values); |
| | | if (Float.isNaN(values[0]) || values[0] < -999 || !ComHelper.isContains(g, X, Y)) return; |
| | | |
| | | points.add(new PointDto(X, Y, values[0])); |
| | | }); |
| | | |
| | | return points; |
| | | return new PointDto(g.Centroid().GetX(), g.Centroid().GetY(), ComHelper.isValid(val) ? val : 0.0); |
| | | } |
| | | |
| | | private void copeFlow(ResultDto dto, LayerDto layer) { |