vue-amap使用

引入vue-amap

安装

npm install vue-amap --save

引入

import VueAMap from 'vue-amap';

配置key和插件

VueAMap.initAMapApiLoader({
  key: '高德地图key',
  //插件
  plugin: [
    'AMap.Autocomplete', 
    'AMap.PlaceSearch', 
    'AMap.Scale', 
    'AMap.OverView', 
    'AMap.MapType', 
    'AMap.PolyEditor', 
    'AMap.CircleEditor',
    "AMap.ToolBar",
    "AMap.Geolocation",
  ],
  // 默认高德 sdk 版本为 1.4.4
  v: '1.4.4',
  uiVersion: '1.0'

});

全局注册

Vue.use(VueAMap);

使用

map.vue

  • template
<!-- 渲染地图标签 -->
   <div class="map_container" style="width:100%;height:70vh;">
     <el-amap 
        ref="map" 
        vid="amap" 
        :amap-manager="amapManager" 
        :center="center" 
        :zoom="zoom" 
        :plugin="plugin" 
        class="amap-demo">
        <!-- 地图绘线 -->
          <el-amap-polygon
              v-for="(polygon, index) in polygons"
              :key="index"
              :vid="index"
              :ref="`polygon_${index}`"
              :path="polygon.path"
              editable="true"
              strokeColor="#FF0000"
              strokeWeight="2"
              strokeOpacity="0.8"
              fillOpacity="0.3"
              fillColor="#00000000"
              :events="polygon.events"
          ></el-amap-polygon>
          <!-- 地图标点 -->
        <el-amap-marker 
          v-for="(marker, index) in markers" 
          :position="marker.position" 
          :events="marker.events" 
          :visible="marker.visible" 
          :draggable="marker.draggable" 
          :vid="index"
        >
        </el-amap-marker >
        <!-- 点对应提示信息 -->
        <el-amap-info-window
        v-if="window"
        :position="window.position"
        :visible="window.visible"
        :content="window.content"
        :offset="window.offset"
        :close-when-click-map="true"
        :is-custom="true"
      >
        <div id="info-window">
          <p>用户名:{{ window.address }}</p>
          <p>经度:{{ window.position[0] }}</p>
          <p>纬度:{{ window.position[1] }}</p>
        </div>
      </el-amap-info-window>
      <!-- 自定义图例 -->
        <div class="legend">
          <div>
            <img src="../../assets/marker.png" />
            <div>
              人类活动标点
            </div>
          </div>
          <div>
            <div class="red_line"></div>
            <div>红线边界</div>
          </div>
        </div>
      </el-amap>
  </div>
  • script
import { AMapManager, lazyAMapApiLoaderInstance } from "vue-amap";
let amapManager = new AMapManager();


export default {
	data(){
		return {
			  amapManager,
		      zoom: 5,
		      // 默认中心度
		      center: [108.02032, 35.81911],
		      // 插件
		      plugin: [
		        {
		          pName: "MapType",
		          defaultType: 1,
		        },
		        {
		          pName: "ToolBar",
		        },
		        {
		          pName: "Scale",
		        },
		      ],
		      // 点坐标
		      markers: [],
		      // 线坐标
		      polygons: [],
		      options: [],
		      loading: false,
		      // 提示信息数组
		      windows: [],
		      // 当前获取的提示信息
		      window: "",
		}
	},
	methods:{
		    getLocation(params) {
      getLocation(params)
        .then((res) => {
          const windows = [];
          const that = this;
          const markers = [];
          let data = res.data.data;
          // console.log(data)
          data.forEach((ele, index) => {
            if (ele.redLineData) {
              this.polygons.push({
                path: JSON.parse(ele.redLineData.jsonData).features[0].geometry
                  .rings[0],
              });
            }
            let tempMark = [];
            tempMark[0] = ele.locationLon;
            tempMark[1] = ele.locationLat;
            markers.push({
              position: tempMark,
              visible: true,
              address: ele.userName,
              locationTime: ele.locationTime,
              events: {
                click() {
                  console.log(that.windows);
                  // 方法:鼠标移动到点标记上,显示相应窗体
                  that.windows.forEach((window, index) => {
                    window.visible = false; // 关闭窗体
                  });
                  that.window = that.windows[index];
                  that.$nextTick(() => {
                    that.window.visible = true;
                  });
                },
              },
            });
            let lon = Number(ele.locationLon).toFixed(6);
            let lat = Number(ele.locationLat).toFixed(6);
            windows.push({
              position: [lon, lat],
              isCustom: true,
              offset: [150, 50], // 窗体偏移
              showShadow: false,
              visible: false, // 初始是否显示
              address: ele.userName,
              locationTime: ele.locationTime,
            });
          });
          this.windows = windows;
          if (markers.length !== 0) {
            this.markers = markers;
          } else {
            this.$message({
              duration: 1500,
              type: "error",
              message: "没有要搜索的点!",
            });
          }
        })
        .catch((error) => {
          console.log(error);
        });
    },
	}
}
  • style
<style lang="scss" scoped>
#info-window {
  padding: 0 10px;
  margin-left: 30px;
  background: rgba(255, 255, 255, 0.9);
  border-radius: 4px;
  position: relative;
  overflow: hidden;
  p {
    height: 30px;
    display: flex;
    align-items: center;
  }
  .detail {
    width: 100%;
    height: 24px;
    color: #fff;
    background-color: #1a73e8;
    position: absolute;
    bottom: 0;
    font-size: 12px;
    line-height: 24px;
    text-align: center;
    cursor: pointer;
  }
}

