您的位置:

Vue 高德地图

一、地图的基本使用

在Vue中使用高德地图API可以通过加载官方提供的JS API来实现。首先我们需要在index.html文件中添加高德地图API的引入:

<script src="//webapi.amap.com/maps?v=1.4.15&key=yourkey" type="text/javascript"></script>

然后我们可以在组件中使用高德地图组件,示例代码如下:

<template>
  <div class="map-container">
    <amap :zoom="zoom">
      <amap-marker :position="center" />
    </amap>
  </div>
</template>

<script>
import AMap from 'vue-amap';
export default {
  data() {
    return {
      zoom: 13, // 地图级别
      center: [116.397428, 39.90923] // 中心点坐标
    };
  },
  mounted() {
    AMap.initAMapApiLoader({
      key: 'yourkey',// 申请好的Web端开发者Key值
      plugin: ['AMap.Scale', 'AMap.OverView', 'AMap.ToolBar', 'AMap.MapType'],
      v: '1.4.15'
    });
  },
  components: {
    AMap
  }
};
</script>

上面代码中我们加载了高德地图插件,定义了默认的中心点坐标和地图缩放级别,然后在Vue组件中使用了<amap><amap-marker>来渲染地图。启动后,你应该能看到一个地图,在地图上会有一个中心点标记。

二、地图的事件处理

高德地图支持多种地图事件,可以在地图触发某些事件时执行JavaScript代码来对事件做出响应。下面是一个简单的示例,当用户单击地图时在地图上描绘一个标记

<template>
  <div class="map-container">
    <amap :zoom="zoom" @click="addMarker">
      <amap-marker v-for="(point,index) in markers" :key="index" :position="point"></amap-marker>
    </amap>
  </div>
</template>

<script>
import AMap from 'vue-amap';
export default {
  data() {
    return {
      zoom: 13,
      markers: []
    };
  },
  mounted() {
    AMap.initAMapApiLoader({
      key: 'yourkey',
      plugin: ['AMap.Scale', 'AMap.OverView', 'AMap.ToolBar', 'AMap.MapType'],
      v: '1.4.15'
    });
  },
  methods: {
    addMarker(e) {
      const { lnglat } = e;
      const { lng, lat } = lnglat;
      this.markers.push([lng, lat]);
    }
  },
  components: {
    AMap
  }
};
</script>

上面代码中,我们给<amap>组件绑定了click事件,并通过事件处理函数addMarker向地图添加标记。当你单击地图时,应该会在当前单击位置上生成一个标记。

三、地图的样式设置

除了基本的地图设置外,高德地图还提供了许多样式选项,可以使用这些样式选项将地图个性化定制,具体包括如下几种:

1、地图的缩放按钮

可以通过在<amap>中设置showZoomCtrl来设置缩放按钮是否显示。示例代码如下:

<amap :showZoomCtrl="false"></amap>

2、地图的拖拽

可以通过在<amap>中设置dragEnable来设置地图是否支持拖拽。示例代码如下:

<amap :dragEnable="false"></amap>

3、地图的缩放级别

可以通过在<amap>中设置zoom来设置地图的缩放级别。示例代码如下:

<amap :zoom="13"></amap>

4、地图的样式

可以通过在<amap>中设置mapStyle来设置地图的样式,该属性可以为字符串或者数组类型,支持特殊的简写方式。示例代码如下:

<amap :mapStyle="'amap:dark'"></amap>

或者

<amap :mapStyle="[{
  'featureType': 'land',
  'elementType': 'geometry.fill',
  'stylers': {
    'color': '#3d4d59'
  }
}, {
  'featureType': 'water',
  'elementType': 'geometry.fill',
  'stylers': {
    'color': '#2a2b2f'
  }
}]"></amap>

四、地图的图层控制

高德地图还支持图层控制,可以在地图上添加多个图层,并通过控制图层的显示和隐藏来达到不同的效果。下面是一个使用自定义控件实现图层控制的例子:

<template>
  <div class="map-container">
    <amap :zoom="zoom">
      <amap-marker :position="markerPosition" />
    </amap>
    <div class="map-layers">
      <div v-for="layer in layers" :key="layer.id">
        <input type="checkbox" :id="layer.id" :checked="layer.visible" @change="toggleMapLayer(layer)"><label :for="layer.id">{{layer.name}}</label>
      </div>
    </div>
  </div>
</template>

<script>
import { Map } from 'vue-yandex-maps';
export default {
  data() {
    return {
      zoom: 13,
      markerPosition: [116.397428, 39.90923],
      layers: [{
        id: 'map-layer-1',
        name: 'Map Layer 1',
        visible: true,
        layer: new AMap.TileLayer.Satellite()
      }, {
        id: 'map-layer-2',
        name: 'Map Layer 2',
        visible: false,
        layer: new AMap.TileLayer.RoadNet()
      }]
    };
  },
  methods: {
    toggleMapLayer(layer) {
      layer.visible = !layer.visible;
      layer.visible ? this.$refs['amap-map'].map.add(layer.layer) : this.$refs['amap-map'].map.remove(layer.layer);
    }
  },
  components: {
    AMap
  }
};
</script>

上面代码中我们通过<input><label>来实现图层的控制,当点击<input>时,通过事件函数toggleMapLayer来控制各个图层的显示和隐藏。

总结

本文主要介绍了在Vue中使用高德地图API的方法。包括地图的基本使用、地图的事件处理、地图的样式设置和地图的图层控制。以上是基础的操作和示例,高德地图API还有更多的功能特性,可以根据项目需要进行深入学习和开发。