基本信息
源码名称:vue引入高德2D和3D地图实例
源码大小:0.88M
文件格式:.rar
开发语言:js
更新时间:2020-04-12
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
<template> <div style="margin: 0px;"> <!--<div id="container" style="width:100%; height:100%;resize:both;"></div>--> <div id="container2D" :class="type==2?'bigMap amap-container':'smallMap amap-container'" @dblclick="chanageMap(2)"></div> <div id="container3D" :class="type==3?'bigMap amap-container':'smallMap amap-container'" @dblclick="chanageMap(3)"></div> <div> <el-button type="primary" v-if="isNightscape==1" @click="chanageModel()">切换白天</el-button> <el-button type="primary" v-else-if="isNightscape==0" @click="chanageModel()">切换夜景</el-button> <el-button type="primary" @click="worldVisualAngle()">世界视角</el-button> </div> </div> </template> <script> import AMap from 'AMap' // 引入高德地图 export default { name: 'Map3D', props: { msg: String }, data() { return { type:3, //2 2D 3 3D zoom:17, //比例 map3D:null, map2D:null, isNightscape:0 //是否夜景1、是 0、否 } }, components: {}, computed: {}, created() { }, mounted() { this.mapInit3D(); this.mapInit2D(); // this.signMap(); }, methods: { worldVisualAngle(){ //切换视角 this.map3D.setZoom(4); }, chanageModel(){ //切换模式 if(!this.isNightscape){ //切夜景 this.isNightscape=1; this.map3D.setMapStyle("dark"); this.map2D.setMapStyle("dark"); }else{ this.isNightscape=0; this.map3D.setMapStyle(null); this.map2D.setMapStyle(null); } }, chanageMap(clickType){ //切换地图 if(this.type!=clickType){ this.type=clickType; } }, mapInit2D() { console.log("mapInit2D执行了===========") this.map2D = new AMap.Map('container2D', { resizeEnable: true, rotateEnable: true, pitchEnable: true, zoom: 17, pitch: 80, rotation: -15, buildingAnimation: true,//楼块出现是否带动画 expandZoomRange: true, center: [116.333926, 39.997245] }); /*this.map2D.addControl(new AMap.ControlBar({ showZoomBar: false, showControlButton: true, position: { right: '10px', top: '10px' } }))*/ /* this.map2D.addControl(new AMap.MapType({ defaultType:0 //0代表默认,1代表卫星 }));*/ }, mapInit3D() { console.log("mapInit3D执行了===========") var buildingLayer = new AMap.Buildings({zIndex:130,merge:false,sort:false,zooms:[17,20]}); var options = { hideWithoutStyle:false,//是否隐藏设定区域外的楼块 areas:[{ //围栏1 //visible:false,//是否可见 rejectTexture:true,//是否屏蔽自定义地图的纹理 color1: 'ffffff00',//楼顶颜色 color2: 'ffffcc00',//楼面颜色 path: [[116.471546,39.991033],[116.471825,39.991284],[116.471337,39.991637],[116.471031,39.99137]] }, { //围栏2 color1: 'ff99ff00', color2: 'ff999900', path: [[116.472532,39.991742],[116.473068,39.992213],[116.47258,39.992704],[116.472037,39.992152]] }] }; buildingLayer.setStyle(options); //此配色优先级高于自定义mapStyle this.map3D = new AMap.Map('container3D', { // resizeEnable: true, // rotateEnable: true, // pitchEnable: true, /*zoom: this.zoom, pitch: 80, rotation: -15, viewMode: '3D',//开启3D视图,默认为关闭 // buildingAnimation: true,//楼块出现是否带动画 // expandZoomRange: true, zooms: [3, 20], center:[116.472605,39.992075], layers:[ new AMap.TileLayer(), buildingLayer, ], features: ['bg', 'road']*/ /*, mapStyle:"dark"*/ viewMode: '3D', // 开启 3D 模式 pitch: 70, rotation: 35, center: [116.472605,39.992075], zooms: [3, 20], features: ['bg', 'road','point'], zoom: this.zoom/*, mapStyle:"dark"*/ }); /*this.map3D.addControl(new AMap.ControlBar({ showZoomBar: false, showControlButton: true, position: { right: '10px', top: '10px' } }))*/ /*this.map3D.addControl(new AMap.MapType({ defaultType:0 //0代表默认,1代表卫星 }));*/ let map=this.map3D; // 将 icon 传入 marker var endMarker = new AMap.Marker({ position: new AMap.LngLat(116.472605,39.992075), icon: require("@/assets/mc/图层 1.png"), offset: new AMap.Pixel(-13, -30) }); // 将 markers 添加到地图 this.map3D.add([endMarker]); endMarker.on('click', clickMarker,this); function clickMarker(){ map.setCenter(endMarker.getPosition()); map.setZoom(this.zoom); console.log("clickMarker" endMarker.getPosition()) } //获取动画数据 var i=1; let zoom=this.zoom; let icon=null; setInterval(function(){ if(i > 20){ i=1; } let scale=map.getZoom()/zoom; scale=(scale<1?scale/1.5:scale); // console.log(scale) icon=new AMap.Icon({ image: require("@/assets/mc/图层 " i ".png"), size: new AMap.Size(226*scale, 167*scale), //图标大小 imageSize: new AMap.Size(226*scale,167*scale) }) endMarker.setIcon(icon); i ; },100); var object3Dlayer = new AMap.Object3DLayer(); map.add(object3Dlayer); var lnglat1 = new AMap.LngLat(116.472605,39.992075); var center_3d = map.lngLatToGeodeticCoord(lnglat1); /* var topColor = [0, 0, 1, 0.9]; var topFaceColor = [0, 0, 1, 0.9]; var bottomColor = [0, 0, 1, 0.9]; //添加一个圆柱体 var addRegularPrism = function (center, segment, height, radius) { var cylinder = new AMap.Object3D.Mesh(); var geometry = cylinder.geometry; var verticesLength = segment * 2; var path = [] for (var i = 0; i < segment; i = 1) { var angle = 2 * Math.PI * i / segment; var x = center.x Math.cos(angle) * radius; var y = center.y Math.sin(angle) * radius; path.push([x, y]); geometry.vertices.push(x, y, 0); //底部顶点 geometry.vertices.push(x, y, -height); //顶部顶点 geometry.vertexColors.push.apply(geometry.vertexColors, bottomColor); //底部颜色 geometry.vertexColors.push.apply(geometry.vertexColors, topColor); //顶部颜色 var bottomIndex = i * 2; var topIndex = bottomIndex 1; var nextBottomIndex = (bottomIndex 2) % verticesLength; var nextTopIndex = (bottomIndex 3) % verticesLength; geometry.faces.push(bottomIndex, topIndex, nextTopIndex); //侧面三角形1 geometry.faces.push(bottomIndex, nextTopIndex, nextBottomIndex); //侧面三角形2 } // 构建顶面三角形,为了区分顶面点和侧面点使用不一样的颜色,所以需要独立的顶点 for (var i = 0; i < segment; i = 1) { geometry.vertices.push.apply(geometry.vertices, geometry.vertices.slice(i * 6 3, i * 6 6)); //底部顶点 geometry.vertexColors.push.apply(geometry.vertexColors, topFaceColor); } var triangles = AMap.GeometryUtil.triangulateShape(path); var offset = segment * 2; for (var v = 0; v < triangles.length; v = 3) { geometry.faces.push(triangles[v] offset, triangles[v 2] offset, triangles[v 1] offset); } cylinder.transparent = false; // 如果使用了透明颜色,请设置true // cylinder.textures.push("https://a.amap.com/jsapi_demos/static/tourist/crate.gif"); object3Dlayer.add(cylinder); }; addRegularPrism(center_3d.add(new AMap.Pixel(0, 0)), 4, 800, 500) //三棱柱*/ var topColor = [0, 1, 5, 0.9]; var topFaceColor = [0, 1, 1, 0.9]; var bottomColor = [0, 1, 1, 0.9]; //添加一个圆柱体 var addRegularPrism = function (center, segment, height, radius) { var cylinder = new AMap.Object3D.Mesh(); var geometry = cylinder.geometry; var verticesLength = segment * 2; var path = [] for (var i = 0; i < segment; i = 1) { var angle = 2 * Math.PI * i / segment; var x = center.x Math.cos(angle) * radius; var y = center.y Math.sin(angle) * radius; path.push([x, y]); geometry.vertices.push(x, y, 0); //底部顶点 geometry.vertices.push(x, y, -height); //顶部顶点 geometry.vertexColors.push.apply(geometry.vertexColors, bottomColor); //底部颜色 geometry.vertexColors.push.apply(geometry.vertexColors, topColor); //顶部颜色 var bottomIndex = i * 2; var topIndex = bottomIndex 1; var nextBottomIndex = (bottomIndex 2) % verticesLength; var nextTopIndex = (bottomIndex 3) % verticesLength; geometry.faces.push(bottomIndex, topIndex, nextTopIndex); //侧面三角形1 geometry.faces.push(bottomIndex, nextTopIndex, nextBottomIndex); //侧面三角形2 } // 构建顶面三角形,为了区分顶面点和侧面点使用不一样的颜色,所以需要独立的顶点 for (var i = 0; i < segment; i = 1) { geometry.vertices.push.apply(geometry.vertices, geometry.vertices.slice(i * 6 3, i * 6 6)); //底部顶点 geometry.vertexColors.push.apply(geometry.vertexColors, topFaceColor); } var triangles = AMap.GeometryUtil.triangulateShape(path); var offset = segment * 2; for (var v = 0; v < triangles.length; v = 3) { geometry.faces.push(triangles[v] offset, triangles[v 2] offset, triangles[v 1] offset); } cylinder.transparent = true; // 如果使用了透明颜色,请设置true object3Dlayer.add(cylinder); }; addRegularPrism(center_3d.add(new AMap.Pixel(0, 0)), 4, 800, 500) //三棱柱 // addRegularPrism(center_3d, 5, 1200, 500)//五棱柱 // // addRegularPrism(center_3d.add(new AMap.Pixel(1500, 0)), 32, 1600, 500)//圆柱 // addRegularPrism(center_3d, 5, 1200, 500)//五棱柱 // // addRegularPrism(center_3d.add(new AMap.Pixel(1500, 0)), 32, 1600, 500)//圆柱 }, signMap(){ //标记地图 // 创建一个 icon /*var endIcon = new AMap.Icon({ size: new AMap.Size(25, 34), image: '../assets/images/map_qd_1.png', imageSize: new AMap.Size(135, 40), imageOffset: new AMap.Pixel(-95, -3) });*/ /* console.log("signMap执行了===========") // 将 icon 传入 marker var endMarker = new AMap.Marker({ position: new AMap.LngLat(116.333926, 39.997245), icon: /!*endIcon*!/require("@/assets/images/map_qd_1.png"), offset: new AMap.Pixel(-13, -30) }); var endMarker2 = new AMap.Marker({ position: new AMap.LngLat(116.333926, 39.987245), icon: /!*endIcon*!/require("@/assets/images/map_qd_2.png"), offset: new AMap.Pixel(-13, -30) }); // 将 markers 添加到地图 this.map.add([endMarker,endMarker2]);*/ } } } </script> <style lang='less' scoped> body,html{ margin:0;padding:0;font:12px/16px Verdana,Helvetica,Arial,sans-serif;width: 100%;height: 100%} .container{ height: 100% } .bigMap{ width:100%; height:600px; } .smallMap{ width: 400px; height: 300px; position: absolute; right: 0px; top: 0px; border: 3px solid #CFF; z-index: 1; } </style>