navigation.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  1. (function () {
  2. var page = {
  3. init: function ($page, param) {
  4. console.log('~~~~~~~~~~~~');
  5. console.log(param);
  6. var geocoder = null;
  7. var originName='';//北四环东路 望和路
  8. var origin = new Array();//origin[0]为纬度,origin[1]为经度
  9. if(param.startEnd.start){
  10. var start = param.startEnd.start;
  11. origin = new Array(start.lat, start.lng)
  12. if(!geocoder){
  13. geocoder = new AMap.Geocoder({
  14. radius: 50
  15. });
  16. }
  17. geocoder.getAddress(start, function(status, result) {
  18. if (status === 'complete' && result.regeocode) {
  19. var address = result.regeocode.formattedAddress;
  20. originName = address;
  21. }else{console.log(JSON.stringify(result))}
  22. });
  23. }
  24. var destinationName = param.endAddress;
  25. var destination=new Array(param.startEnd.end.lat, param.startEnd.end.lng);//目的地纬度、经度。先纬度后经度
  26. renlian.layer.loading(true, "加载数据中");
  27. //地图初始化
  28. var map = new AMap.Map("navigation-map", {
  29. resizeEnable: true,
  30. center: [113.955439, 22.542956],//地图中心点
  31. zoom: 12 //地图显示的缩放级别
  32. });
  33. var mapList = [
  34. {
  35. value: "com.baidu.BaiduMap",
  36. text: "百度地图",
  37. },
  38. {
  39. value: "com.autonavi.minimap",
  40. text: "高德地图",
  41. },
  42. {
  43. value: "com.tencent.map",
  44. text: "腾讯地图",
  45. },
  46. {
  47. value: "com.google.android.apps.maps",
  48. text: "谷歌地图",
  49. }
  50. ];
  51. map.on('complete', function(){
  52. renlian.layer.loading(false);
  53. });
  54. if(!param.startEnd.start){
  55. renlian.layer.toast('无法获取定位点');
  56. }
  57. var riding = null;
  58. var userMarker = new AMap.Marker({icon: "./images/location.png", offset:new AMap.Pixel(-16, -16)});
  59. //骑行导航
  60. if(!riding){
  61. var riding = new AMap.Riding({
  62. map: map,
  63. autoFitView: true
  64. });
  65. }
  66. //根据起终点坐标规划骑行路线
  67. riding.search(param.startEnd.start, param.startEnd.end, function(status, result) {
  68. // result即是对应的骑行路线数据信息,相关数据结构文档请参考 https://lbs.amap.com/api/javascript-api/reference/route-search#m_RidingResult
  69. if (status === 'complete') {
  70. // renlian.layer.toast('绘制骑行路线完成:');
  71. } else {
  72. renlian.layer.toast('骑行路线数据查询失败:' + result);
  73. }
  74. });
  75. var presentLnglat = null;
  76. function get_mobile_gps_location(onSuccess,onError){
  77. var onSuccess = function(position) {
  78. // alert('Latitude: ' + position.coords.latitude + '\n' +
  79. // 'Longitude: ' + position.coords.longitude + '\n' +
  80. // 'Altitude: ' + position.coords.altitude + '\n' +
  81. // 'Accuracy: ' + position.coords.accuracy + '\n' +
  82. // 'Altitude Accuracy: ' + position.coords.altitudeAccuracy + '\n' +
  83. // 'Heading: ' + position.coords.heading + '\n' +
  84. // 'Speed: ' + position.coords.speed + '\n' +
  85. // 'Timestamp: ' + position.timestamp + '\n');
  86. var gps = [position.coords.longitude, position.coords.latitude];
  87. AMap.convertFrom(gps, 'gps', function (status, result) {
  88. if (result.info === 'ok') {
  89. var lnglats = result.locations; // Array.<LngLat>
  90. }
  91. presentLnglat = new AMap.LngLat(lnglats[0].lng, lnglats[0].lat);
  92. userMarker.setPosition(presentLnglat);
  93. userMarker.setMap(map);
  94. });
  95. // presentLnglat = new AMap.LngLat(position.coords.longitude, position.coords.latitude);
  96. // userMarker.setPosition(presentLnglat);
  97. // userMarker.setMap(map);
  98. };
  99. // onError Callback receives a PositionError object
  100. //
  101. function onError(error) {
  102. console.log('code: ' + error.code + '\n' +
  103. 'message: ' + error.message + '\n');
  104. }
  105. navigator.geolocation.getCurrentPosition(onSuccess, onError);
  106. }
  107. var locationAuto = setInterval(function(){
  108. if($('.f-page').length < 2){
  109. clearTimeout(locationAuto);
  110. }
  111. if(window.lrmui.isreal){
  112. get_mobile_gps_location();
  113. var lnglat = presentLnglat;
  114. // var lnglat = [113.951104,22.542902];
  115. if(!geocoder){
  116. geocoder = new AMap.Geocoder({
  117. radius: 50
  118. });
  119. }
  120. origin = new Array(lnglat.lat, lnglat.lng);
  121. geocoder.getAddress(lnglat, function(status, result) {
  122. if (status === 'complete' && result.regeocode) {
  123. var address = result.regeocode.formattedAddress;
  124. originName = address;
  125. $('#navg-address').text(address);
  126. }else{console.log(JSON.stringify(result))}
  127. });
  128. }
  129. }, 2000);
  130. function haveInstalledApp(){//通过包名判断app是否安装
  131. var mapList = document.getElementsByClassName('mapLi');
  132. var baiduPackageName = "com.baidu.BaiduMap";
  133. var gaodePackageName = "com.autonavi.minimap";
  134. var tengxunPackageName = "com.tencent.map";
  135. var gugePackageName = "com.google.android.apps.maps";
  136. appAvailability.check(baiduPackageName,function () {//success callback
  137. mapList.item(0).style.display = 'block';
  138. },function () {//
  139. mapList.item(0).style.display = 'none';
  140. });
  141. appAvailability.check(gaodePackageName,function () {//success callback
  142. mapList.item(1).style.display = 'block';
  143. },function () {//
  144. mapList.item(1).style.display = 'none';
  145. });
  146. appAvailability.check(tengxunPackageName,function () {//success callback
  147. mapList.item(2).style.display = 'block';
  148. },function () {//
  149. mapList.item(2).style.display = 'none';
  150. });
  151. appAvailability.check(gugePackageName,function () {//success callback
  152. mapList.item(3).style.display = 'block';
  153. // mapList.item(4).style.display = 'block';
  154. },function () {
  155. mapList.item(3).style.display = 'none';
  156. // mapList.item(4).style.display = 'none';
  157. });
  158. }
  159. $('#daohang-button').rlpicker({
  160. data: mapList
  161. },function(map){
  162. renlian.layer.toast(JSON.stringify(originName));
  163. appAvailability.check(map,function () {//success callback
  164. if(!origin){
  165. renlian.layer.toast('无法获取定位点');
  166. return;
  167. }
  168. if(map == 'com.baidu.BaiduMap'){
  169. checkBaidu();
  170. }
  171. if(map == 'com.autonavi.minimap'){
  172. checkGaode();
  173. }
  174. if(map == 'com.tencent.map'){
  175. checkTengxun();
  176. }
  177. if(map == 'com.google.android.apps.maps'){
  178. checkGuge();
  179. }
  180. },function () {//
  181. renlian.layer.warning('未检测到安装了该地图应用', function () { }, '提示', '确定');
  182. });
  183. });
  184. //
  185. function checkBaidu(){
  186. var sApp = startApp.set({ /* params */
  187. "action":"ACTION_VIEW",
  188. "category":"CATEGORY_DEFAULT",
  189. "type":"text/css",
  190. "package":"com.baidu.BaiduMap",
  191. "uri":"baidumap://map/direction?origin=name:"+originName+"|latlng:"+origin[0]+","+origin[1]+"&destination=name:"+destinationName+"|latlng:"+destination[0]+","+destination[1]+"&mode=driving",
  192. "flags":["FLAG_ACTIVITY_CLEAR_TOP","FLAG_ACTIVITY_CLEAR_TASK"],
  193. "intentstart":"startActivity"
  194. });
  195. sApp.start(function() { /* success */
  196. //alert("OK");
  197. }, function(error) { /* fail */
  198. alert(error);
  199. });
  200. }
  201. function checkGaode(){
  202. var sApp = startApp.set({ /* params */
  203. "action":"ACTION_VIEW",
  204. "category":"CATEGORY_DEFAULT",
  205. "type":"text/css",
  206. "package":"com.autonavi.minimap",
  207. "uri":"amapuri://route/plan/?slat="+origin[0]+"&slon="+origin[1]+"&sname="+originName+"&dlat="+destination[0]+"&dlon="+destination[1]+"&dname="+destinationName+"&dev=0&t=0",
  208. "flags":["FLAG_ACTIVITY_CLEAR_TOP","FLAG_ACTIVITY_CLEAR_TASK"],
  209. "intentstart":"startActivity"
  210. });
  211. sApp.start(function() { /* success */
  212. //alert("OK");
  213. }, function(error) { /* fail */
  214. alert(error);
  215. });
  216. }
  217. function checkTengxun(){
  218. var sApp = startApp.set({ /* params */
  219. "action":"ACTION_VIEW",
  220. "category":"CATEGORY_DEFAULT",
  221. "type":"text/css",
  222. "package":"com.tencent.map",
  223. "uri":"qqmap://map/routeplan?type=drive&from="+originName+"&fromcoord="+origin[0]+","+origin[1]+"&to="+destinationName+"&tocoord="+destination[0]+","+destination[1]+"&coord_type=1&policy=0",
  224. "flags":["FLAG_ACTIVITY_CLEAR_TOP","FLAG_ACTIVITY_CLEAR_TASK"],
  225. "intentstart":"startActivity"
  226. });
  227. sApp.start(function() { /* success */
  228. //alert("OK");
  229. }, function(error) { /* fail */
  230. alert(error);
  231. });
  232. }
  233. function checkGuge(){//指定终点经纬度,默认当前位置
  234. var sApp = startApp.set({ /* params */
  235. "action":"ACTION_VIEW",
  236. "category":"CATEGORY_DEFAULT",
  237. "type":"text/css",
  238. "package":"com.google.android.apps.maps",
  239. "uri":"google.navigation:q="+destination[0]+","+destination[1],
  240. "flags":["FLAG_ACTIVITY_CLEAR_TOP","FLAG_ACTIVITY_CLEAR_TASK"],
  241. "intentstart":"startActivity"
  242. });
  243. sApp.start(function() { /* success */
  244. //alert("OK");
  245. }, function(error) { /* fail */
  246. alert(error);
  247. });
  248. }
  249. },
  250. reload:function(pageinfo){
  251. console.log('testsfadfasd')
  252. }
  253. };
  254. return page;
  255. })();