From 126a156beabb3e61bc5ba888f8915adc8e974c2a Mon Sep 17 00:00:00 2001 From: 13693261870 <252740454@qq.com> Date: 星期日, 27 八月 2023 08:56:39 +0800 Subject: [PATCH] 添加检查栅格数据的坐标系ID功能 --- src/main/java/com/lf/server/controller/data/PublishController.java | 63 +++++++++++++++++++++ src/main/java/com/lf/server/entity/all/StaticData.java | 5 + src/main/java/com/lf/server/service/data/MetaService.java | 5 + src/main/java/com/lf/server/service/data/RasterService.java | 58 +++++++++++++++++++ src/main/java/com/lf/server/mapper/data/MetaMapper.java | 12 +++ src/main/resources/mapper/data/MetaMapper.xml | 6 ++ 6 files changed, 147 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/lf/server/controller/data/PublishController.java b/src/main/java/com/lf/server/controller/data/PublishController.java index 3360bfd..324c94d 100644 --- a/src/main/java/com/lf/server/controller/data/PublishController.java +++ b/src/main/java/com/lf/server/controller/data/PublishController.java @@ -3,14 +3,19 @@ import com.lf.server.annotation.SysLog; import com.lf.server.controller.all.BaseController; import com.lf.server.entity.all.ResponseMsg; +import com.lf.server.entity.all.StaticData; import com.lf.server.entity.ctrl.PubEntity; import com.lf.server.entity.data.MetaEntity; +import com.lf.server.entity.data.MetaFileEntity; import com.lf.server.entity.data.PublishEntity; import com.lf.server.entity.sys.UserEntity; +import com.lf.server.helper.PathHelper; import com.lf.server.helper.StringHelper; import com.lf.server.helper.WebHelper; import com.lf.server.service.data.LayerService; +import com.lf.server.service.data.MetaService; import com.lf.server.service.data.PublishService; +import com.lf.server.service.data.RasterService; import com.lf.server.service.sys.TokenService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -20,6 +25,8 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import java.io.File; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -39,6 +46,15 @@ @Resource LayerService layerService; + + @Resource + MetaService metaService; + + @Resource + RasterService rasterService; + + @Resource + PathHelper pathHelper; @SysLog() @ApiOperation(value = "鍒嗛〉鏌ヨ鍏冩暟鎹�") @@ -231,6 +247,53 @@ } @SysLog() + @ApiOperation(value = "鏌ヨ鏍呮牸鏁版嵁鐨勫潗鏍囩郴ID") + @ApiImplicitParams({ + @ApiImplicitParam(name = "ids", value = "鍏冩暟鎹甀D闆嗗悎", dataType = "Integer[]", paramType = "query", example = "10531,10527,10526") + }) + @GetMapping(value = "/selectRasterCs") + public ResponseMsg<Object> selectRasterCs(Integer[] ids, HttpServletRequest req) { + try { + if (null == ids || ids.length == 0) { + return fail("鍏冩暟鎹甀D闆嗗悎涓嶈兘涓虹┖"); + } + + List<MetaEntity> list = metaService.selectByIds(StringHelper.join(Arrays.asList(ids), ",")); + if (null == list || list.isEmpty()) { + return fail("鏌ユ棤鏁版嵁"); + } + + String basePath = pathHelper.getConfig().getUploadPath() + File.separator; + List<MetaEntity> errList = new ArrayList<>(); + for (MetaEntity me : list) { + if (!StaticData.RASTER_EXT.contains("." + me.getType())) { + me.setBak("涓嶆槸鏍呮牸鏁版嵁"); + errList.add(me); + continue; + } + + String filePath = basePath + me.getPath(); + File f = new File(filePath); + if (!f.exists() || f.isDirectory()) { + me.setBak("鏂囦欢涓嶅瓨鍦�"); + errList.add(me); + continue; + } + + Integer epsg = rasterService.getRaterEpsg(filePath); + if (null == epsg || epsg < 1) { + me.setBak("鍧愭爣绯籌D鏃犳晥"); + errList.add(me); + } + } + + return success(errList.size(), errList); + } catch (Exception ex) { + return fail(ex.getMessage(), null); + } + } + + @SysLog() @ApiOperation(value = "鎻掑叆鍙戝竷鏁版嵁") @ApiImplicitParams({ @ApiImplicitParam(name = "entity", value = "瀹炰綋绫�", dataType = "PubEntity", paramType = "body") diff --git a/src/main/java/com/lf/server/entity/all/StaticData.java b/src/main/java/com/lf/server/entity/all/StaticData.java index 9449f54..2ebae0e 100644 --- a/src/main/java/com/lf/server/entity/all/StaticData.java +++ b/src/main/java/com/lf/server/entity/all/StaticData.java @@ -210,6 +210,11 @@ public static final char[] HEX_DIGITS = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; /** + * 鏍呮牸鏁版嵁鎵╁睍鍚� + */ + public final static List<String> RASTER_EXT = new ArrayList<>(Arrays.asList(".img", ".tif", ".tiff", "jpg", "jp2")); + + /** * 瀵嗙爜姝e垯琛ㄨ揪寮� */ 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}$"; diff --git a/src/main/java/com/lf/server/mapper/data/MetaMapper.java b/src/main/java/com/lf/server/mapper/data/MetaMapper.java index 854d7b7..a73303e 100644 --- a/src/main/java/com/lf/server/mapper/data/MetaMapper.java +++ b/src/main/java/com/lf/server/mapper/data/MetaMapper.java @@ -130,12 +130,20 @@ /** * 鏍规嵁澶氫釜ID鏌ヨ鍏冩暟鎹紙鏁版嵁琛級 * - * @param ids - * @return + * @param ids ID瀛楃涓� + * @return 鍏冩暟鎹泦鍚� */ public List<MetaEntity> selectByIdsForTab(String ids); /** + * 鏍规嵁澶氫釜ID鏌ヨ鍏冩暟鎹� + * + * @param ids ID瀛楃涓� + * @return 鍏冩暟鎹泦鍚� + */ + public List<MetaEntity> selectByIds(String ids); + + /** * 鏌ヨ鍏冩暟鎹枃浠� * * @param ids 鍏冩暟鎹甀D闆嗗悎 diff --git a/src/main/java/com/lf/server/service/data/MetaService.java b/src/main/java/com/lf/server/service/data/MetaService.java index babd701..e9b42e4 100644 --- a/src/main/java/com/lf/server/service/data/MetaService.java +++ b/src/main/java/com/lf/server/service/data/MetaService.java @@ -130,6 +130,11 @@ } @Override + public List<MetaEntity> selectByIds(String ids) { + return metaMapper.selectByIds(ids); + } + + @Override public List<MetaEntity> selectMetaFiles(List<Integer> ids) { return metaMapper.selectMetaFiles(ids); } diff --git a/src/main/java/com/lf/server/service/data/RasterService.java b/src/main/java/com/lf/server/service/data/RasterService.java new file mode 100644 index 0000000..b5117d7 --- /dev/null +++ b/src/main/java/com/lf/server/service/data/RasterService.java @@ -0,0 +1,58 @@ +package com.lf.server.service.data; + +import com.lf.server.helper.StringHelper; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.gdal.gdal.Dataset; +import org.gdal.gdal.gdal; +import org.gdal.gdalconst.gdalconst; +import org.springframework.stereotype.Service; + +import java.io.File; + +/** + * 鏍呮牸鏈嶅姟 + * @author WWW + * @date 2023-08-27 + */ +@Service +public class RasterService { + private final static Log log = LogFactory.getLog(RasterService.class); + + /** + * 鑾峰彇鏍呮牸鏁版嵁鐨凟PSG缂栫爜 + */ + public Integer getRaterEpsg(String file) { + Dataset ds = null; + try { + File f = new File(file); + if (!f.exists() || f.isDirectory()) { + return null; + } + + ds = gdal.Open(file, gdalconst.GA_ReadOnly); + if (null == ds || 0 == ds.getRasterCount()) { + return null; + } + + if (null == ds.GetSpatialRef()) { + return null; + } + + // PROJCS銆� GEOGCS銆丟EOGCS 鎴� NULL + String code = ds.GetSpatialRef().GetAuthorityCode(null); + if (StringHelper.isEmpty(code)) { + return null; + } + + return Integer.parseInt(code); + } catch (Exception ex) { + log.error(ex.getMessage(), ex); + return null; + } finally { + if (null != ds) { + ds.delete(); + } + } + } +} diff --git a/src/main/resources/mapper/data/MetaMapper.xml b/src/main/resources/mapper/data/MetaMapper.xml index 3a4a7a8..1311d29 100644 --- a/src/main/resources/mapper/data/MetaMapper.xml +++ b/src/main/resources/mapper/data/MetaMapper.xml @@ -162,6 +162,12 @@ order by a.tab; </select> + <select id="selectByIds" resultType="com.lf.server.entity.data.MetaEntity"> + select a.* from lf.sys_meta a + where id in (${ids}) + order by id desc; + </select> + <select id="selectMetaFiles" resultType="com.lf.server.entity.data.MetaEntity"> select a.*,fn_uname(a.create_user) uname,fn_get_fullname(a.depcode, 1) depName,fn_ver(a.verid) verName,fn_get_fullname(a.dircode, 2) dirName from lf.sys_meta a -- Gitblit v1.9.3