当前位置:   article > 正文

H5 高德、百度、腾讯地图选择导航功能实现_h5地图导航制作

h5地图导航制作

实现效果展示:

地图底图使用的是腾讯地图,实现步骤:

一、在腾讯地图申请密钥key值;申请地址:https://lbs.qq.com/dev/console/application/mine (有账号直接登录,无账号注册后登录)。

1、点击【应用管理】按钮;

2、点击【提交key】按钮;

3、设置相关信息,点击添加按钮,即可生成key。

 二、在h5入口页index.html头部中引入腾讯地图,

<script src="https://map.qq.com/api/gljs?v=1.exp&key=申请的key值"></script>

如果在uni-app框架需要在manifest.json ==》h5配置 ==》index.html模板路径 中,设置index。html入口页,如图所示:

在.vue页面获取地图展示,可参考最下面代码模块。

//移除腾讯地图比例尺
this.map.removeControl(TMap.constants.DEFAULT_CONTROL_ID.SCALE);

//移除腾讯地图旋转控件
this.map.removeControl(TMap.constants.DEFAULT_CONTROL_ID.ROTATION);

//移除腾讯地图缩放控件
this.map.removeControl(TMap.constants.DEFAULT_CONTROL_ID.ZOOM);

 三、地图导航选择器实现,可参考最下面代码模块。我这里使用的是uview中的v-popup,仅供参考,选择器可自行选择组件。

导航核心模块:

1、高德地图:高德地图-路线规划 、 导航-iOS-开发指南-高德地图手机版 | 高德地图API (amap.com)

location.href = `https://uri.amap.com/navigation?from=${this.mylng},${this.mylat},${"我的位置"}&to=${this.navlng},${this.navlat},${this.dlmc}&callnative=1`;

 

2、百度地图:百度地图-导航

location.href =`http://api.map.baidu.com/marker?location=${this.navlat},${this.navlng}&title=${this.dlmc}&content=${this.navAddress}&output=html&src=webapp.baidu.openAPIdemo`;

3、腾讯地图:腾讯地图-路线规划

location.href =`https://apis.map.qq.com/uri/v1/routeplan?type=drive&from=我的位置&fromcoord=${this.mylat},${this.mylng}&to=${this.dlmc}&tocoord=${this.navlat},${this.navlng}&policy=1&referer=申请的key值`;

 

