src/main/java/com/moon/server/entity/all/StaticData.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/moon/server/entity/data/MetaFileEntity.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/moon/server/service/data/RasterService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/moon/server/service/data/UploadService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
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")); 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; } } 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; 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; }