openMap.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import TransformCoordinate from './transformCoordinate.js'
  2. function openMapByDefault(latitude, longitude, name) {
  3. uni.openLocation({
  4. latitude: latitude,
  5. longitude: longitude,
  6. name: name,
  7. fail: (e) => {
  8. uni.showModal({
  9. content: '打开地图失败,请稍后重试'
  10. })
  11. },
  12. })
  13. }
  14. function openMapByAndroid(latitude, longitude, name) {
  15. let url = ''; // 回调地址
  16. let identity = ''; // 程序名称
  17. if (plus.runtime.isApplicationExist({
  18. pname: 'com.baidu.BaiduMap'
  19. })) { // baidumap
  20. url = `baidumap://map/marker?location=${latitude},${longitude}&title=${name}&coord_type=gcj02&src=andr.baidu.openAPIdemo`
  21. identity = 'com.baidu.BaiduMap'
  22. openURL(url, identity)
  23. } else if (plus.runtime.isApplicationExist({
  24. pname: 'com.autonavi.minimap'
  25. })) { // 高德
  26. url = `androidamap://viewMap?sourceApplication=appname&poiname=${name}&lat=${latitude}&lon=${longitude}&dev=0`
  27. identity = 'com.autonavi.minimap'
  28. openURL(url, identity)
  29. } else {
  30. openMapByDefault(latitude, longitude, name)
  31. }
  32. }
  33. function openMapByIos(latitude, longitude, name) {
  34. let url = ''; // 回调地址
  35. let errorCB = ''; // url失败的回调地址
  36. let identity = ''; // 程序名称
  37. if (plus.runtime.isApplicationExist({
  38. action: 'baidumap://'
  39. })) { // baidumap
  40. url =
  41. `baidumap://map/marker?location=${latitude},${longitude}&title=${name}&content=${name}&src=ios.baidu.openAPIdemo&coord_type=gcj02`;
  42. openURL(url, identity)
  43. } else if (plus.runtime.isApplicationExist({
  44. action: 'iosamap://'
  45. })) { // 高德
  46. url = `iosamap://viewMap?sourceApplication=applicationName&poiname=${name}&lat=${latitude}&lon=${longitude}&dev=0`
  47. openURL(url, identity)
  48. } else {
  49. openMapByDefault(latitude, longitude, name)
  50. }
  51. }
  52. function openURL(url, identity) {
  53. let newurl = encodeURI(url);
  54. plus.runtime.openURL(newurl, function(res) {
  55. uni.showModal({
  56. content: res.message
  57. })
  58. }, identity);
  59. }
  60. function getCoordByType(longitude, latitude, coord_type) {
  61. switch (coord_type) {
  62. case 'gcj02':
  63. return [longitude, latitude]
  64. break;
  65. case 'bd09':
  66. return TransformCoordinate.bd09togcj02(longitude, latitude)
  67. break;
  68. case 'wgs84':
  69. return TransformCoordinate.wgs84togcj02(longitude, latitude)
  70. break;
  71. default:
  72. return [longitude, latitude]
  73. break;
  74. }
  75. }
  76. export default {
  77. /* 打开地图 */
  78. openMap(latitude, longitude, name, coord_type = 'gcj02') {
  79. let arr = getCoordByType(longitude, latitude, coord_type)
  80. // #ifdef APP-PLUS
  81. switch (uni.getSystemInfoSync().platform) {
  82. case 'android':
  83. // console.log('运行Android上')
  84. openMapByAndroid(arr[1], arr[0], name)
  85. break;
  86. case 'ios':
  87. // console.log('运行iOS上')
  88. openMapByIos(arr[1], arr[0], name)
  89. break;
  90. default:
  91. openMapByDefault(arr[1], arr[0], name)
  92. // console.log('运行在开发者工具上')
  93. break;
  94. }
  95. // #endif
  96. // #ifndef APP-PLUS
  97. openMapByDefault(arr[1], arr[0], name)
  98. // #endif
  99. }
  100. }