`

百度地图画点、线、面函数封装

阅读更多
$(document).ready(function(){
	$("#dwtr").hide();
	//百度地图初始化
	initMap();
	//加载大类下拉列表
	doBigTypeList();
	//加载到地图上
	loadAllCompDetail("");
	var lxid=$("#lxid").val();
	if(lxid!=""&&lxid!=null){
		$("#dwtr").show();
		getComponentInfo(lxid);
		$("#title").html('<font size="4" color="#0072bc"><b>修改页面</b></font>');
	}else{
		$("#colortr").hide();
		$("#title").html('<font size="4" color="#0072bc"><b>增加页面</b></font>');
	}
	//加载热区
	loadGridHotArea();
	//按钮样式
	showImsg("dwbut,savebut,resetbut");
});

var bmap="";
//绘图标识
var drawflag=0;
var pointarr=[];
var pointstr="";
var polygon="";
var linepointarr=[];
var linepointstr="";
var polyline="";
var marker="";
var clng="";//中心点经度
var clat="";//中心点纬度
var a="";//经度最大值
var b="";//纬度最大值
var c="";//经度最小值
var d="";//纬度最小值
//数组
var compmarkerarr1=[];
var compmarkerarr2=[];
var compmarkerarr3=[];
var comppolyline=[];
var comppolygon=[];
//缩放级别数组
var zoom2darr=[14,15,16,17,18,19];
var zoom3darr=[8,9,10,11,12,13];
var vertflag=0;
//区域数组
var gridareaarr=[];
var gridlabel=[];

function getComponentInfo(lxid){
	$.ajax({
	   	  async:false,
          type: "POST",               
          dataType: "json",               
          url: ctxPath+'/componentDetailAction.do?dispatch=getComponentInfoByid',
          data:"lxid="+lxid,   
          success: function(data) {
          		var assemblytype=data.assemblytype;
          		$("#assemblyname").val(data.assemblyname);
          		$("#bigtype").val(data.bigtype);
          		doSmallTypeList();
          		$("#smalltype").val(data.smalltype);
          		$("#assemblytype").val(assemblytype);
          		$("#tcolor").val(data.tcolor);
	        	$("#tcolor").css("background-color",data.tcolor);
	        	if(data.tcolor==""||data.tcolor==null){
	        		$("#tcolor").val('#39b778');
	        		$("#tcolor").css("background-color",'#39b778');
	        	}
          		if(assemblytype=="1"){
          			$("#colortr").hide();
          			$("#pointlng1").val(data.pointlng);
	        		$("#pointlat1").val(data.pointlat);
          		}else if(assemblytype=="2"){
		        	$("#pointlng2").val(data.pointlng);
		        	$("#pointlat2").val(data.pointlat);
		        	$("#tpoints2").val(data.tpoints);
          		}else if(assemblytype=="3"){
          			$("#pointlng3").val(data.pointlng);
		        	$("#pointlat3").val(data.pointlat);
		        	$("#tpoints3").val(data.tpoints);
          		}
          }
    });
}

//加载大类下拉列表
function doBigTypeList(){
	$.ajax({
		   async:false,
           type: "POST",               
           dataType: "json",               
           url: ctxPath+'/componentAction.do?dispatch=doCompBTSelectList',   
           success: function(data) {
           	var obj=document.getElementById('bigtype'); 
        	 	obj.options.add(new Option("--请选择--","")); 
        	 	for(var i=0;i<data.length;i++){
        	 		obj.options.add(new Option(data[i].supername,data[i].superid)); 	
        	 	}
           }
       });  
} 

//根据大类id加载小类下拉列表
function doSmallTypeList(){
	$("#smalltype").html("");
	var superid=$("#bigtype").val();
	if(superid!=""&&superid!=null){
		$.ajax({
		   async:false,
           type: "POST",               
           dataType: "json",               
           url: ctxPath+'/componentAction.do?dispatch=doCompSTSelectList', 
           data:"superid="+superid, 
           success: function(data) {
           		var obj=document.getElementById('smalltype'); 
        	 	obj.options.add(new Option("--请选择--","")); 
        	 	for(var i=0;i<data.length;i++){
        	 		obj.options.add(new Option(data[i].smallname,data[i].smallid)); 	
        	 	}
           }
       });  
	}else{
		var obj=document.getElementById('smalltype'); 
        obj.options.add(new Option("--请选择--","")); 
	}
	
}

//点击类型下拉框
function onAssemblyTypeChange(){
	var assemblytype=$("#assemblytype").val();
	if(assemblytype=="2"||assemblytype=="3"){
		$("#colortr").show();
	}else{
		$("#colortr").hide();
	}
} 

//添加监听
function addMapListener(){
	var assemblytype=$("#assemblytype").val();
	if(assemblytype==""){
		alert("请选择类型!");
	}
	drawflag="1";
	bmap.addEventListener("click", function(e){
		addLabelArea(e);
	});
}

//删除监听
function removeMapListener(){
	drawflag="0";
	bmap.removeEventListener("click", function(e){
		addLabelArea(e);
	});
}

function addLabelArea(e){
	var curmaptype=bmap.getMapType();
	//坐标转换类
	var ctool=new CoorTools(bmap); 
	var assemblytype=$("#assemblytype").val();
	if(assemblytype=="1"){//点
		if(drawflag=="1"){
			if(marker!=""){
				bmap.removeOverlay(marker);
			}
			//清空面标注信息
			if(polygon!=""){
				bmap.removeOverlay(polygon);
			}
			pointarr=[];              
			$("#tpoints3").val("");
			//清空线标注信息
			if(polyline!=""){
				bmap.removeOverlay(polyline);
			}
			linepointarr=[];              
			$("#tpoints2").val("");
			clng=e.point.lng;
			clat=e.point.lat;
			marker = new BMap.Marker(e.point);  // 创建标注
			bmap.addOverlay(marker);			// 将标注添加到地图中
			if(curmaptype._name=="MyMap"){
				var point3=new BMap.Point(clng,clat);
				var point2=ctool.coor2Baidu(point3);
				clng=point2.lng;
				clat=point2.lat;
	        }
			$("#pointlng1").val(clng);
			$("#pointlat1").val(clat);
		}
	}else if(assemblytype=="2"){//线
		if(drawflag=="1"){
			if(polyline!=""){
				bmap.removeOverlay(polyline);
			}
			if(marker!=""){
				bmap.removeOverlay(marker);
			}
			//清空面标注信息
			if(polygon!=""){
				bmap.removeOverlay(polygon);
			}
			pointarr=[];              
			$("#tpoints3").val("");	
			var npoint=new BMap.Point(e.point.lng,e.point.lat);	
			clng=e.point.lng;
			clat=e.point.lat;
			linepointarr.push(npoint);
			var tcolor=$("#tcolor").val();
			polyline=new BMap.Polyline(linepointarr,{strokeColor:tcolor,strokeWeight:2,strokeOpacity:0.8});
			bmap.addOverlay(polyline);
			linepointstr=fromArrayToString(linepointarr);
			if(curmaptype._name=="MyMap"){
				var tempstr="";
				var tpointstr=linepointstr.split(",")
				for(var i=0;i<tpointstr.length;i+=2){
					var tlng=tpointstr[i];
					var tlat=tpointstr[i+1];
					var point=new BMap.Point(tlng,tlat);
					var npoint=ctool.coor2Baidu(point);
					tempstr+=npoint.lng+","+npoint.lat+",";
				}
				linepointstr=tempstr.substring(0,(tempstr.length-1));
				var point3=new BMap.Point(clng,clat);
				var point2=ctool.coor2Baidu(point3);
				clng=point2.lng;
				clat=point2.lat;
	        }
			$("#tpoints2").val(linepointstr);
			$("#pointlng2").val(clng);
			$("#pointlat2").val(clat);
		}
	}else if(assemblytype=="3"){//面
		if(drawflag=="1"){
			if(polygon!=""){
				bmap.removeOverlay(polygon);
			}
			if(marker!=""){
				bmap.removeOverlay(marker);
			}
			//清空线标注信息
			if(polyline!=""){
				bmap.removeOverlay(polyline);
			}
			linepointarr=[];              
			$("#tpoints2").val("");	
			var npoint=new BMap.Point(e.point.lng,e.point.lat);	
			//获取经度和纬度的最大最小值
			if(pointarr.length==0){
				a=e.point.lng;
				b=e.point.lat;
				c=e.point.lng;
				d=e.point.lat;
			}else{
				if(a<e.point.lng){
					a=e.point.lng;
				}
				if(b<e.point.lat){
					b=e.point.lat;
				}
				if(c>e.point.lng){
					c=e.point.lng;
				}
				if(d>e.point.lat){
					d=e.point.lat;
				}
			}
			clng=(a+c)/2;
			clat=(b+d)/2;
			pointarr.push(npoint);
			var tcolor=$("#tcolor").val();
			polygon=new BMap.Polygon(pointarr,{fillOpacity:0.2,fillColor:tcolor,strokeColor:tcolor,strokeWeight:2,strokeOpacity:0.8});
			bmap.addOverlay(polygon);
			pointstr=fromArrayToString(pointarr);
			if(curmaptype._name=="MyMap"){
				var tempstr="";
				var tpointstr=pointstr.split(",")
				for(var i=0;i<tpointstr.length;i+=2){
					var tlng=tpointstr[i];
					var tlat=tpointstr[i+1];
					var point=new BMap.Point(tlng,tlat);
					var npoint=ctool.coor2Baidu(point);
					tempstr+=npoint.lng+","+npoint.lat+",";
				}
				pointstr=tempstr.substring(0,(tempstr.length-1));
				var point3=new BMap.Point(clng,clat);
				var point2=ctool.coor2Baidu(point3);
				clng=point2.lng;
				clat=point2.lat;
	        }
			$("#tpoints3").val(pointstr);
			$("#pointlng3").val(clng);
			$("#pointlat3").val(clat);
		}
	}
	
}

//重置
function clearform(){
	if(marker!=""){
		bmap.removeOverlay(marker);
	}
	//清空面标注信息
	if(polygon!=""){
		bmap.removeOverlay(polygon);
	}
	//清空线标注信息
	if(polyline!=""){
		bmap.removeOverlay(polyline);
	}
	$("#assemblyname").val("");
	$("#pointlng1").val("");
	$("#pointlat1").val("");
	$("#pointlng2").val("");
	$("#pointlat2").val("");
	$("#pointlng3").val("");
	$("#pointlat3").val("");
	$("#bigtype").val("");
	$("#smalltype").val("");
	$("#assemblytype").val("");
	//清空点字符串
	pointarr=[];
	$("#tpoints3").val("");
	linepointarr=[];
	$("#tpoints2").val("");
}

//将点数组转化为字符串
function fromArrayToString(pointarr){
	var pointstr=""; 
	for(var i=0;i<pointarr.length;i++){
		pointstr+=pointarr[i].lng+","+pointarr[i].lat+",";
	}
	pointstr=pointstr.substring(0,(pointstr.length-1));
	return pointstr;
}

//将字符串转化为点数组
function fromStringToArray(pointstr){
	var pointarr=[];
	var tpoints=pointstr.split(",")
	for(var i=0;i<tpoints.length;i+=2){
		var tlng=tpoints[i];
		var tlat=tpoints[i+1];
		var tpoint=new BMap.Point(tlng,tlat);
		pointarr.push(tpoint);
	}
	return pointarr;
}

//加载
function loadAllCompDetail(ctypeid){
	var curjgid=$("#curjgid").val();
	$.ajax({
		async:false,
        type: "POST",               
        dataType: "json",               
        url: ctxPath+'/componentDetailAction.do?dispatch=getComponentMapList', 
        data: "curjgid="+curjgid+"&ctypeid="+ctypeid,
        success: function(data) {
        	for(var i=0;i<data.length;i++){
        		var obj=data[i];
        		addCoverObj(obj);
        	}
        }
    });
}

//添加覆盖物
function addCoverObj(obj){
	var curmaptype=bmap.getMapType();
	//坐标转换类
	var ctool=new CoorTools(bmap); 
	var tpoints=obj.tpoints;
	var tcolor=obj.assemblycolor;
	var pointlng=obj.longitude;
	var pointlat=obj.latitude;
	var assemblyname=obj.assemblyname;
	var assemblytype=obj.assemblytype;
	var timg=obj.assemblyicon;
	if(tcolor==""||tcolor==null){
		tcolor='red';
	}
	var iconImg = new BMap.Icon(ctxPath+timg, new BMap.Size(20,50),{
    	imageOffset: new BMap.Size(0,0),
    	offset:new BMap.Size(0,0)
    });
	if(assemblytype=="1"){//点
		var cpoint=new BMap.Point(pointlng,pointlat);
		if(curmaptype._name=="MyMap"){
			cpoint=ctool.coor2Baidu3D(cpoint);
	    }	
	    var marker1 = new BMap.Marker(cpoint,{icon:iconImg,title:assemblyname,offset:new BMap.Size(0,-24)});
	    bmap.addOverlay(marker1);
	    compmarkerarr1.push(marker1);
	}else if(assemblytype=="2"){//线
		if(tpoints!=""&&tpoints!=null){
			if(curmaptype._name=="MyMap"){
				var tempstr="";
				var tpointstr=tpoints.split(",")
				for(var i=0;i<tpointstr.length;i+=2){
					var tlng=tpointstr[i];
					var tlat=tpointstr[i+1];
					var point=new BMap.Point(tlng,tlat);
					var npoint=ctool.coor2Baidu3D(point);
					tempstr+=npoint.lng+","+npoint.lat+",";
				}
				tpoints=tempstr.substring(0,(tempstr.length-1));
	        }
			var opointarr=fromStringToArray(tpoints);
			var polyline1=new BMap.Polyline(opointarr,{strokeColor:tcolor,strokeWeight:2,strokeOpacity:0.8});
			bmap.addOverlay(polyline1);
			comppolyline.push(polyline1);
			var cpoint=new BMap.Point(pointlng,pointlat);
			if(curmaptype._name=="MyMap"){
				cpoint=ctool.coor2Baidu3D(cpoint);
		    }	
		    var marker1 = new BMap.Marker(cpoint,{icon:iconImg,title:assemblyname,offset:new BMap.Size(0,-24)});
		    bmap.addOverlay(marker1);
		    compmarkerarr2.push(marker1);
		}
	}else if(assemblytype=="3"){//面
		if(tpoints!=""&&tpoints!=null){
			if(curmaptype._name=="MyMap"){
				var tempstr="";
				var tpointstr=tpoints.split(",")
				for(var i=0;i<tpointstr.length;i+=2){
					var tlng=tpointstr[i];
					var tlat=tpointstr[i+1];
					var point=new BMap.Point(tlng,tlat);
					var npoint=ctool.coor2Baidu3D(point);
					tempstr+=npoint.lng+","+npoint.lat+",";
				}
				tpoints=tempstr.substring(0,(tempstr.length-1));
	        }
			var opointarr=fromStringToArray(tpoints);
			var polygon1=new BMap.Polygon(opointarr,{fillOpacity:0.2,fillColor:tcolor,strokeColor:tcolor,strokeWeight:2,strokeOpacity:0.8});
			bmap.addOverlay(polygon1);
			comppolygon.push(polygon1);
			var cpoint=new BMap.Point(pointlng,pointlat);
			if(curmaptype._name=="MyMap"){
				cpoint=ctool.coor2Baidu3D(cpoint);
		    }	
		    var marker1 = new BMap.Marker(cpoint,{icon:iconImg,title:assemblyname,offset:new BMap.Size(0,-24)});
		    bmap.addOverlay(marker1);
		    compmarkerarr3.push(marker1);
		}
	}
}

//保存
function doSaveComponentDetail(){
	var pointlng="";
	var pointlat="";
	var tpoints="";
	var tcolor=$("#tcolor").val();
	var assemblyname=$("#assemblyname").val();
	var bigtype=$("#bigtype").val();
	var smalltype=$("#smalltype").val();
	var assemblytype=$("#assemblytype").val();
	var lxid=$("#lxid").val();
	var curjgid=$("#curjgid").val();
	if(assemblyname==""){
		alert("名称不能为空!");
		return false;
	}
	if(bigtype==""){
		alert("请选择大类!");
		return false;
	}
	if(smalltype==""){
		alert("请选择小类!");
		return false;
	}
	if(assemblytype==""){
		alert("选择类型!");
		return false;
	}
	if(assemblytype=="1"){
		pointlng=$("#pointlng1").val();
		pointlat=$("#pointlat1").val();
		if(pointlng==""||pointlat==""){
			alert("您还没有在地图上标注位置!");
			return false;
		}
	}else if(assemblytype=="2"){
		tpoints=$("#tpoints2").val();
		if(tpoints==""){
			alert("您还没有在地图上标注位置!");
			return false;
		}
		pointlng=$("#pointlng2").val();
		pointlat=$("#pointlat2").val();
	}else if(assemblytype=="3"){
		tpoints=$("#tpoints3").val();
		if(tpoints==""){
			alert("您还没有在地图上标注位置!");
			return false;
		}
		pointlng=$("#pointlng3").val();
		pointlat=$("#pointlat3").val();
	}
	$.ajax({
        type: "POST",               
        dataType: "json",               
        url: ctxPath+'/componentDetailAction.do?dispatch=saveComponentDetail', 
        data: "pointlng="+pointlng+"&pointlat="+pointlat+"&tpoints="+tpoints+"&tcolor="+tcolor+"&assemblyname="+assemblyname
        	+"&bigtype="+bigtype+"&smalltype="+smalltype+"&assemblytype="+assemblytype+"&lxid="+lxid+"&curjgid="+curjgid,
        success: function(msg) {
        	if(lxid==""){//增加
        		if(msg=="1"){
	        		$("#assemblyname").val("");
	        		$("#pointlng1").val("");
	        		$("#pointlat1").val("");
	        		$("#pointlng2").val("");
	        		$("#pointlat2").val("");
	        		$("#pointlng3").val("");
	        		$("#pointlat3").val("");
	        		$("#bigtype").val("");
					$("#smalltype").val("");
					$("#assemblytype").val("");
					pointarr=[];              
					$("#tpoints3").val("");
					linepointarr=[];              
					$("#tpoints2").val("");
	        		alert("添加成功!");
	        		if(assemblytype=="1"){
	        			for(var i=0;i<compmarkerarr1.length;i++){
	        				bmap.removeOverlay(compmarkerarr1[i]);
	        			}
	        			compmarkerarr1=[];
	        		}else if(assemblytype=="2"){
	        			for(var i=0;i<compmarkerarr2.length;i++){
	        				bmap.removeOverlay(compmarkerarr2[i]);
	        			}
	        			compmarkerarr2=[];
	        			for(var i=0;i<comppolyline.length;i++){
	        				bmap.removeOverlay(comppolyline[i]);
	        			}
	        			comppolyline=[];
	        		}else if(assemblytype=="3"){
	        			for(var i=0;i<compmarkerarr3.length;i++){
	        				bmap.removeOverlay(compmarkerarr3[i]);
	        			}
	        			compmarkerarr3=[];
	        			for(var i=0;i<comppolygon.length;i++){
	        				bmap.removeOverlay(comppolygon[i]);
	        			}
	        			comppolygon=[];
	        		}
	        		loadAllCompDetail(assemblytype);
	        		removeMapListener();
	        	}else{
	        		alert("添加失败!");
	        	}
        	}else{//修改
        		if(msg=="1"){
        			pointarr=[]; 
        			linepointarr=[];                 
        			if(assemblytype=="1"){
	        			for(var i=0;i<compmarkerarr1.length;i++){
	        				bmap.removeOverlay(compmarkerarr1[i]);
	        			}
	        			compmarkerarr1=[];
	        		}else if(assemblytype=="2"){
	        			for(var i=0;i<compmarkerarr2.length;i++){
	        				bmap.removeOverlay(compmarkerarr2[i]);
	        			}
	        			compmarkerarr2=[];
	        			for(var i=0;i<comppolyline.length;i++){
	        				bmap.removeOverlay(comppolyline[i]);
	        			}
	        			comppolyline=[];
	        		}else if(assemblytype=="3"){
	        			for(var i=0;i<compmarkerarr3.length;i++){
	        				bmap.removeOverlay(compmarkerarr3[i]);
	        			}
	        			compmarkerarr3=[];
	        			for(var i=0;i<comppolygon.length;i++){
	        				bmap.removeOverlay(comppolygon[i]);
	        			}
	        			comppolygon=[];
	        		}
	        		loadAllCompDetail(assemblytype);
        			alert("修改成功!");
        			removeMapListener();
        		}else{
	        		alert("修改失败!");
	        	}
        	}
        }
    });
}

var dwmarker="";
function doDingwei(){
	var curmaptype=bmap.getMapType();
	//坐标转换类
	var ctool=new CoorTools(bmap);   
	if(dwmarker!=""){
		bmap.removeOverlay(dwmarker);
		dwmarker="";
	}
	var assemblytype=$("#assemblytype").val();
	var pointlng="";
	var pointlat="";
	if(assemblytype=="1"){
		pointlng=$("#pointlng1").val();
		pointlat=$("#pointlat1").val();
	}else if(assemblytype=="2"){
		pointlng=$("#pointlng2").val();
		pointlat=$("#pointlat2").val();
	}else if(assemblytype=="3"){
		pointlng=$("#pointlng3").val();
		pointlat=$("#pointlat3").val();
	}
	var iconImg = new BMap.Icon(ctxPath+"/images/dw.gif", new BMap.Size(45,45),{
    	imageOffset: new BMap.Size(0,0),
    	offset:new BMap.Size(0,0)
    });
	var dwpoint=new BMap.Point(pointlng,pointlat);
	if(curmaptype._name=="MyMap"){
		dwpoint=ctool.coor2Baidu3D(dwpoint);
    }
	dwmarker= new BMap.Marker(dwpoint,{icon:iconImg,offset:new BMap.Size(0,0)});
	bmap.addOverlay(dwmarker);
	bmap.panTo(dwpoint);
	setTimeout(function(){
		if(dwmarker!=""){
			bmap.removeOverlay(dwmarker);
			dwmarker="";
		}
	},3000)
}

//加载热区
function loadGridHotArea(){
	var curjgid=$("#curjgid").val();
	$.ajax({
		async:false,
        type: "POST",               
        dataType: "json",               
        url: ctxPath+'/gridOrgAction.do?dispatch=getGridOrgById', 
        data: "lxid="+curjgid,
        success: function(data) {
       		var obj=new Object();
       		obj.reseauarea=data.tpoints;
       		obj.tcolor=data.tcolor;
       		obj.pointlng=data.pointlng;
       		obj.pointlat=data.pointlat;
       		obj.reseauname=data.reseauname;
       		addGridCoverObj(obj);
        }
    });
}

//添加覆盖物
function addGridCoverObj(obj){
	var curmaptype=bmap.getMapType();
	//坐标转换类
	var ctool=new CoorTools(bmap); 
	var tpoints=obj.reseauarea;
	var tcolor=obj.tcolor;
	var pointlng=obj.pointlng;
	var pointlat=obj.pointlat;
	var reseauname=obj.reseauname;
	if(tcolor==""||tcolor==null){
		tcolor='red';
	}
	if(tpoints!=""&&tpoints!=null){
		if(curmaptype._name=="MyMap"){
			var tempstr="";
			var tpointstr=tpoints.split(",")
			for(var i=0;i<tpointstr.length;i+=2){
				var tlng=tpointstr[i];
				var tlat=tpointstr[i+1];
				var point=new BMap.Point(tlng,tlat);
				var npoint=ctool.coor2Baidu3D(point);
				tempstr+=npoint.lng+","+npoint.lat+",";
			}
			tpoints=tempstr.substring(0,(tempstr.length-1));
        }
		var opointarr=fromStringToArray(tpoints);
		var polygon1=new BMap.Polygon(opointarr,{fillOpacity:0.2,fillColor:tcolor,strokeColor:tcolor,strokeWeight:2,strokeOpacity:0.8});
		bmap.addOverlay(polygon1);
		gridareaarr.push(polygon1);
		var cpoint=new BMap.Point(pointlng,pointlat);
		if(curmaptype._name=="MyMap"){
			cpoint=ctool.coor2Baidu3D(cpoint);
	    }	
		var myLabel = new BMap.Label(reseauname,     //为lable填写内容    
			{offset:new BMap.Size(-15,-15),    //label的偏移量,为了让label的中心显示在点上    
				position:cpoint
		}); 
		bmap.addOverlay(myLabel);
		gridlabel.push(myLabel);  
	}
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics