Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Threebox如何获取地图上的所有3d对象?_Javascript_Mapbox_Mapbox Gl Js_Mapbox Gl_Threebox - Fatal编程技术网

Javascript Threebox如何获取地图上的所有3d对象?

Javascript Threebox如何获取地图上的所有3d对象?,javascript,mapbox,mapbox-gl-js,mapbox-gl,threebox,Javascript,Mapbox,Mapbox Gl Js,Mapbox Gl,Threebox,我需要获得一个数组或对象,其中包含已添加到Mapbox地图的所有3D模型,如下面的屏幕截图所示。如何获取这些对象 我试图做一些像这样的代码,但它没有工作 const buildings3DModels = map.tb.world.children; console.log("buildings3DModels: ", buildings3DModels); buildings3DModels.forEach(element => console.log(elemen

我需要获得一个数组或对象,其中包含已添加到Mapbox地图的所有3D模型,如下面的屏幕截图所示。如何获取这些对象

我试图做一些像这样的代码,但它没有工作

const buildings3DModels = map.tb.world.children;
console.log("buildings3DModels: ", buildings3DModels);
buildings3DModels.forEach(element => console.log(element));
我可以看到使用以下对象记录数组:

console.log(map.tb.world.children);

但由于某些原因,我无法使用forEach或任何其他循环遍历数组,它只是不返回任何内容


所以,我的问题是:在将这些3D对象添加到地图中之后,如何从地图中获取它们?我怎样才能循环遍历每个对象呢?

我不知道为什么它对您不起作用,但您使用的是threebox,所以这里有一把小提琴似乎很管用:

小提琴上的短剪:


    threebox.addAtCoordinate(
                    plane, 
                    [origin[0], origin[1], 10],
                    {preScale: 1}
                );
                
    threebox.world.children.forEach(element => 
      console.log(element.position.x, 
                  element.position.y, 
                  element.position.z));


我不知道为什么它对你不起作用,但你使用的是threebox,所以这里有一把小提琴似乎很管用:

小提琴上的短剪:


    threebox.addAtCoordinate(
                    plane, 
                    [origin[0], origin[1], 10],
                    {preScale: 1}
                );
                
    threebox.world.children.forEach(element => 
      console.log(element.position.x, 
                  element.position.y, 
                  element.position.z));

我在维护这个系统
tb.world.children
是一个简单的数组,因此if
tb.world.children.forEach((o)=>{console.log(o)})未记录任何内容,因为正在执行的运行时为空。你能把你的全部代码贴出来吗

如果您的3D对象是通过
tb.loadObj
加载的,这是一种完全异步的方法,则很可能您试图在对象完全加载之前访问
tb.world.children
数组。如果是这样,那么您应该管理此方法返回的
Promise
实例,并控制何时解析所有实例

这里有一个加载100个模型并将对象记录在threebox中的方法

函数makenive(选项){
让承诺=[];
对于(变量i=0;i<100;i++){
承诺。推送(新承诺((解决)=>{
tb.loadObj(选项、功能(模型){
设lng=origin[0]+Math.random()*0.4-0.2;
设lat=origin[1]+Math.random()*0.4-0.2;
设alt=origin[2]+Math.random()*0.4-0.2;
设obj=model.setCoords([lng,lat,alt]);
tb.add(obj);
if(api.animation){
//播放默认动画,持续10秒
让opt={animation:0,duration:10000};
对象播放默认值(opt);
}
getGeometryTotalLength();
决心(正确);
})
}));
}
承诺。所有(承诺)。然后((值)=>{
log(“所有承诺已完成:”);
tb.world.children.forEach((o)=>{console.log(o)});
});
map.repaint=true;
}
我正在维护
tb.world.children
是一个简单的数组,因此if
tb.world.children.forEach((o)=>{console.log(o)})未记录任何内容,因为正在执行的运行时为空。你能把你的全部代码贴出来吗

如果您的3D对象是通过
tb.loadObj
加载的,这是一种完全异步的方法,则很可能您试图在对象完全加载之前访问
tb.world.children
数组。如果是这样,那么您应该管理此方法返回的
Promise
实例,并控制何时解析所有实例

这里有一个加载100个模型并将对象记录在threebox中的方法

函数makenive(选项){
让承诺=[];
对于(变量i=0;i<100;i++){
承诺。推送(新承诺((解决)=>{
tb.loadObj(选项、功能(模型){
设lng=origin[0]+Math.random()*0.4-0.2;
设lat=origin[1]+Math.random()*0.4-0.2;
设alt=origin[2]+Math.random()*0.4-0.2;
设obj=model.setCoords([lng,lat,alt]);
tb.add(obj);
if(api.animation){
//播放默认动画,持续10秒
让opt={animation:0,duration:10000};
对象播放默认值(opt);
}
getGeometryTotalLength();
决心(正确);
})
}));
}
承诺。所有(承诺)。然后((值)=>{
log(“所有承诺已完成:”);
tb.world.children.forEach((o)=>{console.log(o)});
});
map.repaint=true;
}

非常感谢@jscastro!这正是我的问题所在。现在一切都像我要找的一样。再次感谢!很高兴听到这个消息,如果您还有其他问题,请告诉mw@jscastro!这正是我的问题所在。现在一切都像我要找的一样。再次感谢!很高兴听到这个消息,如果您有任何其他问题,请告知mw