service.position_wev8.js 3.88 KB
define("mService/position", ["mUtil", "baidumap"], function(mUtil) {
	
	return {
		mounted: function($page, cfg){
			
			var defCfg = {
				posType : "1",
				poiRadius : 500,
				numPois : 12,
				limit : {
					enabled: false,
					radius: 1000, //半径 单位米
					tip: "当前位置超出限制范围",
					lng: "", //经度, 如121.522443
					lat: ""	 //纬度, 如 31.082311
				},
				success : function(){}
			};
			
			if(mUtil.isFunction(cfg)){
				defCfg.success = cfg;
			}else if(mUtil.isObject(cfg)){
				$.extend(defCfg, cfg);
			}else{
				mUtil.getLabel(383777, "参数不合法",function(msg){
					alert("mService/position " + msg);
                });
				return;
			}
			
			var $mapContainer = $(".map-container", $page);
			
			var b_map = new BMap.Map($mapContainer[0]);
			
			$mapContainer.addClass("positioning");
			Mobile_NS.getCurrentPosition(function(result){
				$mapContainer.removeClass("positioning");
				var point = new BMap.Point(result["lng"], result["lat"]);
				if(defCfg.limit.enabled && defCfg.limit.lng && defCfg.limit.lat){
					var limitLng = defCfg.limit.lng;
					var limitLat = defCfg.limit.lat;
					var limitPoint = new BMap.Point(limitLng, limitLat);
					var distance = b_map.getDistance(limitPoint, point).toFixed(0);
					if(distance > defCfg.limit.radius){
						Mobile_NS.alert(defCfg.limit.tip, function(){
							mUtil.back();
						});
						return;
					}
				}
				b_map.centerAndZoom(point, 16);
				b_map.addControl(new BMap.NavigationControl({anchor: BMAP_ANCHOR_BOTTOM_RIGHT, type: BMAP_NAVIGATION_CONTROL_SMALL}));
				if(defCfg.posType == "3"){
					b_map.addEventListener("click", function(e){
						moveToPoint(e.point);
					});
				}
				moveToPoint(point);
			});
			
			function moveToPoint(point){
				
				b_map.clearOverlays();    //清除地图上所有覆盖物
				b_map.addOverlay(new BMap.Marker(point));
				b_map.panTo(point);	
				
				var $poiContainer = $(".poi-container", $page);
				var $poiUL = $poiContainer.children("ul");
				var $poiLoading = $poiContainer.children(".mask");
				$poiUL.find("*").remove();
				$poiLoading.show();
				
				var mOption = null;
				if(defCfg.numPois > 0){
					mOption = {    
						poiRadius : defCfg.poiRadius,           //半径为500米内的POI,默认100米    
						numPois : defCfg.numPois                //列举出12个POI,默认10个
					};
				}
				
				mUtil.getLabel(22981, "位置",function(location){
					var geoc = new BMap.Geocoder();
					geoc.getLocation(point, function(rs){
						$poiLoading.hide();
						var addComp = rs.addressComponents;
						var province = addComp.province;
						var city = addComp.city;
						var pAndC = (province == city) ? province : province + city;
						var addr = pAndC + addComp.district + addComp.street + addComp.streetNumber;
						
						var templateHtml = [
	                        '<li class="wev-table-view-cell" data-lng="${point.lng}" data-lat="${point.lat}" data-addr="{@if title==\'['+location+']\'}${address}{@else}${title}{@/if}">',
	                              '<a href="javascript:void(0);">',
	                                  '<div>${title}</div>',
	                                  '<div>${address}</div>',
	                              '</a>',
	                        '</li>',
		                ].join('');
						
						$poiUL.append(mUtil.parseTemplate(templateHtml, {"point":point, "title":"["+location+"]", "address":addr}));
						
						if(mOption){
							var pois = rs.surroundingPois;       //获取全部POI(该点半径为100米内有6个POI点)
							for(i=0; i<pois.length; ++i){
								$poiUL.append(mUtil.parseTemplate(templateHtml, pois[i]));
							}
						}
						
						$("li", $poiUL).click(function(){
							var callback = defCfg.success;
							callback && callback($(this).data("lng")+","+$(this).data("lat"), $(this).data("addr"));
							mUtil.back();
						});
						
					}, mOption);
                });
			}
		}
	};
});