Selaa lähdekoodia

fix: 江门地图不准 +个tilingScheme

xzw 7 kuukautta sitten
vanhempi
commit
0f912d564a
1 muutettua tiedostoa jossa 54 lisäystä ja 50 poistoa
  1. 54 50
      src/sdk/cover/index.js

+ 54 - 50
src/sdk/cover/index.js

@@ -3,7 +3,6 @@ import libTransform from 'coordtransform';
 import axios from 'axios' //{ axios } from '@/api'
 
 
-const Id_noIntersect = -100 //path绘制在地图上的点,modelId传这个值,勿更改
 let requestLoadCount = 0
 let maxLoadingCount = 2; //正在加载模型的最大数目
 //0看看,1看见,2深时,3用户上传三维模型,4深时mesh,5深光点云,6深光mesh
@@ -12,7 +11,7 @@ const ModelTypes = {
     1 : {name:'看见(双目转台)', panos4dkk:true, rot90:true},
     2 : {name:'深时', },
     3 : {name:'用户上传三维模型'},
-    4 : {name:'深时mesh(激光转台)',panos4dkk:true, rot90:true},//3dtiles
+    4 : {name:'深时mesh(激光转台)',panos4dkk:true, rot90:true},//3dtiles or obj
     5 : {name:'深光点云' },
     6 : {name:'深光mesh',panos4dkk:true, rot90:true},//3dtiles
     7 : {name:'圆周率相机' },//圆周率相机场景
@@ -20,6 +19,7 @@ const ModelTypes = {
 let cesAspect , cesImageryProvider
 
 
+const Id_noIntersect = -100 //path绘制在地图上的点,modelId传这个值,勿更改
 let isValidPoint = (modelId)=>{//所存的modelId没被删或者它本身不在模型上
     return modelId == Id_noIntersect || viewer.objs.children.concat(viewer.scene.pointclouds).some(e=>e.dataset_id == modelId )
 }
@@ -169,14 +169,14 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
         var pos = camera.position
         if (e.viewport.name == 'MainView' ) {
             sceneBus.emit('cameraChange', { x: pos.x, y: pos.y, z: pos.z, rotate: camera.rotation })
-  
-        }
-
-        updateMap() 
-        Potree.Common.intervalTool.isWaiting('updateCamNear', ()=>{ 
-            updateCamNear()  
-        }, 1000)
-        updateCamFar()        
+            Potree.Common.intervalTool.isWaiting('updateCamNear', ()=>{ 
+                updateCamNear()  
+            }, 1000)
+            updateCamFar()    
+        } 
+        if (e.viewport.name == 'MainView' || e.viewport.name == 'top' ) {
+            updateMap() 
+        }        
     })
     
      
@@ -777,7 +777,8 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
                 url,  
                 crossOrigin: 'anonymous',  
                 minimumLevel: 0,
