赞
踩
最终效果图:
首先需要引入:
<script type="text/javascript">
window._AMapSecurityConfig = {
securityJsCode: '自己去高德地图申请',
}
</script>
<script src="https://webapi.amap.com/maps?key=高德地图官网申请key&v=1.4.15"></script>
key需要自己去高德地图官网申请.
import * as echarts from "echarts";
import VueAMap from "vue-amap"; //高德地图插件
import "echarts-amap";
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, }) // console.log(JSON.stringify(mapType)); map.addControl(mapType) mapType.hide() var LabelsData = [] for (var i = 0; i < districts.length; i++) { var config = { name: '', // position: [116.12, 39.11], 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' }) }) } ) },
<!-- --> <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"; // import AMap from 'AMap' // import {findFcxxListByCompanyCodeAndFdlx} from '@/api/dashboard/dashboardApi' // let AMap = Amap; 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, }); // console.log(JSON.stringify(mapType)); 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"; }); }); } ); }, }, //生命周期 - 挂载完成(可以访问DOM元素) mounted() { this.initData(); // const mapContainer = this.$refs.mapData; // console.log(mapContainer); // const map = new Map({ // layers: mapconfig.streetmap(), //在mapconfig.js封装的 // // controls: [FullScreen, ScaleLine, Zoom], // target: mapContainer, // view: new View({ // projection: "EPSG:4326", // center: [116.397428, 39.90923], // zoom: 11, // }), // }); // // 添加鼠标点击事件 // map.on("click", this.mapClick); // // 添加鼠标经过事件 // map.on("pointermove", this.mapPointerMove); // // 保存地图 // this.mapData = map; }, }; </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>
上述就是实现的功能,写的不好。欢迎补充。转载请标明出处,谢谢
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。