最终效果图:

首先需要引入:
1:在index.html中引入:
| <script type="text/javascript"> |
| window._AMapSecurityConfig = { |
| securityJsCode: '自己去高德地图申请', |
| } |
| </script> |
| <script src="https://webapi.amap.com/maps?key=高德地图官网申请key&v=1.4.15"></script> |
复制
key需要自己去高德地图官网申请.
2.在画图的vue页面引入:
| import * as echarts from "echarts"; |
| import VueAMap from "vue-amap"; |
| import "echarts-amap"; |
复制
3.开始画地图
| init() { |
| let _this = this |
| AMap.plugin( |
| ['AMap.DistrictSearch', 'AMap.MapType', 'AMap.CustomLayer'], |
| function () { |
| var district = new AMap.DistrictSearch({ |
| extensions: 'all', |
| level: 'province', |
| }) |
| district.search('河北省', function (status, result) { |
| var bounds = result.districtList[0].boundaries |
| var districts = result.districtList[0].districtList |
| |
| var mask = [] |
| for (var i = 0; i < bounds.length; i++) { |
| mask.push([bounds[i]]) |
| } |
| var myChart = echarts.init(document.getElementById('mapData')) |
| |
| var option = { |
| animation: false, |
| amap: { |
| mask: mask, |
| center: [116.397428, 39.90923], |
| viewMode: '3D', |
| zoom: 6.7, |
| defaultCursor: 'auto', |
| }, |
| series: _this.seriesData, |
| } |
| myChart.setOption(option) |
| var map = myChart.getModel().getComponent('amap').getAMap() |
| var layer = myChart.getModel().getComponent('amap').getLayer() |
| var mapType = new AMap.MapType({ |
| defaultType: 1, |
| }) |
| |
| |
| map.addControl(mapType) |
| mapType.hide() |
| |
| var LabelsData = [] |
| |
| for (var i = 0; i < districts.length; i++) { |
| var config = { |
| name: '', |
| |
| zooms: [4, 13], |
| zIndex: 1, |
| opacity: 1, |
| text: { |
| content: '', |
| direction: 'center', |
| offset: [0, 0], |
| zooms: [3, 20], |
| style: { |
| fontSize: 12, |
| fontWeight: 'normal', |
| fillColor: '#fff', |
| strokeColor: '#fff', |
| strokeWidth: 1, |
| }, |
| }, |
| } |
| |
| var district = districts[i] |
| var name = district.name |
| |
| config.text.content = name |
| config.position = [district.center.lng, district.center.lat] |
| |
| LabelsData.push(config) |
| |
| var district2 = new AMap.DistrictSearch({ |
| extensions: 'all', |
| level: 'city', |
| }) |
| |
| |
| district2.search(name, function (status, result) { |
| var bounds = result.districtList[0].boundaries |
| |
| for (var ii = 0; ii < bounds.length; ii++) { |
| new AMap.Polyline({ |
| map: map, |
| path: bounds[ii], |
| strokeColor: '#E7D8BC', |
| strokeWeight: 2, |
| }) |
| } |
| }) |
| } |
| |
| for (var i = 0; i < bounds.length; i++) { |
| new AMap.Polyline({ |
| map: map, |
| path: bounds[i], |
| strokeColor: '#E7D8BC', |
| strokeWeight: 6, |
| }) |
| } |
| |
| map.on('complete', function () { |
| var layer = new AMap.LabelsLayer({ |
| collision: false, |
| animation: true, |
| }) |
| |
| for (var i = 0; i < LabelsData.length; i++) { |
| var labelsMarker = new AMap.LabelMarker(LabelsData[i]) |
| layer.add(labelsMarker) |
| } |
| map.add(layer) |
| document.getElementsByClassName( |
| 'amap-container' |
| )[0].style.background = 'none' |
| }) |
| }) |
| } |
| ) |
| }, |
复制
4.完整代码
| <!-- --> |
| <template> |
| <div class=""> |
| <div class="amapBox"> |
| <div id="mapData" ref="mapData" style="width: 96%; height: 720px"></div> |
| </div> |
| </div> |
| </template> |
| |
| <script> |
| import * as echarts from "echarts"; |
| |
| import VueAMap from "vue-amap"; |
| import "echarts-amap"; |
| import imgIcon1 from "@/assets/login/1.png"; |
| import imgIcon2 from "@/assets/login/19.png"; |
| import imgIcon3 from "@/assets/login/1.png"; |
| import imgIcon4 from "@/assets/login/19.png"; |
| |
| |
| |
| export default { |
| props: { |
| mapDataList: { |
| type: Array, |
| default: () => { |
| return []; |
| }, |
| }, |
| }, |
| data(vm) { |
| return { |
| mapData: null, |
| goals: [ |
| { |
| name: "风电场1", |
| images: imgIcon1, |
| value: [113.775669, 38.709836], |
| }, |
| { |
| name: "风电场2", |
| images: imgIcon1, |
| value: [114.775669, 40.709836], |
| }, |
| { |
| name: "光伏1", |
| images: imgIcon2, |
| value: [115.775669, 41.709836], |
| }, |
| { |
| name: "光伏2", |
| symbol: "image://" + imgIcon2, |
| |
| value: [114.775669, 39.709836], |
| }, |
| ], |
| goalsTow: [], |
| goalsThree: [], |
| goalsfour: [], |
| seriesData: [], |
| }; |
| }, |
| watch: {}, |
| |
| methods: { |
| initData() { |
| console.log(VueAMap); |
| this.seriesData = [ |
| { |
| name: "点", |
| type: "scatter", |
| coordinateSystem: "amap", |
| zlevel: 9999, |
| |
| rippleEffect: { |
| brushType: "stroke", |
| }, |
| hoverAnimation: true, |
| label: { |
| normal: { |
| show: true, |
| position: 'right', |
| formatter: '{b}', |
| color:'#fff', |
| padding:[10,20,10,20], |
| backgroundColor:'rgba(0,0,0,0.5)' |
| }, |
| |
| }, |
| itemStyle: { |
| normal: { |
| color: "#4892C2", |
| shadowBlur: 12, |
| shadowColor: "#fff", |
| }, |
| }, |
| showAllSymbol: true, |
| symbolSize: "20", |
| symbol: `image://${imgIcon1}`, |
| symbolRotate: 35, |
| data: this.goals, |
| }, |
| { |
| name: "点", |
| type: "scatter", |
| coordinateSystem: "amap", |
| zlevel: 9999, |
| rippleEffect: { |
| brushType: "stroke", |
| }, |
| hoverAnimation: true, |
| label: { |
| show: false, |
| }, |
| itemStyle: { |
| normal: { |
| color: "#4892C2", |
| shadowBlur: 12, |
| shadowColor: "#fff", |
| }, |
| }, |
| showAllSymbol: true, |
| symbolSize: 26, |
| symbol: `image://${imgIcon2}`, |
| symbolRotate: 35, |
| data: this.goalsTow, |
| }, |
| { |
| name: "点", |
| type: "scatter", |
| coordinateSystem: "amap", |
| zlevel: 9999, |
| rippleEffect: { |
| brushType: "stroke", |
| }, |
| hoverAnimation: true, |
| label: { |
| show: false, |
| }, |
| itemStyle: { |
| normal: { |
| color: "#4892C2", |
| shadowBlur: 12, |
| shadowColor: "#fff", |
| }, |
| }, |
| showAllSymbol: true, |
| symbolSize: 26, |
| symbol: `image://${imgIcon3}`, |
| symbolRotate: 35, |
| data: this.goalsThree, |
| }, |
| { |
| name: "点", |
| type: "scatter", |
| coordinateSystem: "amap", |
| zlevel: 9999, |
| rippleEffect: { |
| brushType: "stroke", |
| }, |
| hoverAnimation: true, |
| label: { |
| show: false, |
| }, |
| itemStyle: { |
| normal: { |
| color: "#4892C2", |
| shadowBlur: 12, |
| shadowColor: "#fff", |
| }, |
| }, |
| showAllSymbol: true, |
| symbolSize: 26, |
| symbol: `image://${imgIcon4}`, |
| symbolRotate: 35, |
| data: this.goalsfour, |
| }, |
| ]; |
| this.init(); |
| }, |
| dataReturnFn(v) { |
| let that = this; |
| let obj = { |
| name: v.name, |
| value: v.gps, |
| label: { |
| normal: { |
| show: true, |
| formatter: function (params) { |
| return "{div|" + params.name + "}"; |
| }, |
| padding: [0, 0, 0, -120], |
| |
| rich: { |
| div: { |
| color: "#fff", |
| |
| padding: [5, 10, 5, 10], |
| backgroundColor: "rgba(0,0,0,0.9)", |
| }, |
| }, |
| }, |
| }, |
| }; |
| return { |
| type1: () => { |
| return that.goals.push(obj); |
| }, |
| type2: () => { |
| return that.goalsTow.push(obj); |
| }, |
| type3: () => { |
| return that.goalsThree.push(obj); |
| }, |
| type4: () => { |
| return that.goalsfour.push(obj); |
| }, |
| }; |
| }, |
| handlerMapData(v, i) { |
| this.dataReturnFn(v)["type" + i](); |
| }, |
| init() { |
| let _this = this; |
| AMap.plugin( |
| ["AMap.DistrictSearch", "AMap.MapType", "AMap.CustomLayer"], |
| function () { |
| var district = new AMap.DistrictSearch({ |
| extensions: "all", |
| level: "province", |
| }); |
| district.search("河北省", function (status, result) { |
| var bounds = result.districtList[0].boundaries; |
| var districts = result.districtList[0].districtList; |
| |
| var mask = []; |
| for (var i = 0; i < bounds.length; i++) { |
| mask.push([bounds[i]]); |
| } |
| var myChart = echarts.init(document.getElementById("mapData")); |
| |
| console.log(mask); |
| |
| console.log(districts); |
| var option = { |
| animation: false, |
| amap: { |
| mask: mask, |
| center: [116.397428, 39.90923], |
| viewMode: "3D", |
| zoom: 6.7, |
| defaultCursor: "auto", |
| }, |
| series: _this.seriesData, |
| }; |
| myChart.setOption(option); |
| var map = myChart.getModel().getComponent("amap").getAMap(); |
| var layer = myChart.getModel().getComponent("amap").getLayer(); |
| console.log(layer); |
| var mapType = new AMap.MapType({ |
| defaultType: 1, |
| }); |
| |
| |
| map.addControl(mapType); |
| mapType.hide(); |
| |
| var LabelsData = []; |
| |
| for (let i = 0; i < districts.length; i++) { |
| var config = { |
| name: "", |
| zooms: [4, 13], |
| zIndex: 1, |
| opacity: 1, |
| text: { |
| content: "", |
| direction: "center", |
| offset: [0, 0], |
| zooms: [3, 20], |
| style: { |
| fontSize: 12, |
| fontWeight: "normal", |
| fillColor: "#fff", |
| strokeColor: "#fff", |
| strokeWidth: 1, |
| }, |
| }, |
| }; |
| |
| var district = districts[i]; |
| var name = district.name; |
| |
| config.text.content = name; |
| config.position = [district.center.lng, district.center.lat]; |
| |
| LabelsData.push(config); |
| |
| var district2 = new AMap.DistrictSearch({ |
| extensions: "all", |
| level: "city", |
| }); |
| |
| district2.search(name, function (status, result) { |
| var bounds = result.districtList[0].boundaries; |
| |
| for (var ii = 0; ii < bounds.length; ii++) { |
| new AMap.Polyline({ |
| map: map, |
| path: bounds[ii], |
| strokeColor: "#E7D8BC", |
| strokeWeight: 2, |
| }); |
| } |
| }); |
| } |
| |
| for (let i = 0; i < bounds.length; i++) { |
| new AMap.Polyline({ |
| map: map, |
| path: bounds[i], |
| strokeColor: "#E7D8BC", |
| strokeWeight: 6, |
| }); |
| } |
| |
| map.on("complete", function () { |
| var layer = new AMap.LabelsLayer({ |
| collision: false, |
| animation: true, |
| }); |
| |
| for (var i = 0; i < LabelsData.length; i++) { |
| var labelsMarker = new AMap.LabelMarker(LabelsData[i]); |
| layer.add(labelsMarker); |
| } |
| map.add(layer); |
| document.getElementsByClassName( |
| "amap-container" |
| )[0].style.background = "none"; |
| }); |
| }); |
| } |
| ); |
| }, |
| }, |
| |
| |
| mounted() { |
| this.initData(); |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| }, |
| }; |
| </script> |
| <style scoped> |
| .amapBox { |
| display: flex; |
| justify-content: center; |
| height: 500px; |
| width: 100%; |
| position: relative; |
| top: -40px; |
| } |
| ::v-deep .amap-logo { |
| display: none !important; |
| } |
| ::v-deep .amap-copyright { |
| display: none !important; |
| } |
| |
| .amap-marker-label { |
| -webkit-border-radius: 10px; |
| -moz-border-radius: 10px; |
| border-radius: 10px; |
| border: none; |
| -webkit-box-shadow: 1px 2px 4px #cccccc; |
| -moz-box-shadow: 1px 2px 4px #cccccc; |
| box-shadow: 1px 2px 4px #cccccc; |
| } |
| </style> |
复制
上述就是实现的功能,写的不好。欢迎补充。转载请标明出处,谢谢