-                maximumLevel 
+                maximumLevel,
+                tilingScheme: new AmapMercatorTilingScheme(),  //修改投影,从84->高德
             }) 
             if(Potree.settings.showCesium){
                 cesiumViewer.imageryLayers.removeAll();
@@ -884,11 +885,11 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
             //console.log('--addModel',props)
             props.isFirstLoad = isLocal ? props.bottom == void 0 : (props.isDynamicAdded || props.mode == 'single')  // 在编辑时用户添加的 或 展示单个模型 (props.mode='single'模型展示页, props.mode='many'融合页)
             if (props.opacity == void 0) props.opacity = 1
-            if (props.type == 'obj') props.type = 'glb'
+            //if (props.type == 'obj') props.type = 'glb'
             props.scale /= 100
             
             let getBaseRotation = () => {
-                if(ModelTypes[props.fromType]?.rot90 && props.type != 'glb'){
+                if(ModelTypes[props.fromType]?.rot90 && props.type != 'obj'){
                     return new THREE.Euler(Math.PI / 2, 0, 0)
                 } else return new THREE.Euler(0, 0, 0)
             }
@@ -1929,43 +1930,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
             Cesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI2ZGM2YzY0ZC1kNWE0LTRiYTgtYTkwNS1kYmJiODRjMWUwMmQiLCJpZCI6MjMzMTQ1LCJpYXQiOjE3MjI5OTUwNTB9.niqpkl6xOkQ2KeJjelyDDDydmSGqKXKb5cX2NyxSNAw'
             
 
-            class AmapMercatorTilingScheme extends Cesium.WebMercatorTilingScheme {
-                constructor(options) {
-                    super(options)
-                    let projection = new Cesium.WebMercatorProjection()
-                    this._projection.project = function(cartographic, result) {
-                        //WGS84转GCJ02坐标
-                        /* result = gcoord.transform([
-                            Cesium.Math.toDegrees(cartographic.longitude), 
-                            Cesium.Math.toDegrees(cartographic.latitude)
-                          ], gcoord.WGS84, gcoord.GCJ02) */
-
-                        result = AMapWith84__.wgs84ToAMap({
-                            x: Cesium.Math.toDegrees(cartographic.longitude),
-                            y: Cesium.Math.toDegrees(cartographic.latitude)
-                        })
-
-                        result = projection.project(new Cesium.Cartographic(Cesium.Math.toRadians(result.x),Cesium.Math.toRadians(result.y)))
-                        return new Cesium.Cartesian2(result.x,result.y)
-                    }
-                    this._projection.unproject = function(cartesian, result) {
-                        let cartographic = projection.unproject(cartesian)
-                        //GCJ02转WGS84坐标
-                        /* result = gcoord.transform([
-                            Cesium.Math.toDegrees(cartographic.longitude), 
-                            Cesium.Math.toDegrees(cartographic.latitude)
-                          ], gcoord.GCJ02, gcoord.WGS84) */
-
-                        result = AMapWith84__.aMapToWgs84({
-                            x: Cesium.Math.toDegrees(cartographic.longitude),
-                            y: Cesium.Math.toDegrees(cartographic.latitude)
-                        })
-
-                        return new Cesium.Cartographic(Cesium.Math.toRadians(result.x),Cesium.Math.toRadians(result.y))
-                    }
-                }
-            }//see : https://blog.csdn.net/hongxianqiang/article/details/140541555  cesium加载高德地图并纠偏
-
+            
  
             window.cesiumViewer = new Cesium.Viewer('app', {
                 useDefaultRenderLoop: true,
@@ -2173,7 +2138,46 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
             cesiumViewer.render(); //立即render,否则会和点云render不同步而错位
         }//cesium测试沙盒 https://sandcastle.cesium.com/
     }
+    
+    
+    
+    class AmapMercatorTilingScheme extends Cesium.WebMercatorTilingScheme {
+        constructor(options) {
+            super(options)
+            let projection = new Cesium.WebMercatorProjection()
+            this._projection.project = function(cartographic, result) {
+                //WGS84转GCJ02坐标
+                /* result = gcoord.transform([
+                    Cesium.Math.toDegrees(cartographic.longitude), 
+                    Cesium.Math.toDegrees(cartographic.latitude)
+                  ], gcoord.WGS84, gcoord.GCJ02) */
+
+                result = AMapWith84__.wgs84ToAMap({
+                    x: Cesium.Math.toDegrees(cartographic.longitude),
+                    y: Cesium.Math.toDegrees(cartographic.latitude)
+                })
 
+                result = projection.project(new Cesium.Cartographic(Cesium.Math.toRadians(result.x),Cesium.Math.toRadians(result.y)))
+                return new Cesium.Cartesian2(result.x,result.y)
+            }
+            this._projection.unproject = function(cartesian, result) {
+                let cartographic = projection.unproject(cartesian)
+                //GCJ02转WGS84坐标
+                /* result = gcoord.transform([
+                    Cesium.Math.toDegrees(cartographic.longitude), 
+                    Cesium.Math.toDegrees(cartographic.latitude)
+                  ], gcoord.GCJ02, gcoord.WGS84) */
+
+                result = AMapWith84__.aMapToWgs84({
+                    x: Cesium.Math.toDegrees(cartographic.longitude),
+                    y: Cesium.Math.toDegrees(cartographic.latitude)
+                })
+
+                return new Cesium.Cartographic(Cesium.Math.toRadians(result.x),Cesium.Math.toRadians(result.y))
+            }
+        }
+    }//see : https://blog.csdn.net/hongxianqiang/article/details/140541555  cesium加载高德地图并纠偏
+       
     return sdk
 }