基于vue的H5页面中使用高德地图定位,搜索周边商户,覆盖物标记
首先安装高德地图插件
| npm i @amap/amap-jsapi-loader --save |
复制
地图承载容器
| <template> |
| <div id="container"></div> |
| </template> |
复制
地图容器样式
| <style scoped> |
| #container{ |
| padding:0px; |
| margin: 0px; |
| width: 100%; |
| height: 800px; |
| } |
| </style> |
复制
引入 JS API Loader ,并初始化地图,增加覆盖物标记marker
| <script> |
| import AMapLoader from "@amap/amap-jsapi-loader"; |
| import axios from "axios"; |
| import Qs from "qs"; |
| export default { |
| data() { |
| return { |
| map: null, |
| marker: [], |
| arr: [ |
| { |
| name: "如意湖", |
| icon: "https://img1.baidu.com/it/u=3590267805,2648573622&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500", |
| ip1: 113.73241336023165, |
| ip2: 34.77923169201559, |
| }, |
| ], |
| }; |
| }, |
| mounted() { |
| this.initMap(); |
| }, |
| methods: { |
| initMap() { |
| var _this = this; |
| AMapLoader.load({ |
| key: "xxxxx", |
| version: "", |
| plugins: ["AMap.Geolocation"], |
| }) |
| .then((AMap) => { |
| this.map = new AMap.Map("container", { |
| |
| viewMode: "3D", |
| zoom: 13, |
| center: [113.73072265943132, 34.77648371816693], |
| }); |
| for (var i = 0; i < _this.arr.length; i++) { |
| var content = `<div class='marker-wrap'><img src='${_this.arr[i].icon}' /><div class='marker-txt'>${_this.arr[i].name}</div></div>`; |
| var markerItem = new AMap.Marker({ |
| position: [_this.arr[i].ip1, _this.arr[i].ip2], |
| offset: new AMap.Pixel(-13, -20), |
| content: content, |
| }); |
| markerItem.on("click", _this.markerClick); |
| markerItem.setExtData({ deviceMarkId: _this.arr[i] }); |
| _this.marker.push(markerItem); |
| } |
| |
| this.map.add(this.marker); |
| }) |
| .catch((e) => { |
| console.log(e); |
| }); |
| }, |
| markerClick(e) { |
| var demo = e.target.getExtData(); |
| console.log("demo: ", demo); |
| }, |
| }, |
| }; |
| </script> |
| |
复制
高德地图实现定位,域名必须是https开头(官方要求,不然会定位失败),然后必须是手机开启定位才行,在电脑上无法定位成功,AMap.Geolocation
| initMap() { |
| var _this = this; |
| AMapLoader.load({ |
| key: "xxxx", |
| version: "", |
| plugins: ["AMap.Geolocation"], |
| }) |
| .then((AMap) => { |
| this.map = new AMap.Map("container", { |
| |
| viewMode: "3D", |
| zoom: 13, |
| |
| }); |
| const OPTIONS = { |
| |
| enableHighAccuracy: true, |
| |
| timeout: 3000, |
| maximumAge: 0, |
| convert: true, |
| showButton: true, |
| |
| buttonOffset: new AMap.Pixel(10, 20), |
| |
| zoomToAccuracy: true, |
| showMarker: true, |
| showCircle: true, |
| panToLocation: true, |
| |
| buttonPosition: "RB", |
| }; |
| var geolocation = new AMap.Geolocation(OPTIONS); |
| _this.map.addControl(geolocation); |
| geolocation.getCurrentPosition(); |
| AMap.event.addListener(geolocation, "complete", onComplete); |
| AMap.event.addListener(geolocation, "error", onError); |
| function onComplete(data) { |
| console.log("data: ", data); |
| |
| } |
| |
| function onError(err) { |
| console.log("err: ", err); |
| |
| } |
| }) |
| .catch((e) => { |
| console.log(e); |
| }); |
| }, |
复制
高德地图实现周边搜索,关键字搜索,检索不得超过80个字符,分页返回,每页最大值为25条,搜索结果截图如下
| search() { |
| var params = { |
| key: "xxx", |
| keywords: "丹尼斯|悦来悦喜", |
| page_size: 25, |
| page_num: 1, |
| location: "113.73072265943132,34.77648371816693", |
| radius: 3000, |
| output: "json", |
| }; |
| axios({ |
| url: "https://restapi.amap.com/v5/place/around?" + Qs.stringify(params), |
| method: "get", |
| headers: { |
| "Content-Type": "application/x-www-form-urlencoded", |
| }, |
| }).then((res) => { |
| console.log("res: ", res); |
| }); |
| }, |
| initMap() { |
| var _this = this; |
| AMapLoader.load({ |
| key: "xx", |
| version: "", |
| plugins: [], |
| }) |
| .then((AMap) => { |
| _this.map = new AMap.Map("container", { |
| |
| viewMode: "3D", |
| zoom: 13, |
| center: [113.73072265943132, 34.77648371816693], |
| }); |
| _this.search(); |
| }) |
| .catch((e) => { |
| console.log(e); |
| }); |
| }, |
复制

高德地图实现定位城市及详细经纬度,geolocation.getCurrentPosition,geolocation.getCityInfo
| initMap() { |
| var that = this; |
| AMapLoader.load({ |
| key: "xxx", |
| version: "1.4.15", |
| plugins: ["AMap.Geolocation"], |
| }) |
| .then((AMap) => { |
| that.map = new AMap.Map("container", { |
| resizeEnable: true, |
| |
| viewMode: "3D", |
| zoom: 16, |
| |
| }); |
| const OPTIONS = { |
| |
| enableHighAccuracy: true, |
| |
| timeout: 3000, |
| maximumAge: 0, |
| convert: true, |
| showButton: true, |
| |
| buttonOffset: new AMap.Pixel(10, 20), |
| |
| zoomToAccuracy: true, |
| showMarker: true, |
| showCircle: true, |
| panToLocation: true, |
| |
| buttonPosition: "RB", |
| }; |
| var geolocation = new AMap.Geolocation(OPTIONS); |
| that.map.addControl(geolocation); |
| geolocation.getCityInfo((status, result) => { |
| if (status == "complete") { |
| console.log(result) |
| geolocation.getCurrentPosition((status1, result1) => { |
| if (status1 == "complete") { |
| console.log(result1) |
| } else { |
| console.log(result1) |
| } |
| }); |
| } else { |
| console.log(result) |
| } |
| }); |
| }) |
| .catch((e) => { |
| console.log(e); |
| }); |
| }, |
复制