当前位置:首页 > VUE

用vue实现地图

2026-02-20 23:00:49VUE

使用Vue实现地图的几种方法

基于高德地图API

安装高德地图JavaScript API库:

npm install @amap/amap-jsapi-loader --save

创建地图组件:

<template>
  <div id="map-container"></div>
</template>

<script>
import AMapLoader from '@amap/amap-jsapi-loader'

export default {
  data() {
    return {
      map: null
    }
  },
  mounted() {
    this.initMap()
  },
  methods: {
    initMap() {
      AMapLoader.load({
        key: '您的高德key',
        version: '2.0',
        plugins: ['AMap.ToolBar', 'AMap.Scale']
      }).then((AMap) => {
        this.map = new AMap.Map('map-container', {
          viewMode: '2D',
          zoom: 11,
          center: [116.397428, 39.90923]
        })
      })
    }
  }
}
</script>

<style>
#map-container {
  width: 100%;
  height: 500px;
}
</style>

使用百度地图API

安装百度地图JavaScript API:

npm install vue-baidu-map --save

全局注册组件:

import Vue from 'vue'
import BaiduMap from 'vue-baidu-map'

Vue.use(BaiduMap, {
  ak: '您的百度key'
})

在组件中使用:

<template>
  <baidu-map class="map" :center="center" :zoom="zoom"></baidu-map>
</template>

<script>
export default {
  data() {
    return {
      center: {lng: 116.404, lat: 39.915},
      zoom: 15
    }
  }
}
</script>

<style>
.map {
  width: 100%;
  height: 500px;
}
</style>

使用Leaflet地图库

安装Leaflet及相关插件:

npm install leaflet vue2-leaflet

创建地图组件:

<template>
  <div>
    <l-map :zoom="zoom" :center="center">
      <l-tile-layer :url="url"></l-tile-layer>
      <l-marker :lat-lng="marker"></l-marker>
    </l-map>
  </div>
</template>

<script>
import { LMap, LTileLayer, LMarker } from 'vue2-leaflet'

export default {
  components: {
    LMap,
    LTileLayer,
    LMarker
  },
  data() {
    return {
      url: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
      zoom: 13,
      center: [51.505, -0.09],
      marker: [51.505, -0.09]
    }
  }
}
</script>

<style>
@import "~leaflet/dist/leaflet.css";

.leaflet-container {
  height: 500px;
  width: 100%;
}
</style>

使用Google Maps API

安装Google Maps JavaScript API:

npm install @googlemaps/js-api-loader

创建地图组件:

<template>
  <div ref="mapRef" class="map-container"></div>
</template>

<script>
import { Loader } from '@googlemaps/js-api-loader'

export default {
  data() {
    return {
      map: null
    }
  },
  mounted() {
    this.initMap()
  },
  methods: {
    async initMap() {
      const loader = new Loader({
        apiKey: "您的Google key",
        version: "weekly"
      })

      await loader.load()
      this.map = new google.maps.Map(this.$refs.mapRef, {
        center: { lat: 39.90923, lng: 116.397428 },
        zoom: 8
      })
    }
  }
}
</script>

<style>
.map-container {
  height: 500px;
  width: 100%;
}
</style>

地图功能扩展建议

添加标记点

// 高德地图示例
new AMap.Marker({
  position: [116.39, 39.9],
  map: this.map
})

绘制多边形

// 百度地图示例
const polygon = new BMap.Polygon([
  new BMap.Point(116.387, 39.919),
  new BMap.Point(116.385, 39.913),
  new BMap.Point(116.394, 39.911)
], {strokeColor:"blue", strokeWeight:2, strokeOpacity:0.5})
this.map.addOverlay(polygon)

添加信息窗口

// Leaflet示例
L.popup()
  .setLatLng([51.5, -0.09])
  .setContent("这里是信息窗口内容")
  .openOn(this.map)

实现地图搜索

用vue实现地图

// 高德地图搜索示例
AMap.plugin('AMap.PlaceSearch', () => {
  const placeSearch = new AMap.PlaceSearch({
    pageSize: 5,
    pageIndex: 1,
    city: '北京'
  })
  placeSearch.search('餐馆', (status, result) => {
    // 处理搜索结果
  })
})

标签: 地图vue
分享给朋友:

相关文章

vue实现放大效果

vue实现放大效果

使用 CSS transform 实现放大效果 在 Vue 中实现放大效果可以通过 CSS 的 transform: scale() 属性。这种方法简单高效,适合大多数交互场景。 定义一个 CSS…

vue实现下拉层级

vue实现下拉层级

Vue实现下拉层级菜单 使用Vue实现下拉层级菜单可以通过递归组件或动态渲染的方式完成。以下是两种常见实现方法: 递归组件实现 创建一个递归组件处理多级菜单结构: <template>…

vue实现换肤

vue实现换肤

使用 CSS 变量实现换肤 在 Vue 项目中,可以通过 CSS 变量(Custom Properties)动态切换主题色。CSS 变量可以在运行时修改,适合实现换肤功能。 定义全局 CSS 变量:…

vue实现hovuer

vue实现hovuer

Vue 实现 Hover 效果 在 Vue 中实现 hover 效果可以通过多种方式完成,以下是几种常见的方法: 使用 CSS 直接控制 通过 :hover 伪类实现,无需额外的 JavaScrip…

vue实现 treegrid

vue实现 treegrid

Vue 实现 TreeGrid 的方法 使用现成组件库 Element UI、Ant Design Vue 等流行组件库提供了现成的 TreeTable/TreeGrid 组件,可直接使用。 Ele…

vue实现单击

vue实现单击

Vue 实现单击事件的方法 在 Vue 中实现单击事件可以通过 v-on 指令或简写的 @ 符号绑定事件处理器。以下是几种常见的实现方式: 基础用法 通过 v-on:click 或 @click 绑…