请你扮演一个资深前端,用vue2(已引入)+百度地图(已引入)+element(已引入)写一个地图选点(通过弹框形式)并且可搜索地点,最后选择的功能,写一个完整的vue案例
时间: 2024-01-20 14:02:05 浏览: 69
Vue3 + Vite5 + Vue Router + Pinia + Element Plus 搭建的后台管理模版
5星 · 资源好评率100%
好的,下面是一个完整的 Vue 案例,实现了地图选点并且可搜索地点的功能:
```html
<template>
<div>
<div id="map"></div>
<el-button type="primary" @click="showDialog">选择位置</el-button>
<el-dialog :visible.sync="dialogVisible" width="70%" title="选择位置">
<el-input placeholder="请输入关键词" v-model="searchValue" @keydown.enter.native="search"></el-input>
<div id="dialogMap" style="height: 400px;"></div>
<div id="searchBox"></div>
<el-table :data="searchResult" @row-click="handleSelect">
<el-table-column prop="title" label="名称"></el-table-column>
<el-table-column prop="address" label="地址"></el-table-column>
</el-table>
</el-dialog>
</div>
</template>
<script>
export default {
data() {
return {
map: null, // 地图对象
point: null, // 选中的点
dialogVisible: false, // 弹框可见性
searchValue: '', // 搜索框的值
searchResult: [] // 搜索结果
};
},
mounted() {
// 创建地图对象
this.map = new BMap.Map("map");
this.map.centerAndZoom(new BMap.Point(116.404, 39.915), 11);
this.map.enableScrollWheelZoom(true);
},
methods: {
showDialog() {
// 显示弹框
this.dialogVisible = true;
// 创建搜索框和地图
const searchBox = new BMapLib.SearchBox("searchBox", {
onSearchComplete: (results) => {
// 处理搜索结果
this.searchResult = results.map((result) => {
return {
title: result.title,
address: result.address,
point: result.point
};
});
}
});
const map = new BMap.Map("dialogMap");
const point = this.point || new BMap.Point(116.404, 39.915);
map.centerAndZoom(point, 15);
map.enableScrollWheelZoom(true);
const marker = new BMap.Marker(point);
map.addOverlay(marker);
// 监听搜索结果的点击事件
map.addEventListener("click", (e) => {
marker.setPosition(e.point);
this.point = e.point;
});
},
handleSelect(item) {
// 选择一个点
this.point = item.point;
this.dialogVisible = false;
},
search() {
// 搜索关键词
const searchBox = new BMapLib.SearchBox("searchBox", {
onSearchComplete: (results) => {
// 处理搜索结果
this.searchResult = results.map((result) => {
return {
title: result.title,
address: result.address,
point: result.point
};
});
}
});
searchBox.search(this.searchValue);
}
}
}
</script>
<style>
#map {
height: 400px;
}
</style>
```
在这个案例中,我们创建了一个地图和一个按钮,用于触发弹框。在弹框中,我们创建了一个搜索框和地图,并且显示了搜索结果列表。当用户选择一个搜索结果时,我们在地图上显示该点,并且将其作为选择的点。
阅读全文