carpark-positions-map.js 12.1 KB
/**
 * 百度地图
 * 
 */

var CarParkPWorldsBMap = function () {
	
	var mapValue='',drawingManager='',marker='',circle='',polygon='';
	
	var Bmap = {
			init : function() {
				// 设置中心点,
				var CENTER_POINT = {lng: 103.52514, lat: 30.589808};
				// 百度API Key
				var bdKey = '1TgEKvYqohJyeGXnN6yHSSTb4psOarQw';
				// 初始化百度地图
				mapValue = new BMap.Map("carParkbmap_basic");
				//中心点和缩放级别
				mapValue.centerAndZoom(new BMap.Point(CENTER_POINT.lng,CENTER_POINT.lat), 15);
				//启用地图拖拽事件,默认启用(可不写)
				mapValue.enableDragging(); 
				//启用地图滚轮放大缩小
				mapValue.enableScrollWheelZoom(); 
				//禁用鼠标双击放大
				mapValue.disableDoubleClickZoom();
				//启用键盘上下左右键移动地图
				mapValue.enableKeyboard();
				var styleOptions = {
						//边线颜色。
						strokeColor : "blue",
						//填充颜色。当参数为空时,圆形将没有填充效果。
						fillColor : "blue",
						//边线的宽度,以像素为单位。
						strokeWeight : 3,
						//边线透明度,取值范围0 - 1。
						strokeOpacity : 0.8,
						//填充的透明度,取值范围0 - 1。
						fillOpacity : 0.6,
						//边线的样式,solid或dashed。
						strokeStyle : 'solid' 
				};
				// 创建鼠标绘制管理类
				drawingManager = new BMapLib.DrawingManager(mapValue, {
					//是否开启绘制模式
					isOpen : false,
					//是否显示工具栏
					enableDrawingTool : false,
					drawingToolOptions : {
						//位置
						anchor : BMAP_ANCHOR_TOP_RIGHT,
						//偏离值
						offset : new BMap.Size(5, 5),
						//工具栏缩放比例
						scale : 0.8
					},
					//线的样式
					polygonOptions : styleOptions
				});
				// 添加绘画完成事件
				drawingManager.addEventListener('polygoncomplete', function(e) {
					 drawingManager.close();
					 if (e.getPath().length <= 2) {
						// 弹出提示消息
						layer.msg('坐标点不能小于等于两个...');
						 // 清除地图覆盖物
						Bmap.clearMarkAndOverlays();
						// 加载该线路下所有站点位置添加到地图上
						return false;
					 }else {
						 var pointE = e;
						 // 多变行质心点
						 var addSttationPoints_ = pointE.getBounds().getCenter().lng+ ' ' + pointE.getBounds().getCenter().lat;
						 var addPolyGonLen_ = pointE.getPath().length;
						 for(var k =0;k<addPolyGonLen_;k++) {
							 if(k==0) {
								 bPloygonGrid = pointE.getPath()[k].lng + ' ' + pointE.getPath()[k].lat;
							 }else {
								 bPloygonGrid = bPloygonGrid + ',' + pointE.getPath()[k].lng + ' ' + pointE.getPath()[k].lat;
							 }
								
						 }
						 bPloygonGrid  = bPloygonGrid + ',' + pointE.getPath()[0].lng + ' ' + pointE.getPath()[0].lat;
						 /** 设置修改停车场集合对象图形质心点属性 @param:<addSttationPoints_:多边形质心点> */
						 EditCarParkObj.setCarParkBcenterPoint(addSttationPoints_);
						 /** 设置修改停车场集合对象图形类型属性 @param:<shapeType:图形类型> */
						 EditCarParkObj.setCarParkShapesType('d');
						 /** 设置修改停车场集合对象圆形半径属性 @param:<radius:圆形半径> */
						 EditCarParkObj.setCarParkRadius('');
						 /** 设置修改停车场集合对象名称 @param:<bParkPoint:多边形图形坐标集合> */
						 EditCarParkObj.setCarParkBparkPoint(bPloygonGrid);
						 $.get('edit.html', function(m){
							 $(pjaxContainer).append(m);
							 $('#editPoitsions_carpark_mobal').trigger('editCarParkMobal_show', [CarParkPWorldsBMap,PublicFunctions,EditCarParkObj,GetAjaxData]);
						 });
					 }
				});
				return mapValue;
			},
			openDrawingManager : function() {
				// 清楚地图覆盖物
				// mapValue.clearOverlays();
				// 打开鼠标绘画工具
				drawingManager.open();
				// 设置属性
				drawingManager.setDrawingMode(BMAP_DRAWING_POLYGON);
			},
			drawingManagerClose : function() {
				drawingManager.close();
			},
			localSearchFromAdreesToPoint: function(Address) {
				// 创建一个搜索类实例
				var localSearch = new BMap.LocalSearch(mapValue);
				// 检索完成后的回调函数。
				localSearch.setSearchCompleteCallback(function (searchResult) {
					var resultPoints = '';
					if(searchResult) {
						// 返回索引指定的结果。索引0表示第1条结果
						var poi = searchResult.getPoi(0);
						if(poi) {
							//获取经度和纬度
							var Points = poi.point.lng + ' ' + poi.point.lat;
							var BJwpointsArray = Points.split(' ');
            				var stationNameChangePoint = new BMap.Point(BJwpointsArray[0], BJwpointsArray[1]);
            		  		var marker_stargt2 = new BMap.Marker(stationNameChangePoint); 
            		  		var PanOptions ={noAnimation :true};
            		  		mapValue.panTo(stationNameChangePoint,PanOptions);
            		  		mapValue.panBy(0,-200);
            		  		// 将标注添加到地图中
            		  		mapValue.addOverlay(marker_stargt2);  
            		  		//跳动的动画
            		  		marker_stargt2.setAnimation(BMAP_ANIMATION_BOUNCE); 
						} 
					} 
				});
				// 根据检索词发起检索。
				localSearch.search(Address);
			},
			/**  画圆 @param:<r:停车场信息;point:中心点;htm:信息窗口html文本;pots:信息窗口参数属性> */
			pointsCircle : function(r,point,htm,opts) {
				//创建圆
		  		circle = new BMap.Circle(point,r[0].carParkRadius,{strokeColor:"blue", strokeWeight:2, strokeOpacity:0.5});
		  		// 允许覆盖物在map.clearOverlays方法中被清除
		  		circle.enableMassClear();
		  		// 百度地图添加覆盖物圆
		  		mapValue.addOverlay(circle);
		  		// 创建信息窗口
		  		infoWindow = new BMap.InfoWindow(htm, opts);
			  	// 自定义标注物图片
		  	    var icon_target = new BMap.Icon('/pages/base/stationroute/css/img/cz.png',new BMap.Size(20, 20));
		  	  	// 创建点
				marker = new BMap.Marker(point,{icon : icon_target}); 
				// 把标注添物加到地图上
				mapValue.addOverlay(marker);
			  	setTimeout(function(){
			  		//开启信息窗口
			  	  	marker.openInfoWindow(infoWindow,point);
			  	},100);
		  		// 是否在平移过程中禁止动画。(自1.2新增)
		  		var PanOptions_ ={noAnimation :true};
		  		// 将地图的中心点更改为给定的点。
		  		mapValue.panTo(point,PanOptions_);
		  		// 添加标志物监听事件
		  		marker.addEventListener("click",function() {
		  			//开启信息窗口
		  			marker.openInfoWindow(infoWindow,point);
			  	});
			},
			
			/** 画多边形 @param:<r:停车场信息;point:中心点;htm:信息窗口html文本;pots:信息窗口参数属性> */
			pointsPolygon : function(r,pointPolygon,htm,opts_polygon) {
				// 将视图切换到指定的缩放等级,中心点坐标不变。注意:当有信息窗口在地图上打开时,地图缩放将保证信息窗口所在的坐标位置不动。(自1.2新增)
				mapValue.setZoom(17);
				// 获取多边形坐标字符串
				var stationBPolygonGrid = r[0].carParkBparkPoint;
				// 截取多边形坐标字符串
				var stationBPolygonGridStr = stationBPolygonGrid.substring(9,stationBPolygonGrid.length-2);
				// 按逗号切割
				var pointPolygonArray = stationBPolygonGridStr.split(',');
				// 多边形坐标集合
				var polygonP = [];
				for(var v = 0;v<pointPolygonArray.length;v++) {
					polygonP.push(new BMap.Point(pointPolygonArray[v].split(" ")[0],pointPolygonArray[v].split(" ")[1]));
				}
				// 画多边形
				polygon = new BMap.Polygon(polygonP, {
					// 线条显色
		  			strokeColor : "blue",
		  			// 边线的宽度,以像素为单位。
		  			strokeWeight : 2,
		  			// 边线透明度,取值范围0 - 1。
		  			strokeOpacity : 0.5
		  		});
				// 增加地图覆盖物多边形
				mapValue.addOverlay(polygon);  
				// 创建信息窗口
				infoWindow = new BMap.InfoWindow(htm, opts_polygon);
			  	// 自定义标注物图片
		  	    var icon_target = new BMap.Icon('/pages/base/stationroute/css/img/cz.png',new BMap.Size(20, 20));
		  	  	// 创建点
				marker = new BMap.Marker(pointPolygon,{icon : icon_target}); 
				// 把标注添物加到地图上
				mapValue.addOverlay(marker);
		  		// 是否在平移过程中禁止动画。(自1.2新增)
		  		var PanOptions_ ={noAnimation :true};
		  		// 将地图的中心点更改为给定的点。
		  		mapValue.panTo(pointPolygon,PanOptions_);
		  		// 将地图在水平位置上移动x像素,垂直位置上移动y像素。
		  		mapValue.panBy(10,-250,PanOptions_);
		  		//开启信息窗口
		  		marker.openInfoWindow(infoWindow,pointPolygon);
			},
			
			// 编辑图形
			editShapes : function(stationShapesTypeV,mindex) {
				// 关闭信息窗口
				marker.closeInfoWindow();
				// 清除marker
				mapValue.removeOverlay(marker);
				// 编辑圆
				if(stationShapesTypeV =='r') {
					// 开启编辑功能
					circle.enableEditing();
					// 编辑圆监听事件
					circle.addEventListener('dblclick',function() {
						// 关闭提示弹出层
						layer.close(mindex);
						// 返回圆形的半径,单位为米。
						var newRadius = circle.getRadius();
						// 返回圆形的中心点坐标。
						var newCenter = circle.getCenter().lng + ' ' + circle.getCenter().lat;
						var centre_New = [{potion:{lng:circle.getCenter().lng,lat:circle.getCenter().lat}}];
						 /** 设置修改停车场集合对象图形质心点属性 @param:<addSttationPoints_:多边形质心点> */
						 EditCarParkObj.setCarParkBcenterPoint(newCenter);
						 /** 设置修改停车场集合对象图形类型属性 @param:<shapeType:图形类型> */
						 EditCarParkObj.setCarParkShapesType('r');
						 /** 设置修改停车场集合对象圆形半径属性 @param:<radius:圆形半径> */
						 EditCarParkObj.setCarParkRadius(Math.round(newRadius));
						 /** 设置修改停车场集合对象名称 @param:<bParkPoint:多边形图形坐标集合> */
						 EditCarParkObj.setCarParkBparkPoint('');
						// 加载编辑页面
						$.get('edit.html', function(m){
							$(pjaxContainer).append(m);
							$('#editPoitsions_carpark_mobal').trigger('editCarParkMobal_show', [CarParkPWorldsBMap,PublicFunctions,EditCarParkObj,GetAjaxData]);
						}); 
					});
				// 编辑多变行
				}else if(stationShapesTypeV =='d') {
					// 开启编辑功能(自 1.1 新增)
					polygon.enableEditing();
					// 添加多变行编辑事件
					polygon.addEventListener('dblclick',function(e) {
						 // 获取编辑的多边形对象
						 var edit_pointE = polygon;
						 var edit_bPloygonGrid = "";
						 var editPolyGonLen_ = edit_pointE.getPath().length;
						 for(var k =0;k<editPolyGonLen_;k++) {
							 if(k==0) {
								 edit_bPloygonGrid = edit_pointE.getPath()[k].lng + ' ' + edit_pointE.getPath()[k].lat;
							 }else {
								 edit_bPloygonGrid = edit_bPloygonGrid + ',' + edit_pointE.getPath()[k].lng + ' ' + edit_pointE.getPath()[k].lat;
							 }
						 }
						 edit_bPloygonGrid  = edit_bPloygonGrid + ',' + edit_pointE.getPath()[0].lng + ' ' + edit_pointE.getPath()[0].lat;
						 // 多边形中心点
						 var centre_points = edit_pointE.getBounds().getCenter().lng + ' ' + edit_pointE.getBounds().getCenter().lat;
						 /** 设置修改停车场集合对象图形质心点属性 @param:<addSttationPoints_:多边形质心点> */
						 EditCarParkObj.setCarParkBcenterPoint(centre_points);
						 /** 设置修改停车场集合对象图形类型属性 @param:<shapeType:图形类型> */
						 EditCarParkObj.setCarParkShapesType('d');
						 /** 设置修改停车场集合对象圆形半径属性 @param:<radius:圆形半径> */
						 EditCarParkObj.setCarParkRadius('');
						 /** 设置修改停车场集合对象名称 @param:<bParkPoint:多边形图形坐标集合> */
						 EditCarParkObj.setCarParkBparkPoint(edit_bPloygonGrid);
						 $.get('edit.html', function(m){
							 $(pjaxContainer).append(m);
							 $('#editPoitsions_carpark_mobal').trigger('editCarParkMobal_show', [CarParkPWorldsBMap,PublicFunctions,EditCarParkObj,GetAjaxData]);
						 });
					});
				}
			},
			clearMarkAndOverlays : function() {
				// 清楚地图覆盖物
				mapValue.clearOverlays();
			}
	}
	return Bmap;
}();