代码展示:仅供参考    需要wgs84togcj02 =》 utils.js - 9、坐标转化:wgs84转gcj02

  1. <template>
  2. <view>
  3. <view id="container"></view>
  4. <view class="body">
  5. <u-popup :show="coordinateShow" mode="bottom" @close="coordinateShow=false" :overlay='false'>
  6. <view class="coordinate-body">
  7. <!--标记点内容展示-->
  8. <view class="navigation" @click="openURL">
  9. <img class="navigationImage" src="/static/dingwei.png"/>
  10. <text>位置导航</text>
  11. </view>
  12. </u-popup>
  13. <u-popup :show="!coordinateShow" mode="bottom" @click="coordinateShow=true">
  14. <view class="nav_title" @click="goMap('gaode')">高德地图</view>
  15. <view class="nav_title" @click="goMap('baidu')">百度地图</view>
  16. <view class="nav_title" @click="goMap('tencent')">腾讯地图</view>
  17. <view class="nav_title" @click="coordinateShow=true">取消</view>
  18. </u-popup>
  19. </view>
  20. </view>
  21. </template>
  22. <script>
  23. import { wgs84togcj02 } from '@/static/utils';
  24. export default {
  25. components: {
  26. },
  27. data () {
  28. return {
  29. title: 'map',
  30. map:"",
  31. mylng:0,
  32. mylat:0,
  33. navlng:0,
  34. navlat:0,
  35. bjdmc:"标记点名称",
  36. navAddress:"",
  37. coordinateShow: true,
  38. }
  39. },
  40. mounted () {
  41. this.getDate();
  42. },
  43. methods: {
  44. //获取数据
  45. getDate(){
  46. let that = this;
  47. let lng = that.getQueryString('lng') ? Number(that.getQueryString('lng')) : 118.784093;
  48. let lat = that.getQueryString('lat') ? Number(that.getQueryString('lat')) : 32.041695;
  49. that.navlng = wgs84togcj02(lng, lat)[0];// wgs84转gcj02 获取精确的经纬度,可换自己的方式获取精确位置。
  50. that.navlat = wgs84togcj02(lng, lat)[1];// wgs84转gcj02 获取精确的经纬度
  51. that.getLocation();
  52. uni.request({
  53. url: 'https://apis.map.qq.com/ws/geocoder/v1/' + '?location=' + that.navlat + ',' + that.navlng +
  54. '&key=' + '申请的key值' + '&get_poi=1',
  55. header: {
  56. 'Content-Type': 'application/json'
  57. },
  58. data: {},
  59. method: 'GET',
  60. success: (res) => {
  61. that.navAddress = res.data.result.address;//标记点的地理位置
  62. }
  63. });
  64. that.initMap(wgs84togcj02(lng, lat)[1],wgs84togcj02(lng, lat)[0]);
  65. },
  66. //获取URL后参数
  67. getQueryString(name){
  68. let query = decodeURIComponent(window.location.href);
  69. let rooms = query.split('?');
  70. for (let i = 0; i < rooms.length; i++) {
  71. let pair = rooms[i].split('=');
  72. if (pair[0] == name) {
  73. return (pair[1].split('&'))[0]
  74. }
  75. }
  76. //或者拼接&后面的值
  77. let vars = query.split('&')
  78. for (let i = 0; i < vars.length; i++) {
  79. let pair = vars[i].split('=')
  80. if (pair[0] == name) {
  81. return pair[1]
  82. }
  83. }
  84. },
  85. //当前位置定位,我这里使用的是uni.getLocation仅供参考,可换成自己的定位方式。
  86. getLocation(){
  87. let that = this;
  88. uni.getLocation({
  89. type: 'gcj02', //返回可以用于uni.openLocation的经纬度
  90. success: function (res) {
  91. that.mylng = wgs84togcj02(res.longitude, res.latitude)[0];
  92. that.mylat = wgs84togcj02(res.longitude, res.latitude)[1];
  93. }
  94. })
  95. },
  96. //获取地图
  97. initMap(lat,lng) {
  98. //定义地图中心点坐标
  99. let center = new TMap.LatLng(lat,lng)
  100. //定义map变量,调用 TMap.Map() 构造函数创建地图
  101. this.map = new TMap.Map('container', {
  102. disableDefaultUI: true,
  103. center: center,//设置地图中心点坐标
  104. zoom: 14.5, //设置地图缩放级别
  105. baseMap: { // 设置卫星地图
  106. type: 'satellite'
  107. }
  108. });
  109. this.map.removeControl(TMap.constants.DEFAULT_CONTROL_ID.SCALE); //移除比例尺
  110. this.map.removeControl(TMap.constants.DEFAULT_CONTROL_ID.ROTATION); //移除旋转控件
  111. this.map.removeControl(TMap.constants.DEFAULT_CONTROL_ID.ZOOM); //移除缩放控件
  112. this.markerLayer(center);
  113. },
  114. //坐标点
  115. markerLayer(center){
  116. //创建并初始化MultiMarker
  117. let markerLayer = new TMap.MultiMarker({
  118. map: this.map, //指定地图容器
  119. //样式定义
  120. styles: {
  121. //创建一个styleId为"myStyle"的样式(styles的子属性名即为styleId)
  122. "myStyle": new TMap.MarkerStyle({
  123. "width": 25, // 点标记样式宽度(像素)
  124. "height": 35, // 点标记样式高度(像素)
  125. "src": '/static/navigation.png', //图片路径
  126. //焦点在图片中的像素位置,一般大头针类似形式的图片以针尖位置做为焦点,圆形点以圆心位置为焦点
  127. "anchor": { x: 12.5, y: 35 }
  128. })
  129. },
  130. //点标记数据数组 ,可加多个标记点
  131. geometries: [{
  132. "id": "1", //点标记唯一标识,后续如果有删除、修改位置等操作,都需要此id
  133. "styleId": 'myStyle', //指定样式id
  134. "position": center, //点标记坐标位置
  135. "properties": {//自定义属性
  136. }
  137. }]
  138. });
  139. },
  140. //打开导航方式
  141. openURL() {
  142. this.coordinateShow = !this.coordinateShow;
  143. },
  144. goMap(mapApp){
  145. //高德地图
  146. if(mapApp=="gaode"){
  147. location.href = `https://uri.amap.com/navigation?from=${this.mylng},${this.mylat},${"我的位置"}
  148. &to=${this.navlng},${this.navlat},${this.bjdmc}&callnative=1`;
  149. }
  150. //百度地图
  151. if(mapApp=="baidu"){
  152. let that = this;
  153. location.href =`http://api.map.baidu.com/marker?location=
  154. ${that.navlat},${that.navlng}&title=${that.bjdmc}&content=${that.navAddress}
  155. &output=html&src=webapp.baidu.openAPIdemo`;
  156. }
  157. //腾讯地图
  158. if(mapApp=="tencent"){
  159. location.href =`https://apis.map.qq.com/uri/v1/routeplan?type=drive
  160. &from=我的位置&fromcoord=${this.mylat},${this.mylng}
  161. &to=${this.bjdmc}&tocoord=${this.navlat},${this.navlng}
  162. &policy=1&referer=申请的key值`;
  163. }
  164. },
  165. }
  166. }
  167. </script>
  168. <style lang="scss" scoped>
  169. #container{
  170. height: 80vh;
  171. }
  172. .coordinate-body {
  173. }
  174. /deep/.uni-input-input {
  175. background-color: #fff;
  176. }
  177. /deep/.u-popup__content{
  178. padding: 0 80rpx 0 36rpx;
  179. }
  180. /deep/.popup-body{
  181. display: flex !important;
  182. flex-direction: column !important;
  183. align-items: center !important;
  184. height: 100%;
  185. }
  186. /deep/.popup-title{
  187. font-size: 36rpx;
  188. font-weight: bold;
  189. margin: 30rpx 0 50rpx 0;
  190. }
  191. /deep/.maptype-label {
  192. margin: 16rpx 0;
  193. font-size: 32rpx;
  194. font-weight: bold;
  195. }
  196. .navigation{
  197. display: flex;
  198. flex-direction: row;
  199. align-items: center;
  200. justify-content: center;
  201. font-size: 26rpx;
  202. font-family: Microsoft YaHei;
  203. font-weight: 400;
  204. color: #fff;
  205. background: #539F92;
  206. border-radius: 30rpx;
  207. margin: 0 60rpx 30rpx 60rpx;
  208. padding: 15rpx 24rpx;
  209. .navigationImage{
  210. width: 40rpx;
  211. height: 40rpx;
  212. padding-right: 12rpx;
  213. }
  214. }
  215. .nav_title{
  216. text-align: center;
  217. padding: 24rpx;
  218. }
  219. </style>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/297676
推荐阅读
相关标签
  

闽ICP备14008679号