src/main/java/com/se/nsl/helper/ComHelper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/se/nsl/service/TestService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/se/nsl/helper/ComHelper.java
@@ -93,9 +93,50 @@ WarpOptions warpOptions = new WarpOptions(vector); Dataset destDs = gdal.Warp(dest, new Dataset[]{ds}, warpOptions); updateLayerExtension(destDs, layer); destDs.delete(); } private static void updateLayerExtension(Dataset ds, LayerDto layer) { double[] bbox = readTifBbox(ds); double minLon = bbox[0]; double maxLon = bbox[1]; double minLat = bbox[2]; double maxLat = bbox[3]; ExtensionDto extension = layer.getExtension(); double minx = extension.getMinx(); double miny = extension.getMiny(); double maxx = extension.getMaxx(); double maxy = extension.getMaxy(); if (minx > minLon) extension.setMinx(minLon); if (miny > minLat) extension.setMiny(minLat); if (maxx < maxLon) extension.setMaxx(maxLon); if (maxy < maxLat) extension.setMaxy(maxLat); } private static double[] readTifBbox(Dataset ds) { // 1. 获取图像尺寸 int width = ds.getRasterXSize(); int height = ds.getRasterYSize(); // 2. 获取GeoTransform参数 double[] geoTransform = new double[6]; ds.GetGeoTransform(geoTransform); // 3. 解析GeoTransform参数(经纬度坐标) double originLon = geoTransform[0]; // 左上角经度 double originLat = geoTransform[3]; // 左上角纬度 double pixelWidth = geoTransform[1]; // 经度方向分辨率(度/像素) double pixelHeight = geoTransform[5]; // 纬度方向分辨率(度/像素,通常为负) // 4. 计算四至范围(经纬度) double minLon = Math.min(originLon, originLon + width * pixelWidth); double maxLon = Math.max(originLon, originLon + width * pixelWidth); double minLat = Math.min(originLat, originLat + height * pixelHeight); double maxLat = Math.max(originLat, originLat + height * pixelHeight); return new double[] {minLon, maxLon, minLat, maxLat}; } public static BuildingDto intersects(ResultDto dto, double x, double y) { Geometry p = new Geometry(ogr.wkbPoint); p.AddPoint_2D(x, y); src/main/java/com/se/nsl/service/TestService.java
@@ -99,10 +99,14 @@ public void setTerrainInfo(Dataset ds, LayerDto layer) { Geometry minPoint = GdalHelper.getMinPoint(ds); Geometry maxPoint = GdalHelper.getMaxPoint(ds); double minx = ComHelper.getMinVal(minPoint.GetX(0), 10000000); double miny = ComHelper.getMinVal(minPoint.GetY(0), 10000000); double maxx = ComHelper.getMaxVal(maxPoint.GetX(0) + MAX_X_OFFSET, 10000000); double maxy = ComHelper.getMaxVal(maxPoint.GetY(0), 10000000); // double minx = ComHelper.getMinVal(minPoint.GetX(0), 10000000); // double miny = ComHelper.getMinVal(minPoint.GetY(0), 10000000); // double maxx = ComHelper.getMaxVal(maxPoint.GetX(0) + MAX_X_OFFSET, 10000000); // double maxy = ComHelper.getMaxVal(maxPoint.GetY(0), 10000000); double minx = Double.MAX_VALUE; double miny = Double.MAX_VALUE; double maxx = Double.MIN_VALUE; double maxy = Double.MIN_VALUE; //layer.setExtension(new ExtensionDto(minx, miny, maxx, maxy, Double.MAX_VALUE, Double.MIN_VALUE)); Band band = ds.GetRasterBand(1); @@ -222,10 +226,6 @@ public void setWaterHeight(LayerDto layer, List<String> files) { int c = files.size(), step = files.size() / 10; if (step < 1) step = 1; double minx = Double.MAX_VALUE; double miny = Double.MAX_VALUE; double maxx = Double.MIN_VALUE; double maxy = Double.MIN_VALUE; for (int i = 0; i < c; i += step) { Dataset ds = null; try { @@ -235,16 +235,6 @@ double[] mm = new double[2]; ds.GetRasterBand(1).ComputeRasterMinMax(mm, 0); layer.getWaters().setHeight(mm[0], mm[1]); double[] bbox = readTifBbox(ds); double minLon = bbox[0]; double maxLon = bbox[1]; double minLat = bbox[2]; double maxLat = bbox[3]; if (minx > minLon) minx = minLon; if (miny > minLat) miny = minLat; if (maxx < maxLon) maxx = maxLon; if (maxy < maxLat) maxy = maxLat; } finally { if (null != ds) ds.delete(); }