|
@@ -46,60 +46,15 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
|
|
|
let { THREE } = Potree.mergeEditStart(dom, mapDom)
|
|
|
let MergeEditor = viewer.modules.MergeEditor
|
|
|
- Potree.settings.unableNavigate = false
|
|
|
+ Potree.settings.unableNavigate = true
|
|
|
+
|
|
|
+ /* Potree.settings.showCesium = !!lonlat
|
|
|
+ Potree.settings.showCesium && buildMap()
|
|
|
+ */
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
|
|
|
- Potree.settings.showCesium = !!lonlat
|
|
|
- if (Potree.settings.showCesium) {
|
|
|
-
|
|
|
- viewer.backgroundOpacity = 0
|
|
|
-
|
|
|
- Cesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI2ZGM2YzY0ZC1kNWE0LTRiYTgtYTkwNS1kYmJiODRjMWUwMmQiLCJpZCI6MjMzMTQ1LCJpYXQiOjE3MjI5OTUwNTB9.niqpkl6xOkQ2KeJjelyDDDydmSGqKXKb5cX2NyxSNAw'
|
|
|
- window.cesiumViewer = new Cesium.Viewer('app', {
|
|
|
- useDefaultRenderLoop: true,
|
|
|
- requestRenderMode: true, //add 只有需要render时才会render,如tile加载完后、镜头移动后
|
|
|
- animation: false,
|
|
|
- baseLayerPicker: false,
|
|
|
- fullscreenButton: false,
|
|
|
- geocoder: false,
|
|
|
- homeButton: false,
|
|
|
- infoBox: false,
|
|
|
- sceneModePicker: false,
|
|
|
- selectionIndicator: false,
|
|
|
- timeline: false,
|
|
|
- navigationHelpButton: false,
|
|
|
- //imageryProvider : Cesium.createOpenStreetMapImageryProvider({url : 'https://a.tile.openstreetmap.org/'}),
|
|
|
- imageryProvider: Cesium.UrlTemplateImageryProvider({ //直接用84坐标,不用转高德
|
|
|
-
|
|
|
- //"https://wprd04.is.autonavi.com/appmaptile?lang=zh_cn&style=7&yrs=m&x=${x}&y=${y}&z=${z}" //
|
|
|
-
|
|
|
-
|
|
|
- //url : 'https://webst0{0-7}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}&token=YOUR_API_KEY',
|
|
|
- url: 'https://wprd04.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}&token=YOUR_API_KEY',
|
|
|
- minimumLevel: 0,
|
|
|
- maximumLevel: 19
|
|
|
- }),
|
|
|
- //高德秘钥版 imageryProvider: new Cesium.AmapImageryProvider({key, mapStyle: 'normal'})
|
|
|
- //报错 401 (Unauthorized) 的方法 https://blog.csdn.net/LBY_XK/article/details/121992641
|
|
|
-
|
|
|
- terrainShadows: Cesium.ShadowMode.DISABLED, //terrain地形
|
|
|
- });
|
|
|
-
|
|
|
-
|
|
|
- //lonlat = [113.595236803415,22.3665168584444]//[113.600356,22.364093]
|
|
|
- Potree.setLonlat(lonlat[0], lonlat[1])
|
|
|
-
|
|
|
- Potree.cesScreenshot = (w,h)=>{
|
|
|
- cesiumViewer.scene.canvas.style.width = w+'px'
|
|
|
- cesiumViewer.scene.canvas.style.height = h+'px'
|
|
|
- cesiumViewer.resize()
|
|
|
- cesiumViewer.render();
|
|
|
- let dataUrl = window.cesiumViewer.scene.canvas.toDataURL('image/png')
|
|
|
- //Potree.Common.downloadFile(dataUrl, 'screenshot.png')
|
|
|
- cesiumViewer.scene.canvas.style.width = ''
|
|
|
- cesiumViewer.scene.canvas.style.height = ''
|
|
|
- return dataUrl
|
|
|
- }
|
|
|
- }
|
|
|
|
|
|
|
|
|
viewer.addEventListener('camera_changed', e => {
|
|
@@ -108,55 +63,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
if (e.viewport.name == 'MainView') {
|
|
|
sceneBus.emit('cameraChange', { x: pos.x, y: pos.y, z: pos.z, rotate: camera.rotation })
|
|
|
|
|
|
- if (Potree.settings.showCesium && Potree.settings.displayMode == 'showPointCloud') {
|
|
|
-
|
|
|
- let pPos = new THREE.Vector3(0, 0, 0).applyMatrix4(camera.matrixWorld);
|
|
|
- let pRight = new THREE.Vector3(600, 0, 0).applyMatrix4(camera.matrixWorld);
|
|
|
- let pUp = new THREE.Vector3(0, 600, 0).applyMatrix4(camera.matrixWorld);
|
|
|
- let pTarget = viewer.scene.view.getPivot();
|
|
|
-
|
|
|
- let toCes = (pos) => {
|
|
|
- let xy = [pos.x, pos.y];
|
|
|
- let height = pos.z;
|
|
|
- let deg = viewer.transform.lonlatToLocal.inverse(xy) // toMap.forward(xy);
|
|
|
- let cPos = Cesium.Cartesian3.fromDegrees(...deg, height);
|
|
|
-
|
|
|
- return cPos;
|
|
|
- };
|
|
|
-
|
|
|
- let cPos = toCes(pPos);
|
|
|
- let cUpTarget = toCes(pUp);
|
|
|
- let cTarget = toCes(pTarget);
|
|
|
-
|
|
|
- let cDir = Cesium.Cartesian3.subtract(cTarget, cPos, new Cesium.Cartesian3());
|
|
|
- let cUp = Cesium.Cartesian3.subtract(cUpTarget, cPos, new Cesium.Cartesian3());
|
|
|
-
|
|
|
- cDir = Cesium.Cartesian3.normalize(cDir, new Cesium.Cartesian3());
|
|
|
- cUp = Cesium.Cartesian3.normalize(cUp, new Cesium.Cartesian3());
|
|
|
-
|
|
|
- cesiumViewer.camera.setView({
|
|
|
- destination: cPos,
|
|
|
- orientation: {
|
|
|
- direction: cDir,
|
|
|
- up: cUp
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- let aspect = viewer.scene.getActiveCamera().aspect;
|
|
|
- if (aspect < 1) {
|
|
|
- let fovy = Math.PI * (viewer.scene.getActiveCamera().fov / 180);
|
|
|
- cesiumViewer.camera.frustum.fov = fovy;
|
|
|
- } else {
|
|
|
- let fovy = Math.PI * (viewer.scene.getActiveCamera().fov / 180);
|
|
|
- let fovx = Math.atan(Math.tan(0.5 * fovy) * aspect) * 2
|
|
|
- cesiumViewer.camera.frustum.fov = fovx;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- cesiumViewer.render(); //立即render,否则会和点云render不同步而错位
|
|
|
- }
|
|
|
+ updateMap()
|
|
|
}
|
|
|
})
|
|
|
|
|
@@ -189,8 +96,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
})
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
viewer.images360.addEventListener('endChangeMode',(e)=>{
|
|
|
sceneBus.emit('modeChange', {mode: e.mode == 'showPanos' ? 'pano' : 'fuse', model : e.mode == 'showPanos' && viewer.images360.currentPano.pointcloud.result_} )
|
|
|
|
|
@@ -638,9 +544,15 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
MergeEditor.ground.material.uniforms.uColor.value.set(color)
|
|
|
//MergeEditor.ground.children[0].material.color.set(color)
|
|
|
}
|
|
|
+ viewer.dispatchEvent('content_changed')
|
|
|
+
|
|
|
+
|
|
|
if(type == 'map'){
|
|
|
MergeEditor.setGroundPlaneImg(null)
|
|
|
Potree.settings.showCesium = true
|
|
|
+ buildMap()
|
|
|
+ viewer.backgroundOpacity = 0
|
|
|
+ return
|
|
|
}else{
|
|
|
Potree.settings.showCesium = false
|
|
|
}
|
|
@@ -670,7 +582,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
}
|
|
|
|
|
|
|
|
|
- viewer.dispatchEvent('content_changed')
|
|
|
+
|
|
|
},
|
|
|
switchMapType(type) {
|
|
|
let map = viewer.mapViewer.mapLayer.maps.find(e => e.name == 'map')
|
|
@@ -1395,7 +1307,116 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ function buildMap(){
|
|
|
+ if (Potree.settings.showCesium && !window.cesiumViewer) {
|
|
|
+
|
|
|
+ viewer.backgroundOpacity = 0
|
|
|
+
|
|
|
+ Cesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI2ZGM2YzY0ZC1kNWE0LTRiYTgtYTkwNS1kYmJiODRjMWUwMmQiLCJpZCI6MjMzMTQ1LCJpYXQiOjE3MjI5OTUwNTB9.niqpkl6xOkQ2KeJjelyDDDydmSGqKXKb5cX2NyxSNAw'
|
|
|
+ window.cesiumViewer = new Cesium.Viewer('app', {
|
|
|
+ useDefaultRenderLoop: true,
|
|
|
+ requestRenderMode: true, //add 只有需要render时才会render,如tile加载完后、镜头移动后
|
|
|
+ animation: false,
|
|
|
+ baseLayerPicker: false,
|
|
|
+ fullscreenButton: false,
|
|
|
+ geocoder: false,
|
|
|
+ homeButton: false,
|
|
|
+ infoBox: false,
|
|
|
+ sceneModePicker: false,
|
|
|
+ selectionIndicator: false,
|
|
|
+ timeline: false,
|
|
|
+ navigationHelpButton: false,
|
|
|
+ //imageryProvider : Cesium.createOpenStreetMapImageryProvider({url : 'https://a.tile.openstreetmap.org/'}),
|
|
|
+ imageryProvider: Cesium.UrlTemplateImageryProvider({ //直接用84坐标,不用转高德
|
|
|
+
|
|
|
+ //"https://wprd04.is.autonavi.com/appmaptile?lang=zh_cn&style=7&yrs=m&x=${x}&y=${y}&z=${z}" //
|
|
|
+
|
|
|
+
|
|
|
+ //url : 'https://webst0{0-7}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}&token=YOUR_API_KEY',
|
|
|
+ url: 'https://wprd04.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}&token=YOUR_API_KEY',
|
|
|
+ minimumLevel: 0,
|
|
|
+ maximumLevel: 19
|
|
|
+ }),
|
|
|
+ //高德秘钥版 imageryProvider: new Cesium.AmapImageryProvider({key, mapStyle: 'normal'})
|
|
|
+ //报错 401 (Unauthorized) 的方法 https://blog.csdn.net/LBY_XK/article/details/121992641
|
|
|
+
|
|
|
+ terrainShadows: Cesium.ShadowMode.DISABLED, //terrain地形
|
|
|
+ });
|
|
|
+
|
|
|
+
|
|
|
+ //lonlat = [113.595236803415,22.3665168584444]//[113.600356,22.364093]
|
|
|
+ Potree.setLonlat(lonlat[0], lonlat[1])
|
|
|
+
|
|
|
+ Potree.cesScreenshot = (w,h)=>{
|
|
|
+ cesiumViewer.scene.canvas.style.width = w+'px'
|
|
|
+ cesiumViewer.scene.canvas.style.height = h+'px'
|
|
|
+ cesiumViewer.resize()
|
|
|
+ cesiumViewer.render();
|
|
|
+ let dataUrl = window.cesiumViewer.scene.canvas.toDataURL('image/png')
|
|
|
+ //Potree.Common.downloadFile(dataUrl, 'screenshot.png')
|
|
|
+ cesiumViewer.scene.canvas.style.width = ''
|
|
|
+ cesiumViewer.scene.canvas.style.height = ''
|
|
|
+ return dataUrl
|
|
|
+ }
|
|
|
+ }
|
|
|
+ updateMap()
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ function updateMap(){
|
|
|
+ if (Potree.settings.showCesium && Potree.settings.displayMode == 'showPointCloud') {
|
|
|
+ let camera = viewer.mainViewport.camera
|
|
|
+ let pPos = new THREE.Vector3(0, 0, 0).applyMatrix4(camera.matrixWorld);
|
|
|
+ let pRight = new THREE.Vector3(600, 0, 0).applyMatrix4(camera.matrixWorld);
|
|
|
+ let pUp = new THREE.Vector3(0, 600, 0).applyMatrix4(camera.matrixWorld);
|
|
|
+ let pTarget = viewer.scene.view.getPivot();
|
|
|
+
|
|
|
+ let toCes = (pos) => {
|
|
|
+ let xy = [pos.x, pos.y];
|
|
|
+ let height = pos.z;
|
|
|
+ let deg = viewer.transform.lonlatToLocal.inverse(xy) // toMap.forward(xy);
|
|
|
+ let cPos = Cesium.Cartesian3.fromDegrees(...deg, height);
|
|
|
|
|
|
+ return cPos;
|
|
|
+ };
|
|
|
+
|
|
|
+ let cPos = toCes(pPos);
|
|
|
+ let cUpTarget = toCes(pUp);
|
|
|
+ let cTarget = toCes(pTarget);
|
|
|
+
|
|
|
+ let cDir = Cesium.Cartesian3.subtract(cTarget, cPos, new Cesium.Cartesian3());
|
|
|
+ let cUp = Cesium.Cartesian3.subtract(cUpTarget, cPos, new Cesium.Cartesian3());
|
|
|
+
|
|
|
+ cDir = Cesium.Cartesian3.normalize(cDir, new Cesium.Cartesian3());
|
|
|
+ cUp = Cesium.Cartesian3.normalize(cUp, new Cesium.Cartesian3());
|
|
|
+
|
|
|
+ cesiumViewer.camera.setView({
|
|
|
+ destination: cPos,
|
|
|
+ orientation: {
|
|
|
+ direction: cDir,
|
|
|
+ up: cUp
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ let aspect = viewer.scene.getActiveCamera().aspect;
|
|
|
+ if (aspect < 1) {
|
|
|
+ let fovy = Math.PI * (viewer.scene.getActiveCamera().fov / 180);
|
|
|
+ cesiumViewer.camera.frustum.fov = fovy;
|
|
|
+ } else {
|
|
|
+ let fovy = Math.PI * (viewer.scene.getActiveCamera().fov / 180);
|
|
|
+ let fovx = Math.atan(Math.tan(0.5 * fovy) * aspect) * 2
|
|
|
+ cesiumViewer.camera.frustum.fov = fovx;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ cesiumViewer.render(); //立即render,否则会和点云render不同步而错位
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
return sdk
|
|
|
}
|
|
@@ -1403,6 +1424,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
|
/*
|