|
@@ -26,10 +26,7 @@ import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.io.IOException;
|
|
|
import java.time.LocalDateTime;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.Arrays;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Optional;
|
|
|
+import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
import java.util.stream.Stream;
|
|
|
|
|
@@ -103,14 +100,21 @@ public class InitServiceImpl implements InitService {
|
|
|
}
|
|
|
|
|
|
// 防止为四维看看重复调用重算
|
|
|
+ InitEntity init = this.findById(sceneCode);
|
|
|
if ("age".equals(from)){
|
|
|
- InitEntity init = this.findById(sceneCode);
|
|
|
if (init != null){
|
|
|
log.error("场景:[{}] 已存在,不需要重算", sceneCode);
|
|
|
return Result.success();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ // 重算
|
|
|
+ if ("recount".equals(from)){
|
|
|
+ path = init.getPath();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
|
|
|
|
|
|
String laserDataPath = path + "/laserData";
|
|
@@ -128,9 +132,6 @@ public class InitServiceImpl implements InitService {
|
|
|
// step5 创建poi_type_group表
|
|
|
createPoiTypeGroup(sceneCode);
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
// step7 复制静态资源
|
|
|
copyDefault(sceneCode);
|
|
|
|
|
@@ -138,15 +139,21 @@ public class InitServiceImpl implements InitService {
|
|
|
//step8 替换index.html、/locat/addDataSet.html的场景码, @replace
|
|
|
replaceHtml(sceneCode);
|
|
|
|
|
|
-
|
|
|
-
|
|
|
// 保存initDataStep1 状态
|
|
|
- InitEntity entity = new InitEntity();
|
|
|
- entity.setId(sceneCode);
|
|
|
- entity.setPath(path);
|
|
|
- entity.setCreateTime(LocalDateTime.now());
|
|
|
- entity.setStatus(0);
|
|
|
- initMapper.save(entity);
|
|
|
+ if (init == null) {
|
|
|
+ init = new InitEntity();
|
|
|
+ init.setId(sceneCode);
|
|
|
+ init.setPath(path);
|
|
|
+ init.setCreateTime(LocalDateTime.now());
|
|
|
+ } else {
|
|
|
+ init.setUpdateTime(LocalDateTime.now());
|
|
|
+ Integer recount = init.getRecount();
|
|
|
+ recount = recount == null ? 1 : recount + 1;
|
|
|
+ init.setRecount(recount);
|
|
|
+ }
|
|
|
+
|
|
|
+ init.setStatus(0);
|
|
|
+ initMapper.save(init);
|
|
|
log.info("initDataStep_1处理完成");
|
|
|
|
|
|
return Result.success();
|
|
@@ -155,6 +162,7 @@ public class InitServiceImpl implements InitService {
|
|
|
|
|
|
/**
|
|
|
* 需要控制点,才能完成以下操作
|
|
|
+ * 重新输入控制点时, 把相应数据删除, 重新初始化
|
|
|
*
|
|
|
*
|
|
|
* @param sceneCode
|
|
@@ -163,10 +171,16 @@ public class InitServiceImpl implements InitService {
|
|
|
public void initDataStep2(String sceneCode){
|
|
|
|
|
|
Optional<InitEntity> optional = initMapper.findById(sceneCode);
|
|
|
- InitEntity init = optional.get();
|
|
|
- if (init.getStatus() !=0) {
|
|
|
- throw new BaseRuntimeException("数据初始化失败");
|
|
|
+ if (!optional.isPresent()){
|
|
|
+ throw new BaseRuntimeException(MsgCode.e3001,"此场景的数据初始化不存在");
|
|
|
}
|
|
|
+ InitEntity init = optional.get();
|
|
|
+// if (init.getStatus() !=0) {
|
|
|
+// throw new BaseRuntimeException("数据初始化失败");
|
|
|
+// }
|
|
|
+
|
|
|
+ // 输入控制点,需要删除旧数据,重新初始化
|
|
|
+ removeInitDataStep2(sceneCode);
|
|
|
|
|
|
String path = init.getPath();
|
|
|
String laserDataPath = path + "/laserData";
|
|
@@ -200,31 +214,32 @@ public class InitServiceImpl implements InitService {
|
|
|
|
|
|
|
|
|
/**
|
|
|
+ * 输入控制点,需要把相关数据从新初始化
|
|
|
+ * @param sceneCode
|
|
|
+ */
|
|
|
+ private void removeInitDataStep2(String sceneCode){
|
|
|
+ filterService.remove(sceneCode);
|
|
|
+ specialPointService.remove(sceneCode);
|
|
|
+ configService.remove(sceneCode);
|
|
|
+ dataSetService.remove(sceneCode);
|
|
|
+ log.info("删除initDataStep2数据完成");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* 重算场景
|
|
|
* @param sceneCode
|
|
|
* @return
|
|
|
*/
|
|
|
@Override
|
|
|
public Result initRecount(String sceneCode) {
|
|
|
- InitEntity entity = this.findById(sceneCode);
|
|
|
|
|
|
// 删除旧数据
|
|
|
this.initRemove(sceneCode);
|
|
|
|
|
|
|
|
|
- // 重新初始化数据
|
|
|
- // 处理一下地址
|
|
|
- String path = entity.getPath();
|
|
|
-// path = path.replaceAll("/laserData", "");
|
|
|
- log.info("path: {}", path);
|
|
|
- this.initData(sceneCode, path, null);
|
|
|
+ // 重新初始化数据, 地址在里面处理
|
|
|
+ this.initData(sceneCode, null, "recount");
|
|
|
|
|
|
- // 更新重算
|
|
|
- Integer recount = entity.getRecount();
|
|
|
- recount = recount == null ? 1 : recount;
|
|
|
- entity.setRecount(recount);
|
|
|
- entity.setUpdateTime(LocalDateTime.now());
|
|
|
- initMapper.save(entity);
|
|
|
|
|
|
// 记录重算日志
|
|
|
RecountInfoEntity infoEntity = new RecountInfoEntity();
|
|
@@ -346,11 +361,12 @@ public class InitServiceImpl implements InitService {
|
|
|
*/
|
|
|
private void processCould(String sceneCode, String path, ControlPointEntity dto){
|
|
|
path = path + "/webcloud/cloud.js";
|
|
|
- // 处理原点,将原点坐标转为坐标
|
|
|
+ // 处理原点,将原点坐标转为坐标, 转换后的原点只有经纬度,没有高度, 高度现在默认是0
|
|
|
double[] doubles = ModifyCloud.convertFromOrigin(dto);
|
|
|
- Double[] origin = {doubles[0] ,doubles[1]};
|
|
|
- // 将数据保存到db
|
|
|
- saveSpecialPoint(sceneCode, TypeConstant.POI_ORIGIN, origin);
|
|
|
+ // 2021-08-4 原点默认 z:0
|
|
|
+ Double[] gpsOrigin = {doubles[0] ,doubles[1], 0.0};
|
|
|
+ // 将数据保存到db, dateSet数据location使用
|
|
|
+ saveSpecialPoint(sceneCode, TypeConstant.POI_ORIGIN, null, gpsOrigin);
|
|
|
log.info("原点保存成功");
|
|
|
|
|
|
try {
|
|
@@ -360,26 +376,44 @@ public class InitServiceImpl implements InitService {
|
|
|
cn.hutool.core.io.FileUtil.writeUtf8String(info.toString(), path);
|
|
|
log.info("新的cloud.js写入完成:{}", path);
|
|
|
|
|
|
- // 将boundingbox坐标转换成gis坐标, site_model需要
|
|
|
+ /**
|
|
|
+ * 将boundingBox坐标转换成gis坐标, site_model需要
|
|
|
+ * boundingBox:虚拟点坐标,存特殊点, dataSet数据要使用
|
|
|
+ */
|
|
|
JSONObject boundingBox = ModifyCloud.getBoundingBox(info);
|
|
|
- Double minZ = boundingBox.getDouble("minZ");
|
|
|
+ Double maxX = boundingBox.getDouble("maxX");
|
|
|
+ Double maxY = boundingBox.getDouble("maxY");
|
|
|
Double maxZ = boundingBox.getDouble("maxZ");
|
|
|
|
|
|
+ Double minX = boundingBox.getDouble("minX");
|
|
|
+ Double minY = boundingBox.getDouble("minY");
|
|
|
+ Double minZ = boundingBox.getDouble("minZ");
|
|
|
+
|
|
|
+ Double centreX = boundingBox.getDouble("centreX");
|
|
|
+ Double centreY = boundingBox.getDouble("centreY");
|
|
|
+ Double centreZ = boundingBox.getDouble("centreZ");
|
|
|
+
|
|
|
+
|
|
|
+ // 虚拟点坐标(四维看看坐标)
|
|
|
+ Double[] ageMax = {maxX,maxY,maxZ};
|
|
|
+ Double[] ageMin = {minX,minY,minZ};
|
|
|
+ Double[] ageCentre = {centreX,centreY,centreZ};
|
|
|
+
|
|
|
JSONObject resJson = ModifyCloud.convertFromBoundingBox(boundingBox, dto);
|
|
|
|
|
|
- Double[] max = getKey(resJson, "max");
|
|
|
- Double[] min = getKey(resJson, "min");
|
|
|
- Double[] centre = getKey(resJson, "centre");
|
|
|
+ Double[] gpsMax = getKey(resJson, "max");
|
|
|
+ Double[] gpsMin = getKey(resJson, "min");
|
|
|
+ Double[] gpsCentre = getKey(resJson, "centre");
|
|
|
|
|
|
// 将数据保存到db
|
|
|
- saveSpecialPoint(sceneCode, TypeConstant.POI_BOUNDINGBOX_MAX, max);
|
|
|
- saveSpecialPoint(sceneCode, TypeConstant.POI_BOUNDINGBOX_MIN, min);
|
|
|
- saveSpecialPoint(sceneCode, TypeConstant.POI_CENTRE, centre);
|
|
|
+ saveSpecialPoint(sceneCode, TypeConstant.POI_BOUNDINGBOX_MAX, ageMax, gpsMax);
|
|
|
+ saveSpecialPoint(sceneCode, TypeConstant.POI_BOUNDINGBOX_MIN, ageMin, gpsMin);
|
|
|
+ saveSpecialPoint(sceneCode, TypeConstant.POI_CENTRE, ageCentre, gpsCentre);
|
|
|
log.info("max、min、中心点保存成功");
|
|
|
|
|
|
|
|
|
// 创建sitModel
|
|
|
- createSiteModel(sceneCode, max, min, centre, maxZ, minZ);
|
|
|
+ createSiteModel(sceneCode, gpsMax, gpsMin, gpsCentre, maxZ, minZ);
|
|
|
|
|
|
} catch (IOException e) {
|
|
|
e.printStackTrace();
|
|
@@ -473,15 +507,16 @@ public class InitServiceImpl implements InitService {
|
|
|
* 保存特质点
|
|
|
* @param sceneCode 场景码
|
|
|
* @param poiKey key
|
|
|
- * @param poi 特殊点
|
|
|
+ * @param agePoi 虚拟点坐标(四维看看坐标)
|
|
|
*/
|
|
|
- private void saveSpecialPoint(String sceneCode, String poiKey, Double[] poi){
|
|
|
+ private void saveSpecialPoint(String sceneCode, String poiKey, Double[] agePoi, Double[] gpsPoi){
|
|
|
SpecialPointEntity entity = new SpecialPointEntity();
|
|
|
entity.setId(SnowFlakeUUidUtils.getUuid("SP"));
|
|
|
entity.setUpdateTime(LocalDateTime.now());
|
|
|
entity.setSceneCode(sceneCode);
|
|
|
entity.setPoiKey(poiKey);
|
|
|
- entity.setPoi(poi);
|
|
|
+ entity.setPoi(agePoi);
|
|
|
+ entity.setGpsPoi(gpsPoi);
|
|
|
specialPointService.save(entity);
|
|
|
}
|
|
|
|
|
@@ -526,18 +561,40 @@ public class InitServiceImpl implements InitService {
|
|
|
}
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
+ * 初始化DataSet
|
|
|
+ * location: 原点坐标(特殊点表)
|
|
|
+ * bounding_box_max:(特殊点表)
|
|
|
+ * bounding_box_min:(特殊点表)
|
|
|
+ * @param sceneCode
|
|
|
+ */
|
|
|
private void createDataSet(String sceneCode){
|
|
|
DataSetEntity entity = new DataSetEntity();
|
|
|
entity.setId(sceneCode);
|
|
|
entity.setUpdateTime(LocalDateTime.now());
|
|
|
// 设置原点坐标,通过场景码查询特殊点表的原点
|
|
|
- SpecialPointEntity sp = specialPointService.findBySceneCodeAndPoiKey(sceneCode, TypeConstant.POI_ORIGIN);
|
|
|
- if (sp == null) {
|
|
|
- throw new BaseRuntimeException(MsgCode.e3001, "没有找到原点坐标");
|
|
|
+// SpecialPointEntity sp = specialPointService.findBySceneCodeAndPoiKey(sceneCode, TypeConstant.POI_ORIGIN);
|
|
|
+ List<SpecialPointEntity> spList = specialPointService.findBySceneCode(sceneCode);
|
|
|
+ // 正常是5条记录: db.getCollection('t_special_point').find({"sceneCode":"t97"})
|
|
|
+ if (spList.size() != 5) {
|
|
|
+ throw new BaseRuntimeException(MsgCode.e3001, "特殊点表坐标异常");
|
|
|
}
|
|
|
- Double[] poi = sp.getPoi();
|
|
|
-// JSONObject dataSet = ModifyDataSets.createDataSet(poi);
|
|
|
- DataSetPo po = ModifyDataSets.createDataSetPo(poi);
|
|
|
+
|
|
|
+// List<String> poiKey = Arrays.asList(TypeConstant.POI_ORIGIN, TypeConstant.POI_BOUNDINGBOX_MAX, TypeConstant.POI_BOUNDINGBOX_MIN);
|
|
|
+ Map<String, Double[]> map = new HashMap<>();
|
|
|
+ for (SpecialPointEntity sp : spList) {
|
|
|
+ String key = sp.getPoiKey();
|
|
|
+ // 使用虚拟坐标
|
|
|
+ if (TypeConstant.POI_BOUNDINGBOX_MAX.equals(key) || TypeConstant.POI_BOUNDINGBOX_MIN.equals(key)) {
|
|
|
+ map.put(key, sp.getPoi());
|
|
|
+ }
|
|
|
+ // 使用gps坐标
|
|
|
+ if (TypeConstant.POI_ORIGIN.equals(key)){
|
|
|
+ map.put(key, sp.getGpsPoi());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ DataSetPo po = ModifyDataSets.createDataSetPo(map);
|
|
|
entity.setData(Arrays.asList(po));
|
|
|
dataSetService.save(entity);
|
|
|
log.info("DataSet数据初始化创建完成");
|
|
@@ -640,12 +697,17 @@ public class InitServiceImpl implements InitService {
|
|
|
|
|
|
@Test
|
|
|
public void test1(){
|
|
|
- List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6);
|
|
|
- Stream<Integer> stream = list.stream();
|
|
|
- stream = stream.filter(p -> p > 3);
|
|
|
+// List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6);
|
|
|
+// Stream<Integer> stream = list.stream();
|
|
|
+// stream = stream.filter(p -> p > 3);
|
|
|
+//
|
|
|
+// stream = stream.filter(p -> p > 5);
|
|
|
+// System.out.println(stream.collect(Collectors.toList()));
|
|
|
|
|
|
- stream = stream.filter(p -> p > 5);
|
|
|
- System.out.println(stream.collect(Collectors.toList()));
|
|
|
+// String[] poiKey = {TypeConstant.POI_ORIGIN, TypeConstant.POI_BOUNDINGBOX_MAX, TypeConstant.POI_BOUNDINGBOX_MIN};
|
|
|
+ List<String> poiKey = Arrays.asList(TypeConstant.POI_ORIGIN, TypeConstant.POI_BOUNDINGBOX_MAX, TypeConstant.POI_BOUNDINGBOX_MIN);
|
|
|
+ // origin
|
|
|
+ System.out.println(poiKey.contains("origi1n"));
|
|
|
|
|
|
}
|
|
|
|