.legend {
  width: 110px;
  height: 70px;
  padding: 5px;
  background: rgb(243, 240, 240);
  position: absolute;
  bottom: 10px;
  right: 10px;
  display: flex;
  flex-direction: column;
  justify-content: space-around;

  div {
    width: 100%;
    display: flex;
    align-items: center;
    font-size: 12px;

    img {
      width: 20px;
      margin-right: 10px;
    }

    .red_line {
      width: 22px;
      height: 2px;
      background: red;
      margin-right: 10px;
    }
  }
}

.el-amap {
  width: 100%;
  height: 100%;
}
.map_container {
  position: relative;
}
.map_tabel_container {
  position: relative;
}
</style>

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要在Vue项目中使用vue-amap,首先需要安装vue-amap模块。可以通过npm命令来安装: ``` npm install vue-amap --save ``` 安装完成后,在Vue项目的入口文件中引入vue-amap模块,并进行初始化: ``` import VueAMap from 'vue-amap'; Vue.use(VueAMap); VueAMap.initAMapApiLoader({ // 高德的key key: 'your amap key', // 插件集合 plugin: ['AMap.Geolocation', 'AMap.MarkerClusterer'], // 高德 sdk 版本,默认为 1.4.15 v: '1.4.15', }); ``` 其中,`your amap key`需要替换成你自己的高德地图应用的key。 接下来,在组件中引入`vue-amap`的组件,并使用`amap`标签来显示地图: ``` <template> <div> <amap :zoom="zoom" :center="center"> <amap-marker :position="center"></amap-marker> </amap> </div> </template> <script> export default { data() { return { zoom: 13, center: [116.397428, 39.90923], }; }, }; </script> ``` 以上代码实现了在Vue组件中显示一个地图,并在地图上显示一个标记。具体使用方式可以参考vue-amap的文档。 ### 回答2: Vue-amap 是一个基于Vue的高德地图组件库,可以方便地在Vue项目中使用高德地图服务。 要使用vue-amap,需要按照以下步骤进行操作: 1. 首先,安装vue-amap库。可以通过npm或者yarn来进行安装。在终端中执行以下命令: ``` npm install --save vue-amap ``` 或者 ``` yarn add vue-amap ``` 2. 在Vue项目的入口文件(通常是main.js)中,引入vue-amap并注册为Vue的插件。在代码中添加以下内容: ```javascript import VueAMap from 'vue-amap'; Vue.use(VueAMap); ``` 3. 在需要使用高德地图的组件中,可以通过`VueAMap.initAMapApiLoader`方法进行配置和初始化。在代码中添加以下内容: ```javascript VueAMap.initAMapApiLoader({ key: 'your-amap-key', // 高德地图API的key // 插件集合 plugin: ['AMap.Scale', 'AMap.OverView', 'AMap.ToolBar', 'AMap.MapType', 'AMap.Geolocation'], // 高德地图 SDK 版本,默认为 1.4.4 v: '1.4.4' }); ``` 在这里,需要将`your-amap-key`替换为你申请到的高德地图API的key。 4. 然后,就可以在组件中使用vue-amap提供的地图组件了。例如,在组件的模板中添加以下内容: ```html <vue-amap id="mapContainer" :zoom="13" :center="['116.397428', '39.90923']"> <div class="amap-marker" :position="['116.397428', '39.90923']"></div> </vue-amap> ``` 在这里,使用`vue-amap`标签来包裹地图组件,并通过`:zoom`和`:center`属性设置地图缩放级别和中心点。在`vue-amap`标签内,可以添加其他地图相关的组件。 这样,就可以在Vue项目中使用vue-amap来显示高德地图了。在实际开发中,还可以根据需要使用vue-amap提供的其他功能和API来实现更多的地图操作和交互。 ### 回答3: Vue-amap是一个基于Vue.js的高德地图组件库,提供了丰富的地图展示和操作功能。要使用vue-amap,首先需要在项目中安装它。 1. 在项目目录下打开终端,运行以下命令来安装vue-amap: ``` npm install vue-amap --save ``` 2. 在需要使用地图的组件中,引入vue-amap: ```javascript import AMap from 'vue-amap'; ``` 3. 调用Vue.use()方法并添加参数AMap: ```javascript Vue.use(AMap); ``` 4. 在项目的入口文件(main.js)中,加载高德地图的SDK: ```javascript AMap.initAMapApiLoader({ key: 'your-amap-api-key', plugin: ['AMap.Geolocation'] }); ``` 注意:replace 'your-amap-api-key'为你注册高德地图开发者账号后获得的API Key。 5. 在组件的template中,使用vue-amap提供的地图组件: ```html <template> <div> <amap-map :zoom="13" :center="[lng, lat]"> <amap-marker :position="[lng, lat]"></amap-marker> </amap-map> </div> </template> ``` 上述代码展示了一个简单的地图,包含一个标记点在指定的经纬度上。 至此,我们已经完成了vue-amap的基本配置,可以在Vue项目中使用高德地图的各种功能了。根据官方文档,还可以使用更多的组件和API来控制地图的交互、显示等,以满足具体需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值