基于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);
});
},