From 480ce41e9261356e1f08fc641e57d8f385c01f12 Mon Sep 17 00:00:00 2001 From: sunyugang Date: Fri, 13 Sep 2024 15:22:02 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E7=AC=AC=E4=B8=80=E7=89=88?= =?UTF-8?q?=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 15 ++++- .../microservice/common/config/GeoUtil.java | 62 +++++++++++++++++++ .../config/RedisKeyExpirationListener.java | 7 +-- .../controller/DataFileController.java | 15 +++++ .../microservice/service/AsyncService.java | 2 + .../service/impl/AsyncServiceImpl.java | 19 ++++++ .../service/impl/DataFileServiceImpl.java | 13 +--- src/main/resources/application-dev.properties | 11 ++-- .../resources/application-test.properties | 26 +++++--- 9 files changed, 139 insertions(+), 31 deletions(-) create mode 100644 src/main/java/com/xkrs/microservice/common/config/GeoUtil.java diff --git a/pom.xml b/pom.xml index 97d0f70..24288a5 100644 --- a/pom.xml +++ b/pom.xml @@ -242,13 +242,26 @@ hutool-all ${hutool-all.version} - + + it.geosolutions + geoserver-manager + 1.8-SNAPSHOT + + + nl.pdok + geoserver-manager + 1.7.0-pdok2 + + + GeoSolutions + https://maven.geo-solutions.it/ + alimaven aliyun maven diff --git a/src/main/java/com/xkrs/microservice/common/config/GeoUtil.java b/src/main/java/com/xkrs/microservice/common/config/GeoUtil.java new file mode 100644 index 0000000..ebdb1ac --- /dev/null +++ b/src/main/java/com/xkrs/microservice/common/config/GeoUtil.java @@ -0,0 +1,62 @@ +package com.xkrs.microservice.common.config; + +import it.geosolutions.geoserver.rest.GeoServerRESTManager; +import it.geosolutions.geoserver.rest.GeoServerRESTPublisher; +import it.geosolutions.geoserver.rest.decoder.RESTDataStore; +import it.geosolutions.geoserver.rest.encoder.GSResourceEncoder; +import it.geosolutions.geoserver.rest.encoder.coverage.GSCoverageEncoder; +import it.geosolutions.geoserver.rest.encoder.datastore.GSGeoTIFFDatastoreEncoder; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import java.io.File; +import java.io.FileNotFoundException; +import java.net.MalformedURLException; +import java.net.URL; + +@Component +public class GeoUtil { + + private static String SRS = "EPSG:4326"; + + @Value("${my.GeoserverAddress}") + private String url; + + @Value("${my.GeoUsername}") + private String userName; + + @Value("${my.GeoPassword}") + private String password; + + @Value("${my.GeoWorkSpace}") + private String workSpaceName; + + private GeoServerRESTManager manager; + + @PostConstruct + public void setManager(){ + try { + manager = new GeoServerRESTManager(new URL(url),userName,password); + } catch (MalformedURLException e) { + e.printStackTrace(); + } + } + + /** + * 上传到tiff文件,发布到GeoServer里面去 + * @param coverageStoreName + * @param filePath + */ + public void publishTiff(String coverageStoreName,String filePath){ + GeoServerRESTPublisher publisher = manager.getPublisher(); + try { + publisher.publishExternalGeoTIFF(workSpaceName, coverageStoreName, + new File(filePath), coverageStoreName,"EPSG:4326", + GSResourceEncoder.ProjectionPolicy.NONE, "raster"); + }catch (FileNotFoundException e){ + e.printStackTrace(); + } + } + +} diff --git a/src/main/java/com/xkrs/microservice/common/config/RedisKeyExpirationListener.java b/src/main/java/com/xkrs/microservice/common/config/RedisKeyExpirationListener.java index 5914933..57733ab 100644 --- a/src/main/java/com/xkrs/microservice/common/config/RedisKeyExpirationListener.java +++ b/src/main/java/com/xkrs/microservice/common/config/RedisKeyExpirationListener.java @@ -8,7 +8,6 @@ import org.springframework.data.redis.listener.RedisMessageListenerContainer; import org.springframework.stereotype.Component; import javax.annotation.Resource; -import java.util.Optional; /** * 监听redis key 过期事件 @@ -28,11 +27,9 @@ public class RedisKeyExpirationListener extends KeyExpirationEventMessageListene String expiredKey = message.toString(); if (expiredKey.contains("runFile_")){ String[] key = expiredKey.split("_"); - Optional optional = dataFileDao.findById(Integer.valueOf(key[1])); + DataFileEntity dataFileEntity = dataFileDao.findById(Integer.valueOf(key[1])).get(); //如果文件的状态还在运行中,就修改运行状态为 未运行 - if (optional.get().getRunFlag().equals("1")){ - DataFileEntity dataFileEntity = new DataFileEntity(); - dataFileEntity.setId(optional.get().getId()); + if (dataFileEntity.getRunFlag() == 1){ dataFileEntity.setRunFlag(0); dataFileDao.save(dataFileEntity); } diff --git a/src/main/java/com/xkrs/microservice/controller/DataFileController.java b/src/main/java/com/xkrs/microservice/controller/DataFileController.java index e7844c9..cad89bb 100644 --- a/src/main/java/com/xkrs/microservice/controller/DataFileController.java +++ b/src/main/java/com/xkrs/microservice/controller/DataFileController.java @@ -1,5 +1,6 @@ package com.xkrs.microservice.controller; +import com.xkrs.microservice.common.config.GeoUtil; import com.xkrs.microservice.common.config.RedisUtil; import com.xkrs.microservice.common.encapsulation.PromptMessageEnum; import com.xkrs.microservice.model.entity.DataFileEntity; @@ -41,6 +42,9 @@ public class DataFileController { @Resource private RedisUtil redisUtil; + @Resource + private GeoUtil geoUtil; + @RequestMapping(value="/get/all",method = RequestMethod.GET) public String getAllDataFile() { @@ -48,6 +52,17 @@ public class DataFileController { return outputEncapsulationObject(PromptMessageEnum.SUCCESS,list,locale); } + @RequestMapping(value="/addTest",method = RequestMethod.POST) + public String fb(@RequestParam("fileCode") String fileCode){ + DataFileEntity dataFileEntity = dataFileService.getDataFileByDataFileCode(fileCode); + try { + geoUtil.publishTiff(dataFileEntity.getDataFileCode() + "_left",dataFileEntity.getLeftFilePath()); + }catch (Exception e){ + + } + return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"ok",locale); + } + /** * 上传tif文件 * @param dataFileQo 数据文件实体 diff --git a/src/main/java/com/xkrs/microservice/service/AsyncService.java b/src/main/java/com/xkrs/microservice/service/AsyncService.java index 8f89e91..9ed5b09 100644 --- a/src/main/java/com/xkrs/microservice/service/AsyncService.java +++ b/src/main/java/com/xkrs/microservice/service/AsyncService.java @@ -2,6 +2,8 @@ package com.xkrs.microservice.service; public interface AsyncService { + public void publishTiff(Integer id); + /** * 异步执行exe文件 * @param id 数据文件id diff --git a/src/main/java/com/xkrs/microservice/service/impl/AsyncServiceImpl.java b/src/main/java/com/xkrs/microservice/service/impl/AsyncServiceImpl.java index a6b9264..166d3a4 100644 --- a/src/main/java/com/xkrs/microservice/service/impl/AsyncServiceImpl.java +++ b/src/main/java/com/xkrs/microservice/service/impl/AsyncServiceImpl.java @@ -1,5 +1,6 @@ package com.xkrs.microservice.service.impl; +import com.xkrs.microservice.common.config.GeoUtil; import com.xkrs.microservice.common.config.RedisUtil; import com.xkrs.microservice.dao.DataFileDao; import com.xkrs.microservice.model.entity.DataFileEntity; @@ -32,6 +33,22 @@ public class AsyncServiceImpl implements AsyncService { @Resource private RedisUtil redisUtil; + @Resource + private GeoUtil geoUtil; + + @Override + public void publishTiff(Integer id) { + DataFileEntity dataFileEntity = dataFileDao.getById(id); + if (dataFileEntity == null) + return; + //发布左影像图层 + geoUtil.publishTiff(dataFileEntity.getDataFileCode() + "_left",dataFileEntity.getLeftFilePath()); + //发布右影像图层 + geoUtil.publishTiff(dataFileEntity.getDataFileCode() + "_right",dataFileEntity.getRightFilePath()); + dataFileEntity.setPublishFlag(1); + dataFileDao.save(dataFileEntity); + } + @Async("threadPoolTaskExecutor") @Override public void executeRunData(Integer id,String dataFileCode,String leftFilePath,String rightFilePath,String maxX,String maxY,String minX,String minY){ @@ -63,4 +80,6 @@ public class AsyncServiceImpl implements AsyncService { //不管运行结果怎么样都把文件锁去掉 redisUtil.del("runFile_" + id); } + + } diff --git a/src/main/java/com/xkrs/microservice/service/impl/DataFileServiceImpl.java b/src/main/java/com/xkrs/microservice/service/impl/DataFileServiceImpl.java index 1f3fd9e..8510707 100644 --- a/src/main/java/com/xkrs/microservice/service/impl/DataFileServiceImpl.java +++ b/src/main/java/com/xkrs/microservice/service/impl/DataFileServiceImpl.java @@ -1,20 +1,14 @@ package com.xkrs.microservice.service.impl; import com.xkrs.microservice.common.config.RedisUtil; -import com.xkrs.microservice.common.encapsulation.EncapsulationObject; import com.xkrs.microservice.dao.DataFileDao; import com.xkrs.microservice.dao.MapServiceDao; import com.xkrs.microservice.model.entity.DataFileEntity; import com.xkrs.microservice.model.entity.MapServiceEntity; import com.xkrs.microservice.model.qo.DataFileQo; -import com.xkrs.microservice.model.qo.ZipFileInfoQo; -import com.xkrs.microservice.model.vo.FileServiceResDetailVo; import com.xkrs.microservice.model.vo.ResultVo; import com.xkrs.microservice.service.AsyncService; import com.xkrs.microservice.service.DataFileService; -import com.xkrs.microservice.service.FileServerService; -import com.xkrs.microservice.util.CopyPropertiesUtil; -import com.xkrs.microservice.util.OpenGeoGisUtil; import com.xkrs.microservice.util.SnowFlakeUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -23,22 +17,16 @@ import org.springframework.cache.annotation.CacheConfig; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.annotation.Caching; -import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; - -import java.io.BufferedReader; import java.io.File; -import java.io.IOException; -import java.io.InputStreamReader; import java.util.List; import java.util.Optional; import static com.xkrs.microservice.util.DateTimeUtil.getNowTime; -import static com.xkrs.microservice.util.DateTimeUtil.timeMillisToTime; import static com.xkrs.microservice.util.FileUtil.multipartToFile; import static com.xkrs.microservice.util.ZipUtil.unZip; @@ -199,6 +187,7 @@ public class DataFileServiceImpl implements DataFileService { // 设置系统时间 dataFileEntity.setCreatedTime(getNowTime()); dataFileDao.save(dataFileEntity); + asyncService.publishTiff(dataFileEntity.getId()); return resultVo; } diff --git a/src/main/resources/application-dev.properties b/src/main/resources/application-dev.properties index fbe7fbc..97ce710 100644 --- a/src/main/resources/application-dev.properties +++ b/src/main/resources/application-dev.properties @@ -32,7 +32,11 @@ spring.redis.lettuce.pool.min-idle = 1 spring.redis.lettuce.shutdown-timeout = 0 # 自定义Geoserver服务器地址 -my.GeoserverAdress = http://192.168.2.9:9080/geoserver/ +my.GeoserverAddress = http://localhost:9080/geoserver +my.GeoUsername = admin +my.GeoPassword = geoserver +my.GeoWorkSpace = gsm_gui + # 临时文件目录 my.TempFilePath = D:/temp/ #my.TempFilePath = /home/sc/web/rs-shandong/temp/ @@ -41,16 +45,15 @@ my.FileServerPath = D:/gsm_gui/files/ #my.FileServerPath = /home/docker/fastdfs/files/ # 自定义文件服务器地址 my.FileServerAdress = http://192.168.2.9:4096/ -#my.FileServerAdress = http://192.168.2.105:4096/ -#my.FileServerAdress = http://118.24.27.47:4096/ my.FileServerAdminAdress = http://127.0.0.1:4096/ + # GSMGUI.exe的文件路径 my.gsmExePath = D:/gsm/2.cmd_GSM/Release/GSM_GUI.exe # GSMGUI.exe的运行文件的输出结果路径 my.gsmOutPath = D:/gsm/out/ + # 结果文件夹中点云的文件路径 my.lasOutPath = /prj/DSM_Ortho/Point_clouds/ - # 结果文件中需要QTM运行的文件路径 my.dsmOutPath = /prj/DSM_Ortho/DSM/ my.topPutPath = /prj/DSM_Ortho/TOP/ diff --git a/src/main/resources/application-test.properties b/src/main/resources/application-test.properties index f053c18..e082189 100644 --- a/src/main/resources/application-test.properties +++ b/src/main/resources/application-test.properties @@ -32,18 +32,26 @@ spring.redis.lettuce.pool.min-idle = 1 spring.redis.lettuce.shutdown-timeout = 0 # 自定义Geoserver服务器地址 -my.GeoserverAdress = http://192.168.2.9:9080/geoserver/ +my.GeoserverAdress = http://localhost:9080/geoserver/ +my.GeoUsername = admin +my.GeoPassword = geoserver +my.GeoWorkSpace = my_syg # 临时文件目录 -my.TempFilePath = D:/temp/ -#my.TempFilePath = /home/sc/web/rs-shandong/temp/ - +my.TempFilePath = /home/gsm_gui/source/temp/ # 文件服务器路径 -my.FileServerPath = D:/gsm-gui/files/ -#my.FileServerPath = /home/docker/fastdfs/files/ - +my.FileServerPath = /home/gsm_gui/source/files/ # 自定义文件服务器地址 my.FileServerAdress = http://192.168.2.9:4096/ -#my.FileServerAdress = http://192.168.2.105:4096/ -#my.FileServerAdress = http://118.24.27.47:4096/ my.FileServerAdminAdress = http://127.0.0.1:4096/ + +# GSMGUI.exe的文件路径 +my.gsmExePath = /home/gsm/2.cmd_GSM/Release/GSM_GUI.exe +# GSMGUI.exe的运行文件的输出结果路径 +my.gsmOutPath = /home/gsm/out/ + +# 结果文件夹中点云的文件路径 +my.lasOutPath = /prj/DSM_Ortho/Point_clouds/ +# 结果文件中需要QTM运行的文件路径 +my.dsmOutPath = /prj/DSM_Ortho/DSM/ +my.topPutPath = /prj/DSM_Ortho/TOP/