leprechaun-amap
vue2 高德地图组件
地图加载
地图插件
已支持插件(有些插件需要 addControl(),官方文档没有明确哪些需要)
| 参数 | 描述 | 
|---|
| AMap.HawkEye | 鹰眼,显示缩略图 | 
| AMap.ToolBar | 工具条,控制地图的缩放、平移等 | 
| AMap.MapType | 图层切换,用于几个常用图层切换显示 | 
| AMap.HeatMap | 热力图插件 | 
| AMap.GeoJSON | geoJSON 插件 | 
| AMap.PolylineEditor | 折线编辑插件 | 
| AMap.PolygonEditor | 多边形编辑插件 | 
| AMap.CircleEditor | 圆形编辑插件 | 
使用示例
<AMap
  ref="testMap"
  :load="{
        key: 'xxxxxxxxxxxxxxxxxxxxxx',
        plugins: [
          'AMap.ToolBar',
          'AMap.MapType',
          'AMap.HeatMap',
          'AMap.GeoJSON',
        ],
      }"
  @complete="initMap()"
/>
创建地图对象
使用示例
<AMap
  ref="testMap"
  :load="{
        key: 'xxxxxxxxxxxxxxxxxxxxxx',
        plugins: [
          'AMap.ToolBar',
          'AMap.MapType',
          'AMap.HeatMap',
          'AMap.GeoJSON',
        ],
      }"
  :mapObj="{
        mapStyle: 'amap://styles/fresh',
        zoom: 10,
        zooms: [8, 18],
        center: [116.419447, 25.049867],
        viewMode: '3D',
        pitch: 60,
      }"
  @complete="initMap()"
/>
限定可视范围
| props | 描述 | 必填 | 默认 | 可选 | 
|---|
| limitBounds | 取 zoom 为可视范围 | 否 | false | Boolean | 
热力图层
使用示例
this.$refs.testMap.initHeatMap({
  data: res.data.map((item) => {
    return { longitude: +item.jd, latitude: +item.wd, count: 1 };
  }),
  crs: "wgs84",
  value_max: 1,
});
添加 Marker
| 参数 | 描述 | 必填 | 默认 | 可选 | 
|---|
| data | 数据列表 | 是 |  | markerData | 
| crs | 数据列表的坐标系 | 否 | gcj-02 | bd09、wgs84 | 
| icon | marker 的 icon | 是 |  | icon | 
使用示例
this.$refs.testMap.addMarker({
  data: cz_markerData,
  crs: "bd09",
  icon: {
    image: require("../assets/cz.png"),
    width: 24,
    height: 24,
  },
});
markerData
| 参数 | 描述 | 必填 | 默认 | 可选 | 
|---|
| longitude | 经度 | 是 |  | number | 
| latitude | 纬度 | 是 |  | number | 
| title | marker 标题 | 否 |  | string | 
| introduction | 点击 marker 传递给信息窗的内容 | 否 |  | string | 
icon
| 参数 | 描述 | 必填 | 默认 | 可选 | 
|---|
| image | icon 图片 | 是 |  | 例:require("../assets/cz.png") | 
| width | 图片宽度 | 是 |  | number | 
| height | 图片高度 | 是 |  | number | 
信息窗 infoWindow
| props | 描述 | 必填 | 默认 | 可选 | 
|---|
| infoWindowHeight | 信息框最大高度 | 否 | 400 | number | 
| infoWindowWidth | 信息框最大宽度 | 否 | 800 | number | 
添加覆盖物
| 参数 | 描述 | 必填 | 默认 | 可选 | 
|---|
| data | 数据列表 | 是 |  |  | 
| crs | 坐标系 | 否 | gcj-02 | bd09、wgs84 | 
| borderWeight | 线条宽度 | 否 | 20 | number | 
| strokeColor | 线条颜色 | 否 | "red" | color | 
| editor | 是否可以编辑 | 否 | false | Boolean | 
使用示例
this.$refs.testMap.addPolyline({
  data: [
    { longitude: 117.017362, latitude: 25.075884 },
    { longitude: 116.98303, latitude: 25.090809 },
    { longitude: 116.943033, latitude: 25.104645 },
  ],
});
| 参数 | 描述 | 必填 | 默认 | 可选 | 
|---|
| data | 数据列表 | 是 |  |  | 
| crs | 坐标系 | 否 | gcj-02 | bd09、wgs84 | 
| radius | 圆半径 | 否 | 200 | number | 
| fillColor | 多边形填充颜色 | 否 | "fff" | color | 
| borderWeight | 线条宽度, | 否 | 20 | number | 
| strokeColor | 线条颜色 | 否 | "blue" | color | 
| editor | 是否可以编辑 | 否 | false | Boolean | 
使用示例
this.$refs.testMap.addPolyline({
  data: [
    { longitude: 117.017362, latitude: 25.075884 },
    { longitude: 116.98303, latitude: 25.090809 },
    { longitude: 116.943033, latitude: 25.104645 },
  ],
});
| 参数 | 描述 | 必填 | 默认 | 可选 | 
|---|
| longitude | 中心点经度 | 是 |  | number | 
| latitude | 中心纬度 | 是 |  | number | 
| crs | 坐标系 | 否 | gcj-02 | bd09、wgs84 | 
| radius | 圆半径 | 否 | 200 | number | 
| fillColor | 圆形填充颜色 | 否 | "red" | color | 
| strokeColor | 描边颜色 | 否 | "#fff" | color | 
| strokeWeight | 描边宽度 | 否 | 2 | number | 
| editor | 是否可以编辑 | 否 | false | Boolean | 
使用示例
this.$refs.testMap.addCircle({
  longitude: 117.017362,
  latitude: 25.075884,
});
GeoJSON
使用示例
this.$refs.testMap.addGeoJson({
  geoJSON: GeoJson_shangHang,
});
事件
| 事件 | 描述 | 参数 | 
|---|
| complete | 地图图块加载完成后触发 | 无 | 
| mapClick | 地图点击事件 | { target, lnglat, pixel, type } | 
| markerClick | marker 点击事件 | target | 
| polylineClick | polyline 点击事件 | e | 
| polygonClick | polygon 点击事件 | e | 
| circleClick | circle 点击事件 | e | 
| geoJsonClick | geoJson 点击事件 | e | 
| polylineChange | 折线编辑事件 | target | 
| polygonChange | 多边形编辑事件 | target | 
| circleChange | 圆形编辑事件 | target | 
完整使用示例
<!--
 * @Author: ChenWei
 * @Date: 2022-07-13 14:03:43
 * @LastEditors: ChenWei
 * @LastEditTime: 2022-07-19 10:39:11
 * @FilePath: \amap\test\src\components\MapContainer.vue
 * @Description:
 * WeChat:ChenWei990128
 * Copyright (c) 2022 by 福建龙腾大数据信息技术有限公司, All Rights Reserved.
