فهرست منبع

支持上传b3dm文件,和osgb转换为b3dm

lyhzzz 2 سال پیش
والد
کامیت
186d66ec27

+ 1 - 0
src/main/java/com/fdkankan/fusion/common/FilePath.java

@@ -7,6 +7,7 @@ public class FilePath {
 
     public final static String OBJ_OSS_PATH = "scene_view_data/%s/data/mesh";
     public final static String GLB_OSS_PATH = "fusion/%s/model/glb/%s/mesh.glb";
+    public final static String B3DM_OSS_PATH = "fusion/%s/model/b3dm/%s";
     public final static String VIDEO_OSS_PATH = "fusion/%s/video/%s";
     public final static String File_OSS_PATH = "fusion/%s/file/%s";
     public final static String ICON_OSS_PATH = "fusion/%s/icon/%s";

+ 31 - 1
src/main/java/com/fdkankan/fusion/common/util/FileWriterUtil.java

@@ -1,11 +1,17 @@
 package com.fdkankan.fusion.common.util;
 
+import cn.hutool.core.io.FileUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+
 import java.io.*;
 import java.math.BigDecimal;
 import java.nio.file.Paths;
 import java.nio.file.StandardCopyOption;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import static cn.hutool.core.util.ClassUtil.getClassLoader;
 
@@ -70,13 +76,37 @@ public class FileWriterUtil {
         File[] files = objPathFile.listFiles();
         for (File file1 : files) {
             if(file1.isFile()){
-                if(file1.getName().endsWith(".obj") || file1.getName().endsWith(".las") || file1.getName().endsWith(".ply")){
+                if(file1.getName().endsWith(".obj") || file1.getName().endsWith(".las") || file1.getName().endsWith(".ply")
+                || file1.getName().endsWith(".osgb") || file1.getName().endsWith("b3dm")){
                     fileList.add(file1);
                 }
+//                if(file1.getName().equals("tileset.json")){
+//                    checkB3dmTileset(file1);
+//                }
             }else {
                 getCanRunList(fileList,file1);
             }
         }
     }
 
+    public static Boolean checkB3dmTileset(File jsonFile) {
+        String fileObj = FileUtil.readUtf8String(jsonFile);
+        JSONObject jsonObject = JSONObject.parseObject(fileObj);
+        JSONObject root = jsonObject.getJSONObject("root");
+        JSONArray children = root.getJSONArray("children");
+        for (Object child : children) {
+            JSONObject o = (JSONObject) child;
+            JSONObject content = o.getJSONObject("content");
+            String uri = content.getString("uri");
+            String uriPath = jsonFile.getPath().replace(jsonFile.getName(),"");
+            uriPath = uriPath + uri.replace("./","");
+            File file = new File(uriPath);
+            if(!file.exists()){
+                return false;
+            }
+
+        }
+        return true;
+    }
+
 }

+ 9 - 0
src/main/java/com/fdkankan/fusion/common/util/OBJToGLBUtil.java

@@ -126,4 +126,13 @@ public class OBJToGLBUtil {
         FileWriterUtil.writerJson(mntPathEmt +"/webcloud/","cloud.js",jsonObject.toJSONString());
         return file;
     }
+
+    public static String OsgbToB3dm(File objPathFile) {
+        String dockerPath = FilePath.MNT_BASE_PATH +"b3dm";
+        String cmd = ShellCmd.osgbTob3dmCmd.replaceAll("@path",dockerPath);
+        cmd =cmd.replaceAll("@inputFile",objPathFile.getPath());
+        cmd =cmd.replaceAll("@outputFile",dockerPath + objPathFile.getName());
+        ShellUtil.execCmd(cmd);
+        return dockerPath + objPathFile.getName();
+    }
 }

+ 3 - 0
src/main/java/com/fdkankan/fusion/common/util/ShellCmd.java

@@ -10,4 +10,7 @@ public class ShellCmd {
 	public static final String FYUN_UPLOAD = "sudo bash /opt/ossutil/fyun-upload.sh %s %s /%s %s %s";
 	public static final String FYUN_DOWN = "sudo bash /opt/ossutil/fyun-download.sh %s /%s %s %s %s";
 
+	public static final String osgbTob3dmCmd = "docker run --rm -v " +
+			"@path:@path " +
+			"ubuntu:3dtile 3dtile -f osgb -i @inputFile -o @outputFile";
 }

+ 1 - 4
src/main/java/com/fdkankan/fusion/common/util/UploadToOssUtil.java

@@ -13,10 +13,7 @@ import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.commons.CommonsMultipartFile;
 
 import java.io.*;
-import java.net.FileNameMap;
-import java.net.URL;
-import java.net.URLConnection;
-import java.net.URLDecoder;
+import java.net.*;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;

+ 17 - 1
src/main/java/com/fdkankan/fusion/service/impl/ModelServiceImpl.java

@@ -186,8 +186,24 @@ public class ModelServiceImpl extends ServiceImpl<IModelMapper, Model> implement
                             return;
                         }
                     }
-
                     model.setModelGlbUrl(JSONArray.toJSONString(Arrays.asList(queryPath + glbOssPath)));
+                    String b3dmPath = String.format(FilePath.B3DM_OSS_PATH,environment, model.getModelId());
+                    if(name.contains(".osgb")){
+                        model.setModelDateType("osgb");
+                        model.setModelType("b3dm");
+
+                        String localPath = OBJToGLBUtil.OsgbToB3dm(objPathFile);
+                        ShellUtil.yunUpload(localPath,b3dmPath);
+                        model.setModelGlbUrl((JSONArray.toJSONString(Arrays.asList(queryPath + b3dmPath))));
+                        //FileUtil.del(localPath);
+                    }
+                    if(name.contains(".b3dm")){
+                        model.setModelDateType("b3dm");
+                        model.setModelType("b3dm");
+                        ShellUtil.yunUpload(objPathFile.getPath(),b3dmPath);
+                        model.setModelGlbUrl((JSONArray.toJSONString(Arrays.asList(queryPath + b3dmPath))));
+                    }
+
                     setCreateStatus(model,1);
                     modelService.saveOrUpdate(model);
                     redisUtil.set(RedisKeyUtil.modelUpload+model.getModelId(),"100");

+ 1 - 1
src/main/resources/application.yaml

@@ -25,7 +25,7 @@ mybatis-plus:
 
 forest:
   ## 日志总开关,打开/关闭Forest请求/响应日志(默认为 true)
-  log-enabled: true
+  log-enabled: false
   ## 打开/关闭Forest请求日志(默认为 true)
   log-request: true
   ## 打开/关闭Forest响应状态日志(默认为 true)