index.html,body中引入全局api
<script type="text/javascript"> window._AMapSecurityConfig = { securityJsCode:'你的秘钥', } </script> <script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=你的key"></script> <script src="//webapi.amap.com/ui/1.1/main.js"></script>
<template> <div> <my-in-content> <!-- 高德地图 --> <div id="container"></div> <div id="details"> <Card style="width:340px;height:280px"> <div style="text-align:lef;"> <p>经纬度:{{this.lnglat}}</p><br/> <p>地址:{{this.address}}</p><br/> <p>最近的路口:{{this.nearestJunction}}</p><br/> <p>最近的路:{{this.nearestRoad}}</p><br/> <p>最近的POI:{{this.nearestPOI}}</p><br/> </div> </Card> </div> <!-- 搜索 --> <div id="search"> <Input v-model="searchValue" placeholder="请输入要搜索的位置" style="width: 300px" /> <Button type="primary" @click="seachAddress">搜索</Button> <Button style="margin-left:5px;" type="primary" @click="reporAddress">上报位置</Button> </div> </my-in-content> </div> </template> <script> export default { name:'gdmap', data() { return { searchValue:'', gdmap: null, /* 当前位置 */ thisPosition: { location: '', lng: '', lat: '' }, /* 选取的位置 */ chosePosition: { location: '', lng: '', lat: '' }, /* 范围圆的数据 */ myCircle: {}, /* 签到圆对象 */ circle: {}, /* 编辑器对象 */ circleEditor: null, /* 拖拽对象 */ positionPickerObj: {}, //经纬度 lnglat:'', //地址 address:'', //最近的路口 nearestJunction:'', //最近的路 nearestRoad:'', //最近的POI nearestPOI:'', /* 当前城市编码 */ citycode: '020', //标记 marker:[], } }, created() { }, mounted() { //地图初始化 this.gdmap = new AMap.Map('container', { resizeEnable: true,//是否监控地图容器尺寸变化 zoom: 15,//地图显示的缩放级别 zooms: [3, 18],//地图显示的缩放级别范围在PC上,默认为[3,18],取值范围[3-18]; viewMode: '2D',//默认为‘2D’,可选’3D’,选择‘3D’会显示 3D 地图效果 }) //加载工具条 this.addTool(); //获取当前位置 this.thisLocation(); }, methods:{ //工具条 addTool () { AMap.plugin(['AMap.ToolBar'], () => { let toolbar = new AMap.ToolBar() this.gdmap.addControl(toolbar) }) }, //定位 thisLocation () { this.gdmap.plugin('AMap.Geolocation', () => { let geolocation = new AMap.Geolocation({ enableHighAccuracy: true,//是否使用高精度定位,默认:true timeout: 100, //超过10秒后停止定位,默认:无穷大 maximumAge: 0, //定位结果缓存0毫秒,默认:0 convert: true, //自动偏移坐标,偏移后的坐标为高德坐标,默认:true showButton: true, //显示定位按钮,默认:true buttonPosition: 'RB', //定位按钮停靠位置,默认:'LB',左下角 buttonOffset:new AMap.Pixel(10,20), showMarker: true, //定位成功后在定位到的位置显示点标记,默认:true showCircle: true, //定位成功后用圆圈表示定位精度范围,默认:true panToLocation: true, //定位成功后将定位到的位置作为地图中心点,默认:true zoomToAccuracy:true, //定位成功后调整地图视野范围使定位位置及精度范围视野内可见,默认:false }) this.gdmap.addControl(geolocation); geolocation.getCurrentPosition(); AMap.event.addListener(geolocation, 'complete', (data) => { console.log(data); //当前城市编码 this.citycode = data.addressComponent.cityCode; //经纬度 this.thisPosition = data.position; //地址 this.formattedAddress=data.formattedAddress; this.chosePosition = this.thisPosition; /* 画圆 */ this.cancelLocation() this.addCircle() /* 拖拽选址 */ this.positionPicker(); }) AMap.event.addListener(geolocation, 'error', function (data) { alert('定位失败'); }) }) }, /* 拖拽选址 */ positionPicker () { AMapUI.loadUI(['misc/PositionPicker'], (PositionPicker) => { this.positionPickerObj = new PositionPicker({ mode: 'dragMarker', // 设定为拖拽地图模式,可选'dragMap'、'dragMarker',默认为'dragMap' map: this.gdmap // 依赖地图对象 }) this.positionPickerObj.on('success', (positionResult) => { console.log(positionResult,"positionResult"); this.chosePosition = positionResult.position; //经纬度 console.log("经纬度:"+positionResult.position); this.lnglat=positionResult.position; //地址 console.log("地址:"+positionResult.address); this.address=positionResult.address; //最近的路口 console.log("最近的路口:"+positionResult.nearestJunction); this.nearestJunction=positionResult.nearestJunction; //最近的路 console.log("最近的路:"+positionResult.nearestRoad); this.nearestRoad=positionResult.nearestRoad; //最近的POI console.log("最近的POI:"+positionResult.nearestPOI); this.nearestPOI=positionResult.nearestPOI; /* 画圆 */ this.cancelLocation(); this.addCircle(); }) this.positionPickerObj.start([this.chosePosition.lng, this.chosePosition.lat]) }) }, /* 取消圆 */ cancelLocation() { this.gdmap.remove(this.circle) if (this.circleEditor) { this.circleEditor.close() } }, /* 画图 */ addCircle() { this.myCircle = { center: [this.chosePosition.lng, this.chosePosition.lat], // 圆心位置 radius: 50, // 半径 strokeColor: '#FFFF00', // 线颜色 strokeOpacity: 0.2, // 线透明度 strokeWeight: 1, // 线粗细度 fillColor: '#222222', // 填充颜色 fillOpacity: 0.2 // 填充透明度 } this.circle = new AMap.Circle(this.myCircle) this.circle.setMap(this.gdmap) // 引入多边形编辑器插件 this.gdmap.plugin(['AMap.CircleEditor'], () => { // 实例化多边形编辑器,传入地图实例和要进行编辑的多边形实例 this.circleEditor = new AMap.CircleEditor(this.gdmap, this.circle) // 开启编辑模式 this.circleEditor.open() //this.myCircle.radius = this.circle.Mg.radius this.circleEditor.on('adjust', (data) => { this.myCircle.radius = data.radius }) this.circleEditor.on('move', (data) => { console.log('移动') this.chosePosition.lng = data.lnglat.lng this.chosePosition.lat = data.lnglat.lat }) }) }, //搜索 seachAddress(){ if(this.searchValue!=''){ //清楚地图上的覆盖物 this.gdmap.clearMap(); console.log("搜索"); this.gdmap.plugin('AMap.PlaceSearch', () => { let placeSearch = new AMap.PlaceSearch({ // city 指定搜索所在城市,支持传入格式有:城市名、citycode和adcode city: '0797', map: this.gdmap }); let that=this; placeSearch.search(this.searchValue, function (status, result) { // 查询成功时,result即对应匹配的POI信息 console.log(result) var pois = result.poiList.pois; for(var i = 0; i < pois.length; i++){ var poi = pois[i]; var marker = []; marker[i] = new AMap.Marker({ position: poi.location, // 经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9] title: poi.name }); // 将创建的点标记添加到已有的地图实例: that.gdmap.add(marker[i]); } that.gdmap.setFitView(); AMap.event.addListener(placeSearch,'markerClick',function(data){ console.log(data); let result=data; //经纬度 let lng=result.event.lnglat.lng; let lat=result.event.lnglat.lat; that.lnglat=lng+","+lat; //地址 that.address=result.data.address; //最近路口 that.nearestJunction=''; //最近的路 that.nearestRoad=''; //最近的POI that.nearestPOI=''; }) }); }) } }, //位置上报 reporAddress(){ }, } } </script> <style> #container { width:100%; height: 600px; } #search{ z-index:999; position:absolute; left:100px; top:30px; opacity:0.8; } #details{ z-index:999; position:absolute; right:0px; top:0px; opacity:0.8; } </style>
效果: