1、3DGIS模型加載地址http://api.ztmapinfo.com/obj/yangjing/test.FBX
2、建筑點擊事件監聽
obj.on("click",function(e,position,xy,point){
if(drawPoly3DMode) return;//如果是繪制區域模式,則禁止此功能
sandplugin.modelRange(e,{color:"#00ff00"});
//此處可拿到建筑的名稱、坐標、高度
var lngLat = position.lngLat;
var height = point.z;
var meshname = e.name;
});
3、根據名稱獲取建筑
var building = sandplugin.getObject("b05");
sandplugin.modelRange(building,{color:"#00ff00"});
4、繪制區域
var allPoints=[]; //存放繪制范圍區域的所有坐標
var endPoint=null; //首尾相連的坐標,及最后一個坐標
var areaId=null; //區域的編號
var allDatas={}; //存放所有繪制的范圍區域數據
function initToolEvent(){
drawPoly3DMode = true;
map.on("click",mapClick);
map.on("mousemove",mapMoveEvent);
map.on("dblclick",mapdblClick);
}
function mapClick(event){ //地圖單擊事件,開始繪制區域
if(endPoint==null)endPoint=[event.lngLat.lng,event.lngLat.lat];
if(areaId==null)areaId="area_"+Date.now();
allPoints.push([event.lngLat.lng,event.lngLat.lat]);
}
function mapMoveEvent(event){ //地圖移動事件
if(endPoint==null) return;
var points=[].concat(allPoints);
points.push([event.lngLat.lng,event.lngLat.lat]);
points.push(endPoint);
drawPoly3D(areaId,points); //繪制范圍
}
function mapdblClick(event){ //地圖雙擊事件,結束繪制區域
if(endPoint==null) return;
drawPoly3DMode = false;
map.off("click",mapClick); //移除事件
map.off("mousemove",mapMoveEvent);
map.off("dblclick",mapdblClick);
allPoints.splice(allPoints.length-1,1);
allPoints.push(endPoint);
drawPoly3D(areaId,allPoints);
//存放所有的區域數據(data:位置坐標數組;height:區域高度;center:區域中心點)
allDatas[areaId]={data:allPoints,height:1,center:getAreaCenter(allPoints)};
allPoints=[]; //清除數據
areaId=null;
endPoint=null;
}
function drawPoly3D(id,datas){
var mesh=sandplugin.ztMesh.creatPoly3D(datas,{id:id,height:2,isTop:true,opacity:0.6,color:"#00ff00"});
sandplugin.remove(id);
sandplugin.add(mesh);
}
我要評論