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);
}
我要评论