From 794f620632fca78834677d6b0890bfa0fe78eb02 Mon Sep 17 00:00:00 2001 From: wangyifei <1522824457@qq.com> Date: 星期四, 31 十月 2024 16:23:13 +0800 Subject: [PATCH] 根据坐标查询积水深度功能第一次提交 --- src/main/java/com/se/simu/service/WaterService.java | 67 +++++++++++++++++++++++++++++++++ 1 files changed, 67 insertions(+), 0 deletions(-) diff --git a/src/main/java/com/se/simu/service/WaterService.java b/src/main/java/com/se/simu/service/WaterService.java index d49d75a..1c05a40 100644 --- a/src/main/java/com/se/simu/service/WaterService.java +++ b/src/main/java/com/se/simu/service/WaterService.java @@ -3,6 +3,11 @@ import com.se.simu.config.PropertiesConfig; import com.se.simu.domain.vo.*; import lombok.extern.slf4j.Slf4j; +import org.gdal.gdal.Band; +import org.gdal.gdal.Dataset; +import org.gdal.gdal.gdal; +import org.gdal.gdalconst.gdalconstConstants; +import org.gdal.osr.SpatialReference; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -116,4 +121,66 @@ return null; } } + + /** + * 鏍规嵁鍧愭爣鏌ヨ绉按娣卞害 + */ + public Double getWaterHeight(String serviceName, Double x, Double y, Long timestamp) { + String filePath = config.getOutPath() + File.separator + serviceName + File.separator + "waters" + + File.separator + timestamp + File.separator + "water.tif"; + + // 棣栧厛鏄墍鏈塯dal绋嬪簭閮介渶瑕佺殑娉ㄥ唽璇彞 + gdal.AllRegister(); + // 璇诲彇褰卞儚 + Dataset hDataset = gdal.Open(filePath, gdalconstConstants.GA_Update); + + // 璁剧疆鏁版嵁闆嗙殑鎶曞奖 + SpatialReference srs = new SpatialReference(); + srs.ImportFromEPSG(4548); + hDataset.SetProjection(srs.ExportToWkt()); + + //鑾峰彇鏍呮牸鏁伴噺 + int numBands=hDataset.GetRasterCount(); + System.out.println("RasterCount: " + numBands); + //鏋勯�犱豢灏勫彉鎹㈠弬鏁版暟缁勶紝骞惰幏鍙栨暟鎹� + double[] gt = new double[6]; + hDataset.GetGeoTransform(gt); + System.out.println("浠垮皠鍙樻崲鍙傛暟"+ Arrays.toString(gt)); + + //缁忕含搴﹁浆鎹负鏍呮牸鍍忕礌鍧愭爣 + int[] ColRow=Coordinates2ColRow(gt,x,y); + + //鍒ゆ柇鏄惁鍧愭爣瓒呭嚭鑼冨洿 + if(ColRow[0]<0||ColRow[1]<0||ColRow[0]>hDataset.getRasterXSize()||ColRow[1]>hDataset.getRasterYSize()){ + System.out.println(Arrays.toString(ColRow)+"鍧愭爣鍊艰秴鍑烘爡鏍艰寖鍥达紒"); + return null; + } + + //鑾峰彇璇ョ偣瀵瑰簲鐨勬尝娈电殑鍊� + Band band = hDataset.GetRasterBand(1); + double[] values = new double[1]; + band.ReadRaster(ColRow[0], ColRow[1], 1, 1, values); + double value = values[0]; + + //閲婃斁璧勬簮 + hDataset.delete(); + return value; + } + + /** + * 灏嗗湴鍥惧潗鏍囪浆鎹负鏍呮牸鍍忕礌鍧愭爣 + * @param gt 浠垮皠鍙樻崲鍙傛暟 + * @param X 妯潗鏍� + * @param Y 绾靛潗鏍� + * @return + */ + public int[] Coordinates2ColRow(double[] gt, double X, double Y){ + int[] ints = new int[2]; + //鍚戜笅鍙栨暣,濡傛灉鍚戜笂鍙栨暣浼氬鑷磋绠楃粨鏋滃亸澶э紝浠庤�屽湪鍚庨潰璇诲彇鍒伴偦杩戝儚鍏冪殑鏁版嵁 + double Yline = Math.floor(((Y - gt[3])*gt[1] - (X-gt[0])*gt[4]) / (gt[5]*gt[1]-gt[2]*gt[4])); + double Xpixel = Math.floor((X-gt[0] - Yline*gt[2])/gt[1]); + ints[0] = new Double(Xpixel).intValue(); + ints[1] = new Double(Yline).intValue(); + return ints; + } } -- Gitblit v1.9.3