-->
<template>
  <div style="width: 100vw; height: 100vh">
    <AMap
      ref="testMap"
      :load="{
        key: 'xxxxxxxxxxxxxxxxxxxxxxx',
        plugins: [
          'AMap.ToolBar',
          'AMap.MapType',
          'AMap.HeatMap',
          'AMap.GeoJSON',
        ],
      }"
      :mapObj="{
        mapStyle: 'amap://styles/fresh',
        zoom: 10,
        zooms: [8, 18],
        center: [116.419447, 25.049867],
        viewMode: '3D',
        pitch: 60,
      }"
      limitBounds
      @complete="initMap()"
    />
  </div>
</template>
<script>
// 替换成npm包
import AMap from "./AMap.vue";
// 引用geoJson对象
import GeoJson_shangHang from "../assets/shanghang";
export default {
  props: {},
  data() {
    return {
      map: null,
    };
  },
  computed: {},
  created() {},
  mounted() {},
  watch: {},
  methods: {
    // 参考手册 https://lbs.amap.com/api/jsapi-v2/documentation
    async initMap() {
      // 热力图层初始化
      this.initHeatMap();
      // geojson初始化
      this.initGeoJson();
      // 标记点初始化
      this.initMarker();
      // 线面覆盖物初始化
      this.initCover();
    },
    /**
     * @desc 初始化热力图
     */
    initHeatMap() {
      fetch("http://10.56.120.84:9089/jsons/469")
        .then((res) => {
          return res.json();
        })
        .then((res) => {
          this.$refs.testMap.initHeatMap({
            data: res.data.map((item) => {
              return { longitude: +item.jd, latitude: +item.wd, count: 1 };
            }),
            crs: "wgs84",
            value_max: 1,
          });
        });
    },
    /**
     * @desc 初始化标记点
     */
    initMarker() {
      fetch("http://10.56.120.84:9089/jsons/449")
        .then((res) => {
          return res.json();
        })
        .then((res) => {
          // 村 社区
          const cz_markerData = res.data
            .filter((item) => item.administrative_level != "镇")
            .map((item) => {
              return {
                longitude: item.longitude,
                latitude: item.latitude,
                title: item.name,
                introduction: item.introduction,
              };
            });
          this.$refs.testMap.addMarker({
            data: cz_markerData,
            crs: "bd09",
            icon: {
              image: require("../assets/cz.png"),
              width: 24,
              height: 24,
            },
          });
          // 乡镇
          const xz_markerData = res.data
            .filter((item) => item.administrative_level == "镇")
            .map((item) => {
              return {
                longitude: item.longitude,
                latitude: item.latitude,
                title: item.name,
                introduction: item.introduction,
              };
            });
          this.$refs.testMap.addMarker({
            data: xz_markerData,
            crs: "bd09",
            icon: {
              image: require("../assets/xz.png"),
              width: 36,
              height: 36,
            },
          });
        });
    },
    /**
     * @desc 初始化覆盖物
     */
    initCover() {
      this.$refs.testMap.addPolyline({
        data: [
          { longitude: 117.017362, latitude: 25.075884 },
          { longitude: 116.98303, latitude: 25.090809 },
          { longitude: 116.943033, latitude: 25.104645 },
        ],
      });
      this.$refs.testMap.addCircle({
        longitude: 117.017362,
        latitude: 25.075884,
      });
    },
    /**
     * @desc 初始化geojson数据
     */
    initGeoJson() {
      this.$refs.testMap.addGeoJson({
        geoJSON: GeoJson_shangHang,
      });
    },
  },
  components: { AMap },
};
</script>
<style scoped>
#container {
  padding: 0px;
  margin: 0px;
  width: 100%;
  height: 45vh;
  background-color: #f3f4f5;
}
</style>