当前位置:   article > 正文

vue使用百度地图3.0,使用JavaScriptAPI版,聚合点,个性化地图切换卫星地图_百度地图api 3.0

百度地图api 3.0

        为什么用JavaScript版,因为用vue的百度map有问题,地图显示不全,之前还以为是我的问题,结果去了官网发现官网的地图都是显示不全,也不知道咋回事,不知道现在修好了没,所以只好用JavaScript版的了,话不多说,请看代码

1-第一步肯定是要引入啊,注意,是在vue的public出口文件的index.html中引入,因为我在这用到了聚合点,所以引入的有点多

  1. <script type="text/javascript" src="https://api.map.baidu.com/api?v=3.0&ak=百度地图申请的3.0版&s=1"></script>
  2. <script type="text/javascript" src="https://api.map.baidu.com/library/TextIconOverlay/1.2/src/TextIconOverlay_min.js"></script>
  3. <script type="text/javascript" src="https://api.map.baidu.com/library/MarkerClusterer/1.2/src/MarkerClusterer_min.js"></script>

注意:如果引入报错有这个警告

有这个警告就换成这种,key替换成自己的baidikey就可以了

  1. <script type="text/javascript" src="http://api.map.baidu.com/getscript?v=3.0&ak={$key}"></script>
  2. <script type="text/javascript" src="https://api.map.baidu.com/library/TextIconOverlay/1.2/src/TextIconOverlay_min.js"></script>
  3. <script type="text/javascript" src="https://api.map.baidu.com/library/MarkerClusterer/1.2/src/MarkerClusterer_min.js"></script>

3-个性化地图使用

打开百度开发者工具的控制台,第一次打开时没有地图显示了,需要创建,有很多种选择,还可以自定义配置颜色

点击下载样式文件

 

自行选择时开发哪个端的,我这边是pc端,下载完成后如下,有个json文件,放在你自己的项目里引入

 

2-引入完成后,在需要使用到的页面先写个div,宽高一定要给,这个就是我绘制的地图的画布了,不给宽高显示不出来,这边给了百分比的话,需要父级设置宽高

  <div id="container" style="height: 100%; width: 100%"></div>

4-地图画布是完成了,什么时候去调用setmap(),我在是拿到数据后去调用的这个函数,不然如果页面刷新去调用那么地图肯定是显示不了的,因为提前就绘制了,但是没有数据

3-地图完整代码如下

setmap传入俩个参数,一个mapmarker就是后端传入参数,数据是[{lat:'',lon:''}],这种格式的,也就是经纬度

  1. <template>
  2. <div class="map">
  3. <div id="container" style="height: 100%; width: 100%"></div>
  4. <button v-if="gexhua" size="mini" class="tag-map" @click="tagwxMap()">
  5. {{ switchMap ? "卫星地图" : "个性化地图" }}
  6. </button>
  7. </div>
  8. </template>
  9. <script>
  10. import stylemap from "./custom_map_config";
  11. export default {
  12. data() {
  13. return {
  14. mapmarker: [
  15. { lon: 121.388495, lat: 31.171609, type: 1 },
  16. { lon: 121.459785, lat: 31.173834, type: 2 },
  17. { lon: 121.423853, lat: 31.167036, type: 3 },
  18. { lon: 121.426584, lat: 31.18335, type: 4 },
  19. { lon: 121.409192, lat: 31.173339, type: 1 },
  20. { lon: 121.436788, lat: 31.167901, type: 4 },
  21. { lon: 121.404737, lat: 31.161969, type: 4 },
  22. { lon: 121.389358, lat: 31.182855, type: 2 },
  23. ],
  24. switchMap: true,
  25. gexhua: true,
  26. };
  27. },
  28. mounted() {
  29. this.setMap(this.mapmarker,this.switchMap);
  30. },
  31. methods: {
  32. // 卫星地图切换
  33. tagwxMap() {
  34. this.switchMap = !this.switchMap;
  35. this.setMap(this.mapmarker, this.switchMap);
  36. },
  37. setMap(mapmarker,switchMap) {
  38. // 百度地图API功能
  39. var pt = null;
  40. //聚合点
  41. var markers = [];
  42. var arr = [];
  43. arr = mapmarker;
  44. //创建百度地图画布
  45. var map = new BMap.Map("container");
  46. // 创建地图实例,必须有下面的这俩句,地图画布才算是绘制了,不然会报错mp找不到
  47. var point = new BMap.Point(arr[0].lon, arr[0].lat);
  48. // // 创建点坐标
  49. map.centerAndZoom(point, 10);
  50. // 个性化,通过switchMap 变量来控制是个性化还是卫星
  51. if (switchMap == 1) {
  52. // 设置个性化地图
  53. map.setMapStyleV2({ styleJson: stylemap })
  54. } else {
  55. map.setMapType(BMAP_HYBRID_MAP); // 设置地图类型为卫星模式
  56. }
  57. map.enableScrollWheelZoom(true); //开启滚轮缩放
  58. arr.forEach((item) => {
  59. pt = new BMap.Point(item.lon, item.lat); //添加聚合点
  60. markers.push(new BMap.Marker(pt));
  61. });
  62. //最简单的用法,生成一个marker数组,然后调用markerClusterer类即可。,必须要写这个不然数据显示不出来
  63. new BMapLib.MarkerClusterer(map, {
  64. markers: markers,
  65. });
  66. },
  67. },
  68. };
  69. </script>
  70. <style lang="scss" scoped>
  71. .map {
  72. height: 500px;
  73. width: 500px;
  74. border: 1px solid red;
  75. }
  76. .tag-map{
  77. position: fixed;
  78. top: 30px;
  79. left: 400px;
  80. z-index: 1000;
  81. }
  82. </style>

5-我在地图上定义了一个自定义按钮el-button,通过这个按钮进行切换地图是卫星还是个性化

  1. <el-button
  2. v-if="gexhua"
  3. size="mini"
  4. class="tag-map"
  5. @click="tagwxMap()"
  6. >{{ switchMap ? '卫星地图' : '个性化地图' }}</el-button
  7. >

6-el-button控制切换

  1. // 卫星地图切换
  2. tagwxMap() {
  3. this.switchMap = !this.switchMap
  4. this.setMap(this.device_list, this.switchMap)
  5. }

7-最后显示效果如下,点是不会跳动的哈

 好了文章结束了,希望对你有所帮助~

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

闽ICP备14008679号