From 796b44ea813a1133beae4f3a67f1c0263510c0c7 Mon Sep 17 00:00:00 2001 From: 13693261870 <252740454@qq.com> Date: 星期日, 17 十一月 2024 09:45:07 +0800 Subject: [PATCH] 1 --- src/main/java/com/moon/server/service/data/ReadRasterService.java | 89 ++++++++++++-------------------------------- 1 files changed, 25 insertions(+), 64 deletions(-) diff --git a/src/main/java/com/moon/server/service/data/ReadRasterService.java b/src/main/java/com/moon/server/service/data/ReadRasterService.java index 5202c78..8ea5206 100644 --- a/src/main/java/com/moon/server/service/data/ReadRasterService.java +++ b/src/main/java/com/moon/server/service/data/ReadRasterService.java @@ -2,6 +2,7 @@ import com.moon.server.entity.all.StaticData; import com.moon.server.entity.data.MetaFileEntity; +import com.moon.server.helper.GeoHelper; import com.moon.server.helper.StringHelper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -15,40 +16,14 @@ import org.springframework.stereotype.Service; import java.io.File; +import java.util.ArrayList; +import java.util.List; -/** - * 璇诲彇鏍呮牸鏈嶅姟 - * @author WWW - * @date 2023-08-25 - */ @Service +@SuppressWarnings("ALL") public class ReadRasterService { - private SpatialReference sr4326; - - private SpatialReference sr4490; - - private SpatialReference sr104903; - private final static Log log = LogFactory.getLog(ReadRasterService.class); - /** - * 鍒濆鍖栫┖闂村紩鐢� - */ - private void initSpatialReference() { - if (null == sr4326) { - sr4326 = new SpatialReference(); - sr4326.ImportFromEPSG(StaticData.I4326); - - sr4490 = new SpatialReference(); - sr4490.ImportFromEPSG(StaticData.I4490); - - sr104903 = new SpatialReference(StaticData.MOON_2000_WKT); - } - } - - /** - * 璇诲彇鏍呮牸淇℃伅 - */ public void readRasterInfo(MetaFileEntity mf, String file) { Dataset ds = null; try { @@ -63,31 +38,23 @@ } SpatialReference sr = ds.GetSpatialRef(); - // 鍧愭爣绯荤粺 mf.setCoorSys(sr.GetName()); if (StaticData.MOON200.equals(mf.getCoorSys())) { - // EPSG缂栫爜 mf.setEpsg("ESRI:" + StaticData.I104903); } else { - // EPSG缂栫爜锛歅ROJCS銆丟EOGCS銆丟EOGCS|UNIT 鎴� NULL String code = sr.GetAuthorityCode(null); mf.setEpsg(StringHelper.isEmpty(code) ? null : "EPSG:" + code); } - // 琛屽垪鏁� mf.setGridsize(String.format("%d,%d", ds.getRasterXSize(), ds.getRasterYSize())); - // 娉㈡鏁� mf.setBands(String.valueOf(ds.getRasterCount())); - // 鏁版嵁绫诲瀷 int dataType = ds.GetRasterBand(1).GetRasterDataType(); mf.setBandType(getDataType(dataType)); - // 鏁版嵁棰滆壊琛� ColorTable colorTable = ds.GetRasterBand(1).GetRasterColorTable(); mf.setCt(null == colorTable ? null : colorTable.toString()); - // 楂樼▼鍩哄噯 mf.sethDatum(null); + setMinAndMax(ds, mf); - // 鍒嗚鲸鐜� double[] tr = new double[6]; ds.GetGeoTransform(tr); mf.setResolution(String.format("%f,%f", tr[1], Math.abs(tr[5]))); @@ -102,7 +69,6 @@ double xmax = maxPoint.GetX(0); double ymax = maxPoint.GetY(0); - // 鍥涜嚦鑼冨洿 String geom = String.format("ST_GeomFromText('POLYGON ((%f %f,%f %f,%f %f,%f %f,%f %f))')", xmin, ymax, xmax, ymax, xmax, ymin, xmin, ymin, xmin, ymax); mf.setGeom(geom); } catch (Exception ex) { @@ -114,9 +80,6 @@ } } - /** - * 鑾峰彇鏁版嵁绫诲瀷 - */ private String getDataType(int dataType) { if (dataType == gdalconst.GDT_Byte) { return "GDT_Byte"; @@ -155,9 +118,6 @@ return null; } - /** - * 鑾峰彇Dataset鐨勬渶灏忕偣 - */ private Geometry getMinPoint(Dataset ds) { double[] transform = new double[6]; ds.GetGeoTransform(transform); @@ -171,19 +131,7 @@ return transform(ds, point); } - /** - * 鑾峰彇Dataset鐨勬渶澶х偣 - */ private Geometry getMaxPoint(Dataset ds) { - /** - * transform[0] 宸︿笂瑙抶鍧愭爣 - * transform[1] 涓滆タ鏂瑰悜鍒嗚鲸鐜� - * transform[2] 鏃嬭浆瑙掑害, 0琛ㄧず鍥惧儚 "鍖楁柟鏈濅笂" - * - * transform[3] 宸︿笂瑙抷鍧愭爣 - * transform[4] 鏃嬭浆瑙掑害, 0琛ㄧず鍥惧儚 "鍖楁柟鏈濅笂" - * transform[5] 鍗楀寳鏂瑰悜鍒嗚鲸鐜� - */ double[] transform = new double[6]; ds.GetGeoTransform(transform); @@ -196,12 +144,7 @@ return transform(ds, point); } - /** - * 鍧愭爣杞崲 - */ private Geometry transform(Dataset ds, Geometry point) { - this.initSpatialReference(); - point.AssignSpatialReference(ds.GetSpatialRef()); if (ds.GetSpatialRef().IsGeographic() > 0) { return point; @@ -209,12 +152,30 @@ String srsName = ds.GetSpatialRef().GetName(); if (srsName.contains(StaticData.CGCS2000)) { - point.TransformTo(sr4490); + point.TransformTo(GeoHelper.sr4490); } else { - point.TransformTo(sr4326); + point.TransformTo(GeoHelper.sr4326); } point.SwapXY(); return point; } + + private void setMinAndMax(Dataset ds, MetaFileEntity mf) { + List<Double> minList = new ArrayList<>(); + List<Double> maxList = new ArrayList<>(); + + for (int i = 1; i <= ds.getRasterCount(); i++) { + Double[] min = new Double[1]; + Double[] max = new Double[1]; + ds.GetRasterBand(i).GetMinimum(min); + ds.GetRasterBand(i).GetMaximum(max); + + minList.add(min[0]); + maxList.add(max[0]); + } + + mf.setMin(StringHelper.join(minList, ",")); + mf.setMax(StringHelper.join(maxList, ",")); + } } -- Gitblit v1.9.3