月球大数据地理空间分析展示平台-【后端】-月球后台服务
13693261870
2023-08-25 1fd236eff8e31047d30ccfbd94bd329d861f8d4d
添加读取栅格信息功能
已修改4个文件
265 ■■■■ 文件已修改
src/main/java/com/moon/server/entity/all/StaticData.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/moon/server/entity/data/MetaFileEntity.java 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/moon/server/service/data/RasterService.java 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/moon/server/service/data/UploadService.java 35 ●●●●● 补丁 | 查看 | 原始文档 | 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;
    }