|
@@ -85,6 +85,7 @@ export function start(dom, mapDom, number, info={} ){ //t-Zvd3w0m
|
|
|
Potree.loadDatasetsCallback = function(data, ifReload){
|
|
Potree.loadDatasetsCallback = function(data, ifReload){
|
|
|
if(!data || data.length == 0)return console.error('getDataSet加载的数据为空')
|
|
if(!data || data.length == 0)return console.error('getDataSet加载的数据为空')
|
|
|
|
|
|
|
|
|
|
+
|
|
|
Potree.datasetData = data
|
|
Potree.datasetData = data
|
|
|
viewer.transform = null
|
|
viewer.transform = null
|
|
|
var datasetLength = data.length
|
|
var datasetLength = data.length
|
|
@@ -291,10 +292,7 @@ export function start(dom, mapDom, number, info={} ){ //t-Zvd3w0m
|
|
|
|
|
|
|
|
viewer.dispatchEvent('allLoaded')
|
|
viewer.dispatchEvent('allLoaded')
|
|
|
|
|
|
|
|
- if(!Potree.settings.isOfficial && Potree.settings.number == 'SG-t-rQ14yS9VjVp' ){
|
|
|
|
|
- setTimeout(listenLocation, 1000)
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -359,14 +357,19 @@ export function start(dom, mapDom, number, info={} ){ //t-Zvd3w0m
|
|
|
if(!Potree.settings.isOfficial){
|
|
if(!Potree.settings.isOfficial){
|
|
|
Potree.settings.floorplanEnables[dataset.id] = true
|
|
Potree.settings.floorplanEnables[dataset.id] = true
|
|
|
Potree.settings.floorplanType[dataset.id] = 'default'
|
|
Potree.settings.floorplanType[dataset.id] = 'default'
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
|
|
+ }
|
|
|
pointcloudLoaded ++;
|
|
pointcloudLoaded ++;
|
|
|
if(pointcloudLoaded == datasetLength)pointcloudLoadDone()
|
|
if(pointcloudLoaded == datasetLength)pointcloudLoadDone()
|
|
|
|
|
|
|
|
|
|
+ {
|
|
|
|
|
+ let resolution = dataset.sceneResolution || '4k' //融合页面还有一个tileRes
|
|
|
|
|
+ if(resolution.indexOf('/') != -1) {
|
|
|
|
|
+ resolution = resolution.split('/')[1]
|
|
|
|
|
+ }
|
|
|
|
|
+ pointcloud.tileClass = parseInt(resolution) * 1024
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
-
|
|
|
|
|
Potree.loadPanos(dataset.id, (data) => {
|
|
Potree.loadPanos(dataset.id, (data) => {
|
|
|
//console.log('loadPanos',dataset.sceneCode, dataset.id, data)
|
|
//console.log('loadPanos',dataset.sceneCode, dataset.id, data)
|
|
|
viewer.images360.addPanoData(data, pointcloud)
|
|
viewer.images360.addPanoData(data, pointcloud)
|
|
@@ -1395,225 +1398,6 @@ var changeLog = ()=>{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-function listenLocation(){//室内定位测试
|
|
|
|
|
-
|
|
|
|
|
- let fakeMeasure = {
|
|
|
|
|
- type : 'Path', "unit": "metric", points:[], width:0.1
|
|
|
|
|
- }
|
|
|
|
|
- let path = viewer.measuringTool.createMeasureFromData(fakeMeasure)
|
|
|
|
|
- path.setEditEnable(false)
|
|
|
|
|
- path.setAddOrRemPoint(false)
|
|
|
|
|
- path.edge.material.useDepth = false
|
|
|
|
|
- path.endCaps[0].children[0].material.useDepth = false
|
|
|
|
|
- path.endCaps[1].children[0].material.useDepth = false
|
|
|
|
|
- path.setColor('#FF4399')
|
|
|
|
|
- path.setPathWidth(0.5)
|
|
|
|
|
- viewer.mainViewport.view.applyJson({"yaw":-3.1401257265634337,"pitch":-1.4463945277050603,"position":{"x":-3.6298548644429034,"y":1.631125389514918,"z":25.881133155122455},"radius":2.5485311249338363})
|
|
|
|
|
- let sphere = new THREE.Mesh(new THREE.SphereBufferGeometry(0.1,4,4),new THREE.MeshBasicMaterial({
|
|
|
|
|
- color:'#f11',
|
|
|
|
|
- depthTest:false
|
|
|
|
|
- }))
|
|
|
|
|
- //sphere.rotation.set()
|
|
|
|
|
- viewer.scene.overlayScene.add(sphere)
|
|
|
|
|
-
|
|
|
|
|
- let label = new Potree.TextSprite({ sizeInfo:{width2d:160}, renderOrder:10, transform2Dpercent:{x:0,y:0.5}})
|
|
|
|
|
-
|
|
|
|
|
- label.name = 'locationlabel'
|
|
|
|
|
- sphere.add(label)
|
|
|
|
|
- label.setPos(new THREE.Vector3(0,0,0.3))
|
|
|
|
|
- sphere.visible = false
|
|
|
|
|
- let setLabel = (e)=>{
|
|
|
|
|
- let texts = [e.name]
|
|
|
|
|
- if(e.locationDesc) texts.push(e.locationDesc)
|
|
|
|
|
- label.setText(texts)
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
- viewer.inputHandler.addEventListener('keydown',e=>{
|
|
|
|
|
- if(e.event.key.toLowerCase() == 'f' && sphere.visible){
|
|
|
|
|
- let distance = e.event.shiftKey ? 4 : Math.min(30, viewer.mainViewport.view.position.distanceTo(sphere.position))
|
|
|
|
|
- viewer.focusOnObject({ position: sphere.position}, 'point', 400, {distance} )
|
|
|
|
|
- }
|
|
|
|
|
- })
|
|
|
|
|
-
|
|
|
|
|
- let wholeId = browser.urlHasValue('livePath',true)
|
|
|
|
|
- if(wholeId != ''){//显示该用户完整路径
|
|
|
|
|
- let points, curPercent=0, data,interval, from = new THREE.Vector3, to = new THREE.Vector3//每次走两个点间的十分之一. 显示长度为1个单位
|
|
|
|
|
-
|
|
|
|
|
- let walk = ()=>{
|
|
|
|
|
- if(curPercent < points.length){
|
|
|
|
|
-
|
|
|
|
|
- let index = Math.floor(curPercent)
|
|
|
|
|
- let percent_ = curPercent % 1 //小数部分
|
|
|
|
|
- let point1 = points[index-1] ? (from.copy(points[index-1]), to.copy(points[index]),
|
|
|
|
|
- lerp.vector(from, to)(percent_), from.clone() ) : points[0]
|
|
|
|
|
- let point2 = points[index+1] ? (from.copy(points[index]), to.copy(points[index+1]),
|
|
|
|
|
- lerp.vector(from, to)(percent_), from.clone() ) : points[index]
|
|
|
|
|
- path.points = [point1, point2]
|
|
|
|
|
- index > 0 && index < points.length - 1 && path.points.splice(1,0,points[index]) //跨的话 中间加一个拐弯的
|
|
|
|
|
- curPercent += 0.1
|
|
|
|
|
- path.update()
|
|
|
|
|
- sphere.position.copy(points[index])
|
|
|
|
|
- setLabel(data[index])
|
|
|
|
|
- sphere.visible = true
|
|
|
|
|
- viewer.dispatchEvent('content_changed')
|
|
|
|
|
- }else{
|
|
|
|
|
- clearInterval(interval)
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
- Potree.loadFile('https://test.4dkankan.com/openDevice/record/'+wholeId,{
|
|
|
|
|
- fetchMethod:'post',
|
|
|
|
|
- },
|
|
|
|
|
- (data_)=>{
|
|
|
|
|
- if(!(data_ instanceof Array)){
|
|
|
|
|
- return console.error('获取完整路径为空',data)
|
|
|
|
|
- }
|
|
|
|
|
- data = data_
|
|
|
|
|
- console.log('获取到的路径',data)
|
|
|
|
|
- if(Potree.settings.isTest ){
|
|
|
|
|
- data = [{
|
|
|
|
|
- name:'1',
|
|
|
|
|
- pos: new THREE.Vector3(10,4,0),
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- name:'2',
|
|
|
|
|
- pos: new THREE.Vector3(4,4,2),
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- name:'3',
|
|
|
|
|
- pos: new THREE.Vector3(6,3,2),
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- name:'4',
|
|
|
|
|
- pos: new THREE.Vector3(8,4,0),
|
|
|
|
|
- }]
|
|
|
|
|
- }
|
|
|
|
|
- points = data.map(e=>new THREE.Vector3().copy(e.pos))
|
|
|
|
|
-
|
|
|
|
|
- interval = setInterval(walk, 100)
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
- }
|
|
|
|
|
- )
|
|
|
|
|
-
|
|
|
|
|
- return
|
|
|
|
|
- }
|
|
|
|
|
- //以下实时显示正在走的路径
|
|
|
|
|
-
|
|
|
|
|
- let locationStream = new ReportInfoStream
|
|
|
|
|
-
|
|
|
|
|
- let lastPoint , requestPoints = {startPos: new THREE.Vector3, endPos: new THREE.Vector3}, waitRoute
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
- /* let getZOnGround = (pos_)=>{//要近地面才能搜出来
|
|
|
|
|
- let pos = new THREE.Vector3().copy(pos_)
|
|
|
|
|
- pos.z -= 1 //假设标签都在离屋顶更靠近的位置,向下寻找临近漫游点
|
|
|
|
|
- let disMap = new Map
|
|
|
|
|
- let result = Potree.Common.sortByScore(viewer.images360.panos, [(pano)=>{
|
|
|
|
|
- return Math.abs(pos.z - pano.position.z) < 2
|
|
|
|
|
- }],[pano=>{
|
|
|
|
|
- let disSq = pano.position.distanceToSquared(pos)
|
|
|
|
|
- disMap.set(pano, disSq)
|
|
|
|
|
- return -disSq
|
|
|
|
|
- }])
|
|
|
|
|
- let zArr = result.slice(0,10).map(e=>e.item.position.z)// floorPosition
|
|
|
|
|
- zArr.sort()
|
|
|
|
|
- pos.z = zArr[Math.round(zArr.length/2)]
|
|
|
|
|
- if(pos.z == void 0){
|
|
|
|
|
- pos.z = pos_.z - 2
|
|
|
|
|
- console.log('getZOnGround没找到')
|
|
|
|
|
- }
|
|
|
|
|
- //pos.z-=0.2
|
|
|
|
|
- return pos
|
|
|
|
|
- } */
|
|
|
|
|
- let walk = ()=>{
|
|
|
|
|
- if(path.points.length>1){
|
|
|
|
|
- path.points.splice(0,1)
|
|
|
|
|
- path.update()
|
|
|
|
|
- viewer.dispatchEvent('content_changed')
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- }
|
|
|
|
|
- setInterval(walk, 100)
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
- let history = []
|
|
|
|
|
- locationStream.subscribe(e=>{
|
|
|
|
|
- //console.log('locationStream',e.pos)
|
|
|
|
|
- setLabel(e)
|
|
|
|
|
- //label.setPos(e.pos)
|
|
|
|
|
- sphere.position.copy(e.pos)
|
|
|
|
|
- sphere.visible = true
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
- let last = history[history.length - 1]
|
|
|
|
|
- let isDifferent = Potree.Common.ifSame( last?.pos, e.pos )
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
- if(last && !waitRoute && !isDifferent){
|
|
|
|
|
- requestPoints.startPos.copy(lastPoint)
|
|
|
|
|
- requestPoints.endPos.copy(e.pos)
|
|
|
|
|
- /* requestPoints.startPos = getZOnGround(lastPoint)
|
|
|
|
|
- requestPoints.endPos = getZOnGround(e.pos) */
|
|
|
|
|
- console.log('startPos',requestPoints.startPos,'endPos',requestPoints.endPos)
|
|
|
|
|
-
|
|
|
|
|
- Potree.loadFile(`https://test.4dkankan.com/openDevice/query?from=${last.uuid}&to=${e.uuid}`,{},(data)=>{
|
|
|
|
|
- data = 'data' in data ? data.data : data
|
|
|
|
|
- data = data || []
|
|
|
|
|
- data.length>0 && console.log('getRoute', data.map(e=>e))
|
|
|
|
|
- path.points = path.points.concat(data.map(e=>new THREE.Vector3().copy(e)))
|
|
|
|
|
- path.update()
|
|
|
|
|
- waitRoute = false
|
|
|
|
|
- },()=>{
|
|
|
|
|
- waitRoute = false
|
|
|
|
|
- })
|
|
|
|
|
- /* Potree.loadFile('https://test.4dkankan.com/openDevice/SG-t-rQ14yS9VjVp/getRoute',{
|
|
|
|
|
- fetchMethod:'post',
|
|
|
|
|
- sendInfo : {
|
|
|
|
|
- "sceneCode": "SG-t-rQ14yS9VjVp",
|
|
|
|
|
- "startPos": requestPoints.startPos,
|
|
|
|
|
- "endPos": requestPoints.endPos
|
|
|
|
|
- }
|
|
|
|
|
- },(data)=>{
|
|
|
|
|
- data = 'data' in data ? data.data : data
|
|
|
|
|
- data = data || []
|
|
|
|
|
- data.length>0 && console.log('getRoute', data.map(e=>e.location))
|
|
|
|
|
- path.points = path.points.concat(data.map(e=>new THREE.Vector3().fromArray(e.location)) )
|
|
|
|
|
- path.update()
|
|
|
|
|
- waitRoute = false
|
|
|
|
|
- },()=>{
|
|
|
|
|
- waitRoute = false
|
|
|
|
|
- }) */
|
|
|
|
|
- waitRoute = true
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
- isDifferent || history.push(e)
|
|
|
|
|
- lastPoint = new THREE.Vector3().copy(e.pos)
|
|
|
|
|
- viewer.dispatchEvent('content_changed')
|
|
|
|
|
- })
|
|
|
|
|
- locationStream.start()
|
|
|
|
|
-
|
|
|
|
|
- window.liveLocation = {
|
|
|
|
|
- sphere, label, path, history
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
- /* for(let i=0;i<points.length;i++){
|
|
|
|
|
- path.setMarkerTitle(i,'')
|
|
|
|
|
- } */
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|