maptalks+three.js+vue webpack实现二维地图上贴三维模型操作
我们不是走在坑里就是走在前往坑的路上_(:зゝ∠)_
最终效果如图:(地图上添加一个“三维地图”的toolbar按钮,点击后在二维地图上贴上建好的三维模型点击显示弹框)
以下都在已经引入并且初始化maptalks地图的基础上,如何引入使用maptalks可以查看以下文章
https://www.nhooo.com/article/192983.htm
1、安装maptalks.three包
npminstallmaptalks.three
2、安装three包
npminstallthree
3、安装obj-loader和mtl-loader包
npmi--savethree-obj-mtl-loader
4、引入model模型文件到public下(放在这里是因为打包后读取路径问题,目前发现放在这里才能在打包后正确读取)
5、Vue页面代码
引入包
import*asTHREEfrom'three'
import*asmaptalksfrom'maptalks'
import{ThreeLayer}from'maptalks.three'
import{MTLLoader,OBJLoader}from'three-obj-mtl-loader'
初始化的地图对象是
this.map
下面是渲染三维模型的方法
//渲染三维
draw3D(){
constthat=this
//三维地图
varthree_flag=false
/////单体化交互开始
varINTERSECTED
this.map.on('click',function(e){
//console.log(e)
varraycaster=newTHREE.Raycaster()
varmouse=newTHREE.Vector2()
constcamera=threeLayer.getCamera()
constscene=threeLayer.getScene()
if(!scene)return
constsize=that.map.getSize()
constwidth=size.width;constheight=size.height
mouse.x=(e.containerPoint.x/width)*2-1
mouse.y=-((e.containerPoint.y)/height)*2+1
raycaster.setFromCamera(mouse,camera)
raycaster.linePrecision=3
varintersects=raycaster.intersectObjects(scene.children,true)
//varintersects=raycaster.intersectObject(points);
if(!intersects)return
if(Array.isArray(intersects)&&intersects.length===0)return
console.log(intersects)
//这里我们操作第一个相交的物体
if(intersects.length>0){
if(INTERSECTED!=intersects[0].object){
if(INTERSECTED){
//INTERSECTED.material.color.setHex(INTERSECTED.currentHex);
//INTERSECTED.scale.set(1,1,1);
if(INTERSECTED.material.length===undefined){
INTERSECTED.material.color.setHex(INTERSECTED.currentHex)
}else{
for(vari=0;i'+
'浦软大厦详情 - 入驻企业:12家
- 登记人员:1000人
- 今日访客:100人
- 登记车辆:500辆
- 实时人数:0人
- 监控点位:0个
- 人脸门禁:0个
- 消防设施:0个