service.position_wev8.js
3.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
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);
});
}
}
};
});