openmap.js 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. // 判断设备类型
  2. export function getDeviceType() {
  3. var userAgent = navigator.userAgent || navigator.vendor || window.opera;
  4. if (userAgent.match(/iPad/i) || userAgent.match(/iPhone/i) || userAgent.match(/iPod/i)) {
  5. return 'iOS'; // iOS device
  6. } else if (userAgent.match(/Android/i)) {
  7. return 'Android'; // Android device
  8. } else {
  9. return 'unknown'; // 其他设备
  10. }
  11. }
  12. // 打开指定的地图APP
  13. // mapAppId 1: 高德地图 2:百度地图 3: 腾讯地图
  14. // longitude, latitude 地点经纬度
  15. // name 地点名称
  16. export function openNavigation(mapAppId, longitude, latitude, name) {
  17. let url = ""; // app url
  18. let webUrl = ""; // web url 用来为用户未安装导航软件时打开浏览器所使用url
  19. let referer = "彩图奔跑"; //应用名称
  20. const deviceType = getDeviceType();
  21. switch (mapAppId) {
  22. //下面是拼接url,不同系统以及不同地图都有不同的拼接字段
  23. case 1: //打开高德地图
  24. if (deviceType == "Android") { // 安卓
  25. url =
  26. `androidamap://viewMap?sourceApplication=appname&poiname=${name}&lat=${latitude}&lon=${longitude}&dev=0`;
  27. } else { //苹果
  28. url =
  29. `iosamap://viewMap?sourceApplication=applicationName&poiname=${name}&lat=${latitude}&lon=${longitude}&dev=0`;
  30. }
  31. webUrl =
  32. `https://uri.amap.com/marker?position=${longitude},${latitude}&name=${name}&src=mypage&coordinate=gaode`
  33. break;
  34. case 2: //打开百度地图
  35. if (deviceType == "Android") { // 安卓
  36. url =
  37. `baidumap://map/marker?location=${latitude},${longitude}&title=${name}&content=${name}&src=andr.baidu.openAPIdemo&coord_type=gcj02`;
  38. } else { //苹果
  39. url =
  40. `iosamap://map/marker?location=${latitude},${longitude}&title=${name}&content=${name}&src=ios.baidu.openAPIdemo&coord_type=gcj02`;
  41. }
  42. webUrl =
  43. `http://api.map.baidu.com/marker?location=${latitude},${longitude}&title=${name}&content=${name}&output=html&src=webapp.baidu.openAPIdemo`
  44. break;
  45. case 3: //打开腾讯地图
  46. if (deviceType == "Android") { // 安卓
  47. url =
  48. `qqmap://map/geocoder?coord=${latitude},${longitude}&title${name}&addr=${name}=&referer=${referer}`
  49. } else { //苹果
  50. url =
  51. `qqmap://map/geocoder?coord=${latitude},${longitude}&title${name}&addr=${name}=&referer=${referer}`;
  52. }
  53. webUrl =
  54. `https://apis.map.qq.com/uri/v1/marker?marker=coord:${latitude},${longitude}&title=${name}&addr=${name}&referer=${referer}`
  55. break;
  56. }
  57. // 如果选中
  58. if (url != "") {
  59. url = encodeURI(url);
  60. document.addEventListener('visibilitychange', function() {
  61. if (document.hidden) { // 当页面被切换至后台时
  62. // console.log("页面已经切换到了后台");
  63. clearTimeout(t);
  64. appInstalled = true;
  65. // uni.showToast({
  66. // title: chooseMap + '已安装,正在打开APP...',
  67. // icon: 'none',
  68. // duration: 2000
  69. // });
  70. } else { // 当页面重新显示在前台时
  71. // console.log("页面已经切换回前台");
  72. }
  73. });
  74. // window.open(url);
  75. window.location.href = url;
  76. let chooseMap = ''
  77. if (mapAppId == 1) {
  78. chooseMap = "高德地图"
  79. } else if (mapAppId == 2) {
  80. chooseMap = "百度地图"
  81. } else {
  82. chooseMap = "腾讯地图"
  83. }
  84. let appInstalled = false;
  85. let t = setTimeout(() => {
  86. if (appInstalled) {
  87. return;
  88. }
  89. uni.showModal({
  90. title: '提示',
  91. content: '您的手机尚未安装' + chooseMap + ',是否要使用浏览器打开?',
  92. confirmText: '确定', //确定文本的文字
  93. cancelText: '取消', //确定文本的文字
  94. showCancel: true, //没有取消按钮的弹框
  95. success: function(res) {
  96. if (res.confirm) {
  97. window.open(webUrl);
  98. // window.location.href = webUrl;
  99. } else if (res.cancel) {
  100. }
  101. }
  102. })
  103. }, 500); // 500毫秒后进行检查
  104. }
  105. }
  106. // [App平台] 打开地图
  107. // 导航 会打开导航菜单供用户选择
  108. export function openNavigation2(longitude, latitude, name) {
  109. let url = ""; // app url
  110. let webUrl = ""; // web url 用来为用户未安装导航软件时打开浏览器所使用url
  111. let referer = "SKK"; //应用名称
  112. plus.nativeUI.actionSheet({ //选择菜单
  113. title: "选择地图应用",
  114. cancel: "取消",
  115. buttons: [{
  116. title: "高德地图"
  117. }, {
  118. title: "百度地图"
  119. }, {
  120. title: "腾讯地图"
  121. }] // 可选的地图类型
  122. }, (e) => {
  123. // 判断用户选择的地图
  124. switch (e.index) {
  125. //下面是拼接url,不同系统以及不同地图都有不同的拼接字段
  126. case 1: //打开高德地图
  127. if (plus.os.name == "Android") { // 安卓
  128. url =
  129. `androidamap://viewMap?sourceApplication=appname&poiname=${name}&lat=${latitude}&lon=${longitude}&dev=0`;
  130. } else { //苹果
  131. url =
  132. `iosamap://viewMap?sourceApplication=applicationName&poiname=${name}&lat=${latitude}&lon=${longitude}&dev=0`;
  133. }
  134. webUrl =
  135. `https://uri.amap.com/marker?position=${longitude},${latitude}&name=${name}&src=mypage&coordinate=gaode`
  136. break;
  137. case 2: //打开百度地图
  138. if (plus.os.name == "Android") { // 安卓
  139. url =
  140. `baidumap://map/marker?location=${latitude},${longitude}&title=${name}&content=${name}&src=andr.baidu.openAPIdemo&coord_type=gcj02`;
  141. } else { //苹果
  142. url =
  143. `iosamap://map/marker?location=${latitude},${longitude}&title=${name}&content=${name}&src=ios.baidu.openAPIdemo&coord_type=gcj02`;
  144. }
  145. webUrl =
  146. `http://api.map.baidu.com/marker?location=${latitude},${longitude}&title=${name}&content=${name}&output=html&src=webapp.baidu.openAPIdemo`
  147. break;
  148. case 3: //打开腾讯地图
  149. if (plus.os.name == "Android") { // 安卓
  150. url =
  151. `qqmap://map/geocoder?coord=${latitude},${longitude}&title${name}&addr=${name}=&referer=${referer}`
  152. } else { //苹果
  153. url =
  154. `qqmap://map/geocoder?coord=${latitude},${longitude}&title${name}&addr=${name}=&referer=${referer}`;
  155. }
  156. webUrl =
  157. `https://apis.map.qq.com/uri/v1/marker?marker=coord:${latitude},${longitude}&title=${name}&addr=${name}&referer=${referer}`
  158. break;
  159. }
  160. // 如果选中
  161. if (url != "") {
  162. url = encodeURI(url);
  163. // console.log(url, '地址')
  164. // 打开 app 导航
  165. plus.runtime.openURL(url, (err) => { // 失败回到
  166. // 毕竟用户可能没有安装app但一定安装的有浏览器
  167. // 如果失败则说明未安装 直接 打开网页版进行导航
  168. let chooseMap = ''
  169. if (e.index == 1) {
  170. chooseMap = "高德地图"
  171. } else if (e.index == 2) {
  172. chooseMap = "百度地图"
  173. } else {
  174. chooseMap = "腾讯地图"
  175. }
  176. uni.showModal({
  177. title: '提示',
  178. content: '检测到您本机暂未安装' + chooseMap + '应用,是否要选择使用浏览器打开?',
  179. confirmText: '确定', //确定文本的文字
  180. cancelText: '取消', //确定文本的文字
  181. showCancel: true, //没有取消按钮的弹框
  182. success: function(res) {
  183. if (res.confirm) {
  184. plus.runtime.openURL(webUrl)
  185. console.log('用户点击了确定')
  186. } else if (res.cancel) {
  187. console.log('用户点击了取消')
  188. // plus.nativeUI.alert("本机未安装指定的地图应用");
  189. }
  190. }
  191. })
  192. });
  193. }
  194. })
  195. }