vue 使用高德地图的 搜索 戳点功能
2023-12-15 04:52:04
前言:
? ? ? ? 此文章只是目前自己用,不做过多的详细解说。以及我们在高德地图官网上以个人账号申请使用的有限制。比如我们做搜索功能好像是每天允许搜索100次。
一. 引入高德地图
? ? ? ? 这个只是简单说明一下,高德地图有官方文档。在index.html文件引入。
// confing.js 自己创建
<script src="./static/config.js"></script>
<script type="text/javascript">
// 高德地图秘钥,必须在加载JSAPI load.js文件之前
window._AMapSecurityConfig = {
securityJsCode: gloableConfig.secretKey // 开发环境使用
}
</script>
2. confing.js
? ? ? ?key以及secretKey 自己在高德官网上申请
var gloableConfig = {
"key": "xxxxxx",
"secretKey": "xxxxxxx"
};
?二. 详细代码
? ? ? ? 其中,只要你地图引入的没问题。下面代码可以直接使用。其次我是按需要引入高德地图,
你可以直接引入高德地图??import AMap from 'AMap';
? ? ? ? 高德地图官网上??PlaceSearch 这个Api 是带有分页的 我没做只做了一页展示。可以自己打印看,自己处理一下。
<template>
<!-- 首页 -->
<div class="homebox">
<!-- 搜索 -->
<div class="searchMap">
<el-input v-model="mapsearch" clearable id="tipinput" placeholder="请输入" @change="handlemapsearch"></el-input>
<transition name="el-zoom-in-top">
<div id="panel" v-if="searchData.length > 0">
<div class="item_word" v-for="(item, index) in searchData" :key="index" @click="handlemapkeywordbtn(item)">{{ item.name }}</div>
</div>
</transition>
</div>
<div id="mapcontainer" style="width: 100%; height: 100%"></div>
</div>
</template>
<script>
if (netWorkFlag) { import("AMap"); } // 按需引入高德地图
export default {
data() {
return {
/****************** 地图 ******************/
mapsearch: null, // 地图搜索关键字
map: null, // 地图实例
searchData: [], // 搜索内容
markerCurrent: null, // 当前地图戳的点位
markerTextCurrent: null, // 当前地图戳的文字
}
},
mounted() {
this.initMap(); // 初始化地图
},
methods: {
// 初始化地图
initMap() {
let _this = this;
var map = new AMap.Map("mapcontainer", {
resizeEnable: true,
mapStyle: 'amap://styles/a9f8af7c51ff24b217818bd1cb4ed23d', // yyh 蓝白
center: [116.109204, 40.21111],
zoom: 11.2,
zooms: [10, 20],
resizeEnable: true,
pitch: 0, // 地图俯仰角度,有效范围 0 度- 83 度
viewMode: "3D", // 地图模式
buildingAnimation: true, // 默认false,表示是否将建筑物动画显示
animateEnable: true,
});
this.map = map;
this.addMaptoolBar(); // 添加地图控件
this.map.on("click", _this.handlemapclickbtn); // 地图添加点击事件
},
// 添加地图控件
addMaptoolBar() {
let _this = this;
AMap.plugin(['AMap.ToolBar'], function(){
// 在图面添加工具条控件, 工具条控件只有缩放功能
_this.map.addControl(new AMap.ToolBar());
});
},
// 搜索-input_change事件
handlemapsearch(val) {
if(!val) {
this.searchData = [];
return;
}
let _this = this;
AMap.plugin('AMap.PlaceSearch', function () {
let autoOptions = {
city: '北京',
pageSize: 20
}
let placeSearch = new AMap.PlaceSearch(autoOptions);
placeSearch.search(_this.mapsearch, function (status, result) {
_this.searchData = result.poiList.pois || [];
})
})
},
// 点击搜索的关键字
handlemapkeywordbtn(item) {
let jwd = [item.location.lng, item.location.lat];
this.mapsearch = item.name;
this.map.panTo(jwd);
this.map.setZoom(13);
this.searchData = [];
},
// 地图点击点击事件
handlemapclickbtn(e) {
// 先清除
if(this.markerCurrent) {
this.markerCurrent.setMap(null);
this.markerTextCurrent.setMap(null);
this.markerCurrent = null;
this.markerTextCurrent = null;
}
let bbox = [e.lnglat.getLng(), e.lnglat.getLat()];
this.markerCurrent = new AMap.Marker({
position: bbox,
icon: new AMap.Icon({
image: "//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png",
imageSize: new AMap.Size(25, 30),
size: new AMap.Size(25, 30),
}),
extData: {
bbox: bbox
},
});
this.markerCurrent.setMap(this.map);
this.markerTextCurrent = new AMap.Text({
text: '测试设备',
anchor: "center", // 设置文本标记锚点
cursor: "pointer",
angle: 0,
offset: [10, -10],
style: {
"background-color": "#ffffff00",
border: "none",
"text-align": "center",
"font-size": ".14rem",
color: "#000",
},
extData: {
bbox: bbox
},
position: bbox,
});
this.markerTextCurrent.setMap(this.map);
},
}
}
</script>
<style lang="less" scoped>
.homebox {
width: 100%;
height: 100%;
box-sizing: border-box;
position: relative;
// 搜索
.searchMap {
position: absolute;
z-index: 9;
top: 0.1rem;
left: 0.2rem;
/deep/.el-input__inner {
width: 2.7rem;
height: 40px;
}
#panel {
width: 2.7rem;
height: 3rem;
margin-top: 0.1rem;
border-radius: 0.05rem;
background: #fff;
overflow-y: scroll;
.item_word {
cursor: pointer;
line-height: 0.3rem;
padding-left: 0.1rem;
box-sizing: border-box;
}
}
}
}
</style>
<style>
.amap-logo {
display: none !important;
}
.amap-copyright {
bottom: -100px;
display: none !important;
}
/* 兼容性隐藏滚动条 */
#panel {
scrollbar-width: none;/* Firefox */
-ms-overflow-style: none;/* IE 10+ */
}
#panel::-webkit-scrollbar {
display: none;/* Chrome Safari */
}
</style>
文章来源:https://blog.csdn.net/qq_42164957/article/details/134993992
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!