service.position4amap_wev8.js 5.67 KB
define("mService/position4amap", ["mUtil", "amap"], function(mUtil) {
	
	return {
		mounted: function($page, cfg){
		    var $poiContainer = $(".poi-container", $page);
			var defCfg = {
				posType : "1",
				poiRadius : 500,
				numPois : 12,
				limit : {
					enabled: false,
					radius: 1000,      //半径 单位米
					tip: "当前位置超出限制范围",
					lng: "",           //经度, 如121.522443
					lat: "",           //纬度, 如 31.082311
					coordinateType: 1  //坐标类型  1:高德,腾讯地图类的坐标系。2:百度地图类的坐标系。3:gps类的坐标系
				},
				success : function(){}
			}, amap;
			
			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;
			}
			if(defCfg.posType == "1"){
			    defCfg.numPois = -1;
			}
			
			var $mapContainer = $(".map-container", $page);
			
			$mapContainer.addClass("positioning");
			Mobile_NS.getCurrPosition(function(result){
			    //var result = {lng: '121.5228290000', lat: '31.0851690000'};
			    $mapContainer.removeClass("positioning");
				var currPoint = [result["lng"], result["lat"]];
				amap = new AMap.Map($mapContainer[0], {
	                resizeEnable: true, //是否监控地图容器尺寸变化
	                zoom: 16,
	                center: currPoint
	            });
				//缩放功能
				AMap.plugin(['AMap.ToolBar'], function(){
				     amap.addControl(new AMap.ToolBar({
		                 liteStyle: true
		             }));
		         });
				if(defCfg.limit.enabled && defCfg.limit.lng && defCfg.limit.lat){
				    var checkLimit = function(){
				        var limitPoint = [defCfg.limit.lng, defCfg.limit.lat];
	                    var distance = AMap.GeometryUtil.distance(limitPoint, currPoint);
	                    if(distance > defCfg.limit.radius){
	                        Mobile_NS.alert(defCfg.limit.tip, function(){
	                            mUtil.back();
	                        });
	                    }
				    };
				    if(defCfg.limit.coordinateType == 1){
				        checkLimit();
				    }else{
				        require(["amapHelper"], function(amapHelper){
				            amapHelper.convertPoint([defCfg.limit.lng, defCfg.limit.lat], defCfg.limit.coordinateType, function(limitTransedPoint){
				                defCfg.limit.lng = limitTransedPoint[0];
	                            defCfg.limit.lat = limitTransedPoint[1];
	                            checkLimit();
	                        });
				        });
				    }
				}
				if(defCfg.posType == "3"){
				    amap.on("click", function(e){
				        moveToPoint([e.lnglat.getLng(), e.lnglat.getLat()]);
					});
				}
				moveToPoint(currPoint);
			});
				
			$poiContainer.on("click", "li.wev-table-view-cell", function(){
                var callback = defCfg.success;
                callback && callback($(this).data("lng"), $(this).data("lat"), $(this).data("addr"));
                mUtil.back();
            });
			
			function moveToPoint(point){
			    amap.clearMap();
			    amap.setCenter(point);
			    amap.add(new AMap.Marker({
                    position: point,
                    icon: new AMap.Icon({
                        size: new AMap.Size(30, 30),
                        image: '/mobilemode/mobile/images/plugin/current-location.png',
                        imageSize: new AMap.Size(30, 30),
                        imageOffset: new AMap.Pixel(0, 0)
                    }),
                    offset: new AMap.Pixel(-15, -25)
                }));
			    
			    var $poiUL = $poiContainer.children("ul");
                var $poiLoading = $poiContainer.children(".mask");
                $poiUL.find("*").remove();
                
			    mUtil.getMultiLabel({'5462': "当前位置", '5461': '不显示位置'},function(labels){
			        var templateHtml = [
                        '<li class="wev-table-view-cell" data-lng="${point.lng}" data-lat="${point.lat}" data-addr="{@if showAddress}${address}{@else}${title}{@/if}">',
                              '<a href="javascript:void(0);">',
                                  '<div>${title}</div>',
                                  '<div>${address}</div>',
                              '</a>',
                        '</li>',
                    ].join('');
                    
                    require(["amapHelper"], function(amapHelper){
                        $poiLoading.show();
                        amapHelper.getAddress(point[0], point[1], function(result){
                            var renderHtml = mUtil.parseTemplate(templateHtml, {point: {lng: "", lat: ""}, showAddress: true, title: labels['5461'], address: ""});
                            renderHtml += mUtil.parseTemplate(templateHtml, {point: {lng: point[0], lat: point[1]}, showAddress: true, title:"["+labels['5462']+"]", address: result.addr});
                            if(defCfg.numPois > 0){
                                amapHelper.searchNearBy(point, defCfg.poiRadius, defCfg.numPois, function(datas){
                                    $poiLoading.hide();
                                    datas.forEach(function(item){
                                        renderHtml += mUtil.parseTemplate(templateHtml, item);
                                    });
                                    $poiUL.append(renderHtml);
                                });
                            }else{
                                $poiLoading.hide();
                                $poiUL.append(renderHtml);
                            }
                        });
                    });
			    });
			}
		}
	};
});