|
@@ -11,23 +11,12 @@ import "./potree.shim.js"
|
|
|
|
|
|
|
|
|
|
export function start(dom, mapDom, number ){ //t-Zvd3w0m
|
|
export function start(dom, mapDom, number ){ //t-Zvd3w0m
|
|
- /* {
|
|
|
|
- let obj = JSON.parse(localStorage.getItem('setting'))
|
|
|
|
- for(let i in obj){
|
|
|
|
- console.log(i + ': ' + obj[i])
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- */
|
|
|
|
- Potree.settings.number = number || 't-o5YMR13'// 't-iksBApb'// 写在viewer前
|
|
|
|
-
|
|
|
|
|
|
|
|
- if(browser.urlHasValue('google'))Potree.settings.mapCompany = 'google'
|
|
|
|
|
|
+ Potree.settings.number = number || 't-o5YMR13'// 't-iksBApb'// 写在viewer前
|
|
|
|
+
|
|
if(browser.urlHasValue('timing'))Potree.measureTimings = 1
|
|
if(browser.urlHasValue('timing'))Potree.measureTimings = 1
|
|
|
|
|
|
- let viewer = new Potree.Viewer(dom , mapDom);
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
|
|
+ let viewer = new Potree.Viewer(dom , mapDom);
|
|
viewer.setEDLEnabled(false);
|
|
viewer.setEDLEnabled(false);
|
|
viewer.setFOV(Potree.config.view.fov);
|
|
viewer.setFOV(Potree.config.view.fov);
|
|
|
|
|
|
@@ -49,187 +38,90 @@ export function start(dom, mapDom, number ){ //t-Zvd3w0m
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- Potree.loadDatasetsCallback = function(data, ifReload){
|
|
|
|
- if(!data || data.length == 0)return console.error('getDataSet加载的数据为空')
|
|
|
|
-
|
|
|
|
- Potree.datasetData = data
|
|
|
|
- viewer.transform = null
|
|
|
|
- var datasetLength = data.length
|
|
|
|
- var pointcloudLoaded = 0
|
|
|
|
- var panosLoaded = 0
|
|
|
|
- var pointcloudLoadDone = function(){//点云cloud.js加载完毕后
|
|
|
|
- }
|
|
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ var cloudPath = //`${Potree.settings.urls.prefix1}/${dataset.webBin}` //webBin添加原因:每次裁剪之类的操作会换路径,因为oss文件缓存太严重,更新慢
|
|
|
|
+ `${Potree.settings.urls.prefix1}/webcloud/cloud.js`
|
|
|
|
|
|
|
|
|
|
- var panosLoadDone = function(){
|
|
|
|
-
|
|
|
|
- viewer.images360.loadDone()
|
|
|
|
- viewer.scene.add360Images(viewer.images360);
|
|
|
|
- viewer.mapViewer.addListener(viewer.images360)
|
|
|
|
-
|
|
|
|
- viewer.updateModelBound() //需等pano加载完
|
|
|
|
-
|
|
|
|
- let {boundSize, center} = viewer.bound
|
|
|
|
-
|
|
|
|
|
|
+ var timeStamp = 0 //var timeStamp = dataset.updateTime ? dataset.updateTime.replace(/[^0-9]/ig,'') : ''; //每重算一次后缀随updateTime更新一次
|
|
|
|
+
|
|
|
|
+ Potree.loadPointCloud(cloudPath, timeStamp, e => {
|
|
|
|
+ let scene = viewer.scene;
|
|
|
|
+ let pointcloud = e.pointcloud;
|
|
|
|
+ let config = Potree.config.material
|
|
|
|
+ let material = pointcloud.material;
|
|
|
|
|
|
- if(!Potree.settings.isOfficial){
|
|
|
|
- Potree.loadMapEntity('all') //加载floorplan
|
|
|
|
- }
|
|
|
|
|
|
+ //pointcloud.datasetData = dataset
|
|
|
|
+ //pointcloud.dataset_id = dataset.id;//供漫游点找到属于的dataset点云
|
|
|
|
+ pointcloud.hasDepthTex = Potree.settings.useDepthTex && (!!dataset.has_depth || Potree.settings.isLocalhost && Potree.settings.number == 'SS-t-7DUfWAUZ3V') //test
|
|
|
|
+ material.minSize = config.minSize
|
|
|
|
+ material.maxSize = config.maxSize
|
|
|
|
+ material.pointSizeType =/* Potree.settings.isOfficial ? */ config.pointSizeType /* : 'ADAPTIVE' */ //Potree.PointSizeType[config.pointSizeType]//Potree.PointSizeType.ADAPTIVE;//FIXED
|
|
|
|
+ pointcloud.changePointSize(config.realPointSize) //material.size = config.pointSize;
|
|
|
|
+ pointcloud.changePointOpacity(1)
|
|
|
|
+ material.shape = Potree.PointShape.SQUARE;
|
|
|
|
+ //pointcloud.color = pointcloud.material.color = dataset.color
|
|
|
|
+ pointcloud.timeStamp = timeStamp
|
|
|
|
+ //transformPointcloud(pointcloud,dataset)
|
|
|
|
+ scene.addPointCloud(pointcloud);
|
|
|
|
|
|
-
|
|
|
|
- if(!ifReload){
|
|
|
|
- viewer.dispatchEvent({type:'loadPointCloudDone'})
|
|
|
|
-
|
|
|
|
- if(!Potree.settings.UserPointDensity){
|
|
|
|
- Potree.settings.UserPointDensity = 'high'//'middle'
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- Potree.Log('loadPointCloudDone 点云加载完毕', {font:[null, 10]})
|
|
|
|
- }
|
|
|
|
|
|
|
|
-
|
|
|
|
- {//初始位置
|
|
|
|
-
|
|
|
|
- var panoId = browser.urlHasValue('pano',true);
|
|
|
|
- if(panoId !== ''){
|
|
|
|
- var pos
|
|
|
|
- var pano = viewer.images360.panos.find(e=>e.id==panoId);
|
|
|
|
- if(pano){
|
|
|
|
- viewer.images360.focusPano({
|
|
|
|
- pano,
|
|
|
|
- duration:0,
|
|
|
|
- callback:()=>{/* Potree.settings.displayMode = 'showPanos' */}
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
- }else{//考虑到多数据集距离很远,或者像隧道那种场景,要使视野范围内一定能看到点云,最好初始点设置在漫游点上
|
|
|
|
-
|
|
|
|
- let {boundSize, center} = viewer.bound
|
|
|
|
-
|
|
|
|
- let pano = viewer.images360.findNearestPano(center)
|
|
|
|
-
|
|
|
|
- pano && viewer.images360.flyToPano({
|
|
|
|
- pano, duration:0,
|
|
|
|
- target : viewer.images360.bound.center.setZ(pano.position.z) //平视中心区域(但也不能保证这个方向一定能看到点云密集区,如果在边缘的话)
|
|
|
|
- })
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- viewer.addVideo()//addFire()
|
|
|
|
-
|
|
|
|
- console.log('allLoaded')
|
|
|
|
- viewer.dispatchEvent('allLoaded')
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /* var transformPointcloud = (pointcloud, dataset)=>{
|
|
|
|
- var locationLonLat = dataset.location.slice(0,2)
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- //当只有一个dataset时,无论如何transform 点云和漫游点都能对应上。
|
|
|
|
- var location = viewer.transform.lonlatToLocal.forward(locationLonLat) //transform.inverse()
|
|
|
|
- //初始化位置
|
|
|
|
-
|
|
|
|
- viewer.sidebar && viewer.sidebar.addAlignmentButton(pointcloud)
|
|
|
|
|
|
|
|
- pointcloud.updateMatrixWorld()
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- Potree.Log(`点云${pointcloud.dataset_id}(${pointcloud.name})旋转值:${pointcloud.orientationUser}, 位置${math.toPrecision(pointcloud.translateUser.toArray(),3)}, 经纬度 ${locationLonLat}, spacing ${pointcloud.material.spacing}`, {font:[null, 13]} )
|
|
|
|
-
|
|
|
|
-
|
|
|
|
|
|
|
|
- } */
|
|
|
|
-
|
|
|
|
- if(!Potree.settings.originDatasetId)Potree.settings.originDatasetId = data[0].id
|
|
|
|
- var originDataset = data.find(e=>e.id == Potree.settings.originDatasetId)
|
|
|
|
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- data.forEach((dataset,index)=>{
|
|
|
|
- if(!ifReload){
|
|
|
|
- var datasetCode = dataset.sceneCode || dataset.name //对应4dkk的场景码
|
|
|
|
- var cloudPath = //`${Potree.settings.urls.prefix1}/${dataset.webBin}` //webBin添加原因:每次裁剪之类的操作会换路径,因为oss文件缓存太严重,更新慢
|
|
|
|
- `${Potree.settings.urls.prefix1}/webcloud/cloud.js`
|
|
|
|
-
|
|
|
|
|
|
+ Potree.loadPanos( (data) => {
|
|
|
|
+ //console.log('loadPanos',dataset.sceneCode, dataset.id, data)
|
|
|
|
+ viewer.images360.addPanoData(data )
|
|
|
|
+ viewer.images360.loadDone()
|
|
|
|
+ viewer.scene.add360Images(viewer.images360);
|
|
|
|
+
|
|
|
|
+ viewer.updateModelBound() //需等pano加载完
|
|
|
|
+
|
|
|
|
+ let {boundSize, center} = viewer.bound
|
|
|
|
|
|
- var timeStamp = dataset.updateTime ? dataset.updateTime.replace(/[^0-9]/ig,'') : ''; //每重算一次后缀随updateTime更新一次
|
|
|
|
- //console.warn(dataset.name, 'timeStamp', timeStamp)
|
|
|
|
- Potree.loadPointCloud(cloudPath, dataset.name ,datasetCode, timeStamp, e => {
|
|
|
|
- let scene = viewer.scene;
|
|
|
|
- let pointcloud = e.pointcloud;
|
|
|
|
- let config = Potree.config.material
|
|
|
|
- let material = pointcloud.material;
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- pointcloud.datasetData = dataset
|
|
|
|
- pointcloud.dataset_id = dataset.id;//供漫游点找到属于的dataset点云
|
|
|
|
- pointcloud.hasDepthTex = Potree.settings.useDepthTex && (!!dataset.has_depth || Potree.settings.isLocalhost && Potree.settings.number == 'SS-t-7DUfWAUZ3V') //test
|
|
|
|
- material.minSize = config.minSize
|
|
|
|
- material.maxSize = config.maxSize
|
|
|
|
- material.pointSizeType =/* Potree.settings.isOfficial ? */ config.pointSizeType /* : 'ADAPTIVE' */ //Potree.PointSizeType[config.pointSizeType]//Potree.PointSizeType.ADAPTIVE;//FIXED
|
|
|
|
- pointcloud.changePointSize(config.realPointSize) //material.size = config.pointSize;
|
|
|
|
- pointcloud.changePointOpacity(1)
|
|
|
|
- material.shape = Potree.PointShape.SQUARE;
|
|
|
|
- pointcloud.color = pointcloud.material.color = dataset.color
|
|
|
|
- pointcloud.timeStamp = timeStamp
|
|
|
|
- //transformPointcloud(pointcloud,dataset)
|
|
|
|
- scene.addPointCloud(pointcloud);
|
|
|
|
-
|
|
|
|
- if(!Potree.settings.isOfficial){
|
|
|
|
- Potree.settings.floorplanEnables[dataset.id] = true
|
|
|
|
- Potree.settings.floorplanType[dataset.id] = 'default'
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- pointcloudLoaded ++;
|
|
|
|
- if(pointcloudLoaded == datasetLength)pointcloudLoadDone()
|
|
|
|
-
|
|
|
|
-
|
|
|
|
|
|
+ viewer.dispatchEvent({type:'loadPointCloudDone'})
|
|
|
|
+
|
|
|
|
+ if(!Potree.settings.UserPointDensity){
|
|
|
|
+ Potree.settings.UserPointDensity = 'high'//'middle'
|
|
|
|
+ }
|
|
|
|
|
|
- Potree.loadPanos(dataset.id, (data) => {
|
|
|
|
- //console.log('loadPanos',dataset.sceneCode, dataset.id, data)
|
|
|
|
- viewer.images360.addPanoData(data, dataset.id )
|
|
|
|
- panosLoaded ++;
|
|
|
|
- if(panosLoaded == datasetLength){
|
|
|
|
- panosLoadDone()
|
|
|
|
- }
|
|
|
|
- })
|
|
|
|
- })
|
|
|
|
- }else{
|
|
|
|
- let pointcloud = viewer.scene.pointclouds.find(p => p.dataset_id == dataset.id)
|
|
|
|
- if(!pointcloud){
|
|
|
|
- Potree.Log('数据集id变了,自动使用第一个', {font:['#500' ]} )
|
|
|
|
- pointcloud = viewer.scene.pointclouds[0]
|
|
|
|
|
|
+ {//初始位置
|
|
|
|
+
|
|
|
|
+ var panoId = browser.urlHasValue('pano',true);
|
|
|
|
+ if(panoId !== ''){
|
|
|
|
+ var pos
|
|
|
|
+ var pano = viewer.images360.panos.find(e=>e.id==panoId);
|
|
|
|
+ if(pano){
|
|
|
|
+ viewer.images360.focusPano({
|
|
|
|
+ pano,
|
|
|
|
+ duration:0,
|
|
|
|
+ callback:()=>{/* Potree.settings.displayMode = 'showPanos' */}
|
|
|
|
+ })
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ }else{//考虑到多数据集距离很远,或者像隧道那种场景,要使视野范围内一定能看到点云,最好初始点设置在漫游点上
|
|
|
|
+
|
|
|
|
+ let {boundSize, center} = viewer.bound
|
|
|
|
+
|
|
|
|
+ let pano = viewer.images360.findNearestPano(center)
|
|
|
|
+
|
|
|
|
+ pano && viewer.images360.flyToPano({
|
|
|
|
+ pano, duration:0,
|
|
|
|
+ target : viewer.images360.bound.center.setZ(pano.position.z) //平视中心区域(但也不能保证这个方向一定能看到点云密集区,如果在边缘的话)
|
|
|
|
+ })
|
|
|
|
+ }
|
|
}
|
|
}
|
|
- /* //先归零
|
|
|
|
- Alignment.translate(pointcloud, pointcloud.translateUser.clone().negate())
|
|
|
|
- Alignment.rotate(pointcloud, null, - pointcloud.orientationUser) */
|
|
|
|
-
|
|
|
|
- //transformPointcloud(pointcloud, dataset)
|
|
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ console.log('allLoaded')
|
|
|
|
+ viewer.dispatchEvent('allLoaded')
|
|
|
|
+ })
|
|
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
- if(ifReload){
|
|
|
|
-
|
|
|
|
- //loadDone()
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
|
|
+ })
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- number && Potree.loadDatasets(Potree.loadDatasetsCallback)
|
|
|
|
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
window.THREE = THREE
|
|
window.THREE = THREE
|
|
|
|
|
|
|
|
|
|
@@ -248,10 +140,7 @@ export function start(dom, mapDom, number ){ //t-Zvd3w0m
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
|
|
+
|
|
//--------------------------------
|
|
//--------------------------------
|
|
/* if(!number){
|
|
/* if(!number){
|
|
Potree.settings.boundAddObjs = true
|
|
Potree.settings.boundAddObjs = true
|
|
@@ -278,32 +167,11 @@ export function start(dom, mapDom, number ){ //t-Zvd3w0m
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-window.buttonFunction = function(){
|
|
|
|
-
|
|
|
|
- viewer.scene.pointclouds.forEach(e=>e.predictNodeMaxLevel())
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-window.testTransform = function(locationLonLat, location1, location2){
|
|
|
|
- proj4.defs("NAVVIS:test", "+proj=tmerc +ellps=WGS84 +lon_0=" + locationLonLat[0].toPrecision(15) + " +lat_0=" + locationLonLat[1].toPrecision(15));
|
|
|
|
-
|
|
|
|
- let transform = proj4("WGS84", "NAVVIS:test"); //这个ok navvis里也是这两种转换 见proj4Factory
|
|
|
|
- if(location1){//经纬度
|
|
|
|
- return transform.forward(location1)
|
|
|
|
- }else{
|
|
|
|
- return transform.inverse(location2)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
var changeLog = ()=>{
|
|
var changeLog = ()=>{
|
|
|
|
|
|
var textarea = document.createElement('textarea');
|
|
var textarea = document.createElement('textarea');
|