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>