From 1fd236eff8e31047d30ccfbd94bd329d861f8d4d Mon Sep 17 00:00:00 2001 From: 13693261870 <252740454@qq.com> Date: 星期五, 25 八月 2023 16:29:22 +0800 Subject: [PATCH] 添加读取栅格信息功能 --- src/main/java/com/moon/server/entity/all/StaticData.java | 5 + src/main/java/com/moon/server/entity/data/MetaFileEntity.java | 120 ++++++++++++++++++++++++ src/main/java/com/moon/server/service/data/UploadService.java | 35 ++++++ src/main/java/com/moon/server/service/data/RasterService.java | 105 ++++++++++++++------ 4 files changed, 231 insertions(+), 34 deletions(-) diff --git a/src/main/java/com/moon/server/entity/all/StaticData.java b/src/main/java/com/moon/server/entity/all/StaticData.java index 5a6dbb2..d563382 100644 --- a/src/main/java/com/moon/server/entity/all/StaticData.java +++ b/src/main/java/com/moon/server/entity/all/StaticData.java @@ -203,6 +203,11 @@ public final static String PWD_REG = "^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\\W!@#$%^&*`~()\\-_+=,.?;<>]+$)(?![a-z0-9]+$)(?![a-z\\W!@#$%^&*`~()\\-_+=,.?;<>]+$)(?![0-9\\W!@#$%^&*`~()\\-_+=,.?;<>]+$)[a-zA-Z0-9\\W!@#$%^&*`~()\\-_+=,.?;<>]{12,20}$"; /** + * 鏍呮牸鏁版嵁鎵╁睍鍚� + */ + public final static List<String> RASTER_EXT = new ArrayList<>(Arrays.asList(".img", ".tif", ".tiff", "jpg", "jp2")); + + /** * MPT鏂囦欢鎵╁睍鍚� */ public final static List<String> MPT_EXT = new ArrayList<>(Arrays.asList(".midx", ".strmi", ".ei.midx", ".ei.mpt", ".ei.strmi")); diff --git a/src/main/java/com/moon/server/entity/data/MetaFileEntity.java b/src/main/java/com/moon/server/entity/data/MetaFileEntity.java index b8c8473..fad6842 100644 --- a/src/main/java/com/moon/server/entity/data/MetaFileEntity.java +++ b/src/main/java/com/moon/server/entity/data/MetaFileEntity.java @@ -50,6 +50,30 @@ private String xlsPath; + private String geom; + + private String sensortype; + + private Timestamp acqTime; + + private String resolution; + + private String gridsize; + + private String coorSys; + + private String epsg; + + private String hDatum; + + private String mataType; + + private String bands; + + private String bandType; + + private String ct; + public String getEventid() { return eventid; } @@ -209,4 +233,100 @@ public void setXlsPath(String xlsPath) { this.xlsPath = xlsPath; } + + public String getGeom() { + return geom; + } + + public void setGeom(String geom) { + this.geom = geom; + } + + public String getSensortype() { + return sensortype; + } + + public void setSensortype(String sensortype) { + this.sensortype = sensortype; + } + + public Timestamp getAcqTime() { + return acqTime; + } + + public void setAcqTime(Timestamp acqTime) { + this.acqTime = acqTime; + } + + public String getResolution() { + return resolution; + } + + public void setResolution(String resolution) { + this.resolution = resolution; + } + + public String getGridsize() { + return gridsize; + } + + public void setGridsize(String gridsize) { + this.gridsize = gridsize; + } + + public String getCoorSys() { + return coorSys; + } + + public void setCoorSys(String coorSys) { + this.coorSys = coorSys; + } + + public String getEpsg() { + return epsg; + } + + public void setEpsg(String epsg) { + this.epsg = epsg; + } + + public String gethDatum() { + return hDatum; + } + + public void sethDatum(String hDatum) { + this.hDatum = hDatum; + } + + public String getMataType() { + return mataType; + } + + public void setMataType(String mataType) { + this.mataType = mataType; + } + + public String getBands() { + return bands; + } + + public void setBands(String bands) { + this.bands = bands; + } + + public String getBandType() { + return bandType; + } + + public void setBandType(String bandType) { + this.bandType = bandType; + } + + public String getCt() { + return ct; + } + + public void setCt(String ct) { + this.ct = ct; + } } diff --git a/src/main/java/com/moon/server/service/data/RasterService.java b/src/main/java/com/moon/server/service/data/RasterService.java index be905d5..b82a7a1 100644 --- a/src/main/java/com/moon/server/service/data/RasterService.java +++ b/src/main/java/com/moon/server/service/data/RasterService.java @@ -1,13 +1,14 @@ package com.moon.server.service.data; import com.moon.server.entity.all.StaticData; -import com.moon.server.entity.data.MetaEntity; +import com.moon.server.entity.data.MetaFileEntity; import com.moon.server.helper.StringHelper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.gdal.gdal.ColorTable; import org.gdal.gdal.Dataset; import org.gdal.gdal.gdal; +import org.gdal.gdalconst.gdalconst; import org.gdal.ogr.Geometry; import org.gdal.ogr.ogr; import org.gdal.osr.SpatialReference; @@ -48,7 +49,7 @@ /** * 璇诲彇鏍呮牸淇℃伅 */ - public void readRasterInfo(MetaEntity me, String file) { + public void readRasterInfo(MetaFileEntity mf, String file) { Dataset ds = null; try { File f = new File(file); @@ -56,31 +57,46 @@ return; } - ds = gdal.Open(file, 0); + ds = gdal.Open(file, gdalconst.GA_ReadOnly); if (null == ds || ds.getRasterCount() == 0) { return; } - // EPSG缂栫爜 - String epsg = getEpsg(ds); - // 娉㈡鏁� - String bands = "" + ds.getRasterCount(); - //vd.Meta.band_type = Enum.GetName(typeof(DataType), ds.GetRasterBand(1).DataType); // 鏁版嵁绫诲瀷 - ColorTable colorTable = ds.GetRasterBand(1).GetRasterColorTable(); - // 鏁版嵁棰滆壊琛� - String ct = null == colorTable ? null : colorTable.toString(); - // 楂樼▼鍩哄噯 - String hDatum = null; - - double[] transform = new double[6]; - ds.GetGeoTransform(transform); - // 鍒嗚鲸鐜� - String resolution = String.format("%f,%f", transform[1], transform[5]); - - if (!StaticData.EPSGS.contains(epsg)) { - return; + SpatialReference sr = ds.GetSpatialRef(); + if (sr != null) { + // 鍧愭爣绯荤粺 + mf.setCoorSys(sr.GetName()); + if (StaticData.MOON200.equals(mf.getCoorSys())) { + // EPSG缂栫爜 + mf.setEpsg("ESRI:" + StaticData.I104903); + } else { + String code = sr.GetAuthorityCode(null); + // EPSG缂栫爜 + 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); + + // 鍒嗚鲸鐜� + double[] transform = new double[6]; + ds.GetGeoTransform(transform); + mf.setResolution(String.format("%f,%f", transform[1], transform[5])); + + if (!StaticData.EPSGS.contains(mf.getEpsg())) { + return; + } Geometry minPoint = getMinPoint(ds); Geometry maxPoint = getMaxPoint(ds); double xmin = minPoint.GetX(0); @@ -90,6 +106,7 @@ // 鍥涜嚦鑼冨洿 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) { log.error(ex.getMessage(), ex); } finally { @@ -100,19 +117,41 @@ } /** - * 鑾峰彇EPSG缂栫爜 + * 鑾峰彇鏁版嵁绫诲瀷 */ - private String getEpsg(Dataset ds) { - SpatialReference sr = ds.GetSpatialRef(); - if (sr != null) { - // 鍧愭爣绯荤粺 - String coorSys = sr.GetName(); - if (StaticData.MOON200.equals(coorSys)) { - return "ESRI:" + StaticData.I104903; - } else { - String code = sr.GetAuthorityCode(null); - return StringHelper.isEmpty(code) ? null : "EPSG:" + code; - } + private String getDataType(int dataType) { + if (dataType == gdalconst.GDT_Byte) { + return "GDT_Byte"; + } + if (dataType == gdalconst.GDT_UInt16) { + return "GDT_UInt16"; + } + if (dataType == gdalconst.GDT_Int16) { + return "GDT_Int16"; + } + if (dataType == gdalconst.GDT_UInt32) { + return "GDT_UInt32"; + } + if (dataType == gdalconst.GDT_Int32) { + return "GDT_Int32"; + } + if (dataType == gdalconst.GDT_Float32) { + return "GDT_Float32"; + } + if (dataType == gdalconst.GDT_Float64) { + return "GDT_Float64"; + } + if (dataType == gdalconst.GDT_CInt16) { + return "GDT_CInt16"; + } + if (dataType == gdalconst.GDT_CInt32) { + return "GDT_CInt32"; + } + if (dataType == gdalconst.GDT_CFloat32) { + return "GDT_CFloat32"; + } + if (dataType == gdalconst.GDT_CFloat64) { + return "GDT_CFloat64"; } return null; diff --git a/src/main/java/com/moon/server/service/data/UploadService.java b/src/main/java/com/moon/server/service/data/UploadService.java index 39b1554..9f95e0e 100644 --- a/src/main/java/com/moon/server/service/data/UploadService.java +++ b/src/main/java/com/moon/server/service/data/UploadService.java @@ -15,6 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.io.File; import java.sql.Timestamp; @@ -43,6 +44,9 @@ @Autowired DirService dirService; + @Resource + RasterService rasterService; + @Override public List<CoordEntity> selectCoords(String zoning) { return uploadMapper.selectCoords(zoning); @@ -68,6 +72,7 @@ */ public void insertFiles(UserEntity ue, List<MetaFileEntity> list, HttpServletRequest req) { checkMetaFiles(ue, list); + readRasterInfo(list); List<MetaFileEntity> xlsList = getExcelFiles(list); loadData(list); copyFiles(list); @@ -102,6 +107,21 @@ MetaEntity old = metaService.selectByGuid(mf.getGuid(), getDirCode(mf), null); if (null != old) { mf.setMsg("宸插瓨鍦�"); + } + } + } + + /** + * 璇诲彇鏍呮牸淇℃伅 + */ + private void readRasterInfo(List<MetaFileEntity> list) { + for (MetaFileEntity mf : list) { + if (null != mf.getMsg()) { + continue; + } + + if (StaticData.RASTER_EXT.contains("." + mf.getType())) { + rasterService.readRasterInfo(mf, mf.getPath()); } } } @@ -499,7 +519,7 @@ MetaEntity me = createMeta(mf, metaId); if (StaticData.NGDB.equals(me.getType())) { if (guids.contains(me.getGuid())) { - me.setIsmeta((short)-1); + me.setIsmeta((short) -1); } else { guids.add(me.getGuid()); } @@ -535,6 +555,19 @@ me.setRows(mf.getRows()); me.setCreateUser(mf.getCreateUser()); me.setCreateTime(mf.getCreateTime()); + // 鏍呮牸淇℃伅 + me.setGeom(StringHelper.isEmpty(mf.getGeom()) ? "null" : mf.getGeom()); + me.setSensortype(mf.getSensortype()); + me.setAcqTime(mf.getAcqTime()); + me.setResolution(mf.getResolution()); + me.setGridsize(mf.getGridsize()); + me.setCoorSys(mf.getCoorSys()); + me.setEpsg(mf.getEpsg()); + me.sethDatum(mf.gethDatum()); + me.setMataType(mf.getMataType()); + me.setBands(mf.getBands()); + me.setBandType(mf.getBandType()); + me.setCt(mf.getCt()); return me; } -- Gitblit v1.9.3