利用百度地图绘制区域(限行区)

最近要搞一个平台要弄一个打卡范围。
然后想起来以前做过一个限行区的地图返回绘制。就去扒拉以前的代码。找出来了。然后来记录一下。

百度地图绘制图案官方文档: http://lbs.baidu.com/jsdemo.htm#f0_7.
首先是引入百度地图资源

<script type="text/javascript"
	src="http://api.map.baidu.com/api?v=3.0&ak=0hT82pj7F8UQM9jkMEsVHeWn8rbN5XFn"></script>
<!--加载鼠标绘制工具-->
<script type="text/javascript"
	src="http://api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.js"></script>
<link rel="stylesheet"
	href="http://api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.css" />
<!--加载检索信息窗口-->
<script type="text/javascript"
	src="http://api.map.baidu.com/library/SearchInfoWindow/1.4/src/SearchInfoWindow_min.js"></script>
<link rel="stylesheet"
	href="http://api.map.baidu.com/library/SearchInfoWindow/1.4/src/SearchInfoWindow_min.css" />

然后定义一个div来放地图

<div id="allmap"
	style="min-width: 1200px; min-height: 800px; max-width: 100%; max-height: 100%;">
</div>

定义两个input标签来存放绘制之后生成的经纬度数组

<!-- 限行区域经度拼接字符串 -->
<input type="hidden" id="jdArray" name="jdArray" value="">
<!-- 限行区域纬度拼接字符串 -->
<input type="hidden" id="wdArray" name="wdArray" value="">

然后是百度地图的api

<script type="text/javascript">
	// 百度地图API功能
    var map = new BMap.Map('allmap');
    var poi = new BMap.Point(113.858543,34.041015);
    map.centerAndZoom(poi, 13);
    map.setCurrentCity("许昌" );
    map.enableScrollWheelZoom();
    var lngStr = ""; //经度拼接字符串
    var latStr = "";  //纬度拼接字符串
    var overlays = [];
	var overlaycomplete = function(e){
		//开启编辑模式(选中区域后可二次拖动)
		//e.overlay.enableEditing();
		
		var resArray = e.overlay.Sn;
		for(i = 0;i<resArray.length;i++){
			if(i<resArray.length-1){ //判断取到的内容是不是最后一个
				lngStr += resArray[i].lng + ",";
				latStr += resArray[i].lat + ",";
			}else{
				lngStr += resArray[i].lng;
				latStr += resArray[i].lat;
			}
		}
		 $("#jdArray").val(lngStr);
		 $("#wdArray").val(latStr);
		//console.log(lngStr)
		//console.log(latStr)
		
		//将多边形保存到数组
        overlays.push(e.overlay);  
    };
    
    
    var styleOptions = {
        strokeColor:"black",    //边线颜色。
        fillColor:"blue",      //填充颜色。当参数为空时,圆形将没有填充效果。
        strokeWeight: 3,       //边线的宽度,以像素为单位。
        strokeOpacity: 0.5,	   //边线透明度,取值范围0 - 1。
        fillOpacity: 0.2,      //填充的透明度,取值范围0 - 1。
        strokeStyle: 'solid' //边线的样式,solid或dashed。
    }
    //实例化鼠标绘制工具
    var drawingManager = new BMapLib.DrawingManager(map, {
        isOpen: false, //是否开启绘制模式
        enableDrawingTool: true, //是否显示工具栏
        drawingToolOptions: {
        	drawingModes : [BMAP_DRAWING_POLYGON],
            anchor: BMAP_ANCHOR_BOTTOM_RIGHT, //位置
            offset: new BMap.Size(700, 70), //偏离值
        },
        polylineOptions: styleOptions, //线的样式
        polygonOptions: styleOptions, //多边形的样式
    });  
	 //添加鼠标绘制工具监听事件,用于获取绘制结果
    drawingManager.addEventListener('overlaycomplete', overlaycomplete);

    function clearAll() {
		for(var i = 0; i < overlays.length; i++){
            map.removeOverlay(overlays[i]);
        }
        overlays.length = 0
    }
	</script>

最下边的这个clearAll()方法 是用来清除所有绘制的图形的。用来做重新绘制的功能。

上面的是添加限行区的时候 进行绘制
如果在查看页面想要回显的话。需要获取的经纬度拼接字符串 然后拆分成数组 然后根据经纬度创建多边形图形

		<script type="text/javascript">
		// 百度地图API功能
	    var map = new BMap.Map('allmap');
	    var poi = new BMap.Point(113.858543,34.041015);
	    map.centerAndZoom(poi, 13);
	    map.setCurrentCity("许昌");
	    map.enableScrollWheelZoom();
	    var jdArrayStr = $("#jdArray").val();
	    var wdArrayStr = $("#wdArray").val();
	    
	    //回显禁行区域
	    //先将字符串给拆分成数组
	    var jdArray = jdArrayStr.split(",");
	    var wdArray = wdArrayStr.split(",");
	    
	    var PolygonArr = [];
	  //遍历  按照顺序存入
   	 for(i=0;i<jdArray.length;i++){
   		PolygonArr.push(new BMap.Point(jdArray[i],wdArray[i]))
   	 }
	  //console.log(PolygonArr)
	    
	    var polygon = new BMap.Polygon(PolygonArr, {
	    	strokeColor:"black", 
	    	fillColor:"blue",
	    	strokeWeight:3, 
	    	strokeOpacity:0.5,
	    	fillOpacity: 0.2});  //创建多边形
	    	map.addOverlay(polygon);
		</script>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

散装程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值