From ead73ffad6be101fdb333f371693a2df3a7f01ee Mon Sep 17 00:00:00 2001 From: supermap123 Date: Thu, 16 May 2024 15:39:10 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BC=BA=E9=99=B7=E4=BF=AE=E6=94=B9=EF=BC=9A45?= =?UTF-8?q?08+=E5=B9=B3=E9=9D=A2=E5=9C=BA=E6=99=AF=E5=AE=9A=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../addData/layer-custom/components/scene.vue | 10 +++++++ .../src/package/layerTree/layerTree.vue | 28 ++++++++++++++++++- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/SuperMap iEarth/src/package/addData/layer-custom/components/scene.vue b/SuperMap iEarth/src/package/addData/layer-custom/components/scene.vue index 1b57082d..8424a4b8 100644 --- a/SuperMap iEarth/src/package/addData/layer-custom/components/scene.vue +++ b/SuperMap iEarth/src/package/addData/layer-custom/components/scene.vue @@ -104,6 +104,16 @@ function openScene() { }); if (window.iEarthConsole) { console.log('scene-layers:', layers); } message.success($t("openSceneSuccess")); + + // 等打开场景相机定位过去后绑到场景中去 + setTimeout(() => { + if(layers && layers.length > 0){ + console.log('layer-fly:',layers); + layers.forEach((layer:any)=>{ + layer.positionCartographic_for_colubus = SuperMap3D.clone(viewer.camera.positionCartographic) || undefined; + }) + } + }, 3000); }); } diff --git a/SuperMap iEarth/src/package/layerTree/layerTree.vue b/SuperMap iEarth/src/package/layerTree/layerTree.vue index f3946eb4..246edb62 100644 --- a/SuperMap iEarth/src/package/layerTree/layerTree.vue +++ b/SuperMap iEarth/src/package/layerTree/layerTree.vue @@ -279,7 +279,33 @@ function setDropdownAction(option: any, key: number) { } else if (key === 1) { if (option.type === "s3m") { let s3mLayer = viewer.scene.layers.find(option.aliasKey); - viewer.flyTo(s3mLayer, { duration: 0 }); + if (viewer.scene.mode == SuperMap3D.SceneMode.SCENE3D) { + if (s3mLayer.lon && s3mLayer.lat) { // 一些特殊的坐标系,比如ISVJ-7839中的4508+平面场景,直接flyTo不行,这里参考IServer里面的预览,使用此种方式来定位 + viewer.scene.camera.setView({ + destination: new SuperMap3D.Cartesian3.fromDegrees(s3mLayer.lon, s3mLayer.lat, 500) + }); + } else { + viewer.flyTo(s3mLayer, { duration: 0 }); + } + } else if (viewer.scene.mode == SuperMap3D.SceneMode.COLUMBUS_VIEW) { // 哥伦布视图下可能存在问题,比如ISVJ-7839中,用场景打开,定位就不对了 + if (s3mLayer.positionCartographic_for_colubus) { // 以场景形式打开时,会给图层绑定一个打开后的相机视图定位 + let positionCartographic = s3mLayer.positionCartographic_for_colubus; + let longitude = Number(SuperMap3D.Math.toDegrees(positionCartographic.longitude)); + let latitude = Number(SuperMap3D.Math.toDegrees(positionCartographic.latitude)); + let height = Number(positionCartographic.height); + viewer.scene.camera.setView({ + destination: new SuperMap3D.Cartesian3.fromDegrees(longitude, latitude, height), + }); + } else if (s3mLayer.lon && s3mLayer.lat) { + viewer.scene.camera.setView({ + destination: new SuperMap3D.Cartesian3.fromDegrees(s3mLayer.lon, s3mLayer.lat, 500) + }); + } else { + viewer.flyTo(s3mLayer, { duration: 0 }); + } + } else { + viewer.flyTo(s3mLayer, { duration: 0 }); + } } else if (option.type === "mvt") { let index = String(option.key).split("-")[1]; let mvtLayer = viewer.scene._vectorTileMaps._layerQueue[Number(index)];