请你扮演一个高级前端,用百度地图+vue2写一个地图选点并且可搜索地点选择的功能,写一个完整案例
时间: 2024-02-27 16:53:53 浏览: 143
好的,很高兴为您提供这个案例。首先,我们需要在Vue项目中引入百度地图API。在Vue CLI中,可以使用以下命令安装:
```
npm install vue-baidu-map --save
```
接下来,我们需要在main.js中引入百度地图API:
```javascript
import Vue from 'vue'
import BaiduMap from 'vue-baidu-map'
Vue.use(BaiduMap, {
ak: 'YOUR_APP_KEY'
})
```
这里的“YOUR_APP_KEY”应该被替换成您自己的百度地图应用程序密钥。如果您没有一个,请前往百度地图开发者中心创建一个。
接下来,我们需要创建一个Vue组件来实现地图选点和搜索。以下是一个可能的实现:
```vue
<template>
<div>
<div class="map-container">
<baidu-map class="map" :center="center" :zoom="zoom" @click="handleMapClick">
<bm-marker v-if="selectedPoint" :position="selectedPoint"></bm-marker>
</baidu-map>
</div>
<div class="search-container">
<input class="search-input" type="text" v-model="searchText" @keyup.enter="search" placeholder="搜索地点...">
<ul class="search-results" v-if="searchResults.length > 0">
<li v-for="(result, index) in searchResults" :key="index" @click="selectResult(result)">
{{ result.title }}
</li>
</ul>
</div>
</div>
</template>
<script>
export default {
data() {
return {
center: { // 地图中心点
lng: 116.404,
lat: 39.915
},
zoom: 15, // 地图缩放级别
searchText: '', // 搜索框文本
searchResults: [], // 搜索结果
selectedPoint: null // 选中的点
}
},
methods: {
handleMapClick(event) { // 处理地图点击事件
this.selectedPoint = {
lng: event.point.lng,
lat: event.point.lat
}
},
search() { // 搜索地点
const local = new BMap.LocalSearch(this.$BMap.Map, {
onSearchComplete: results => {
const searchResults = []
for (let i = 0; i < results.getCurrentNumPois(); i++) {
const poi = results.getPoi(i)
searchResults.push({
title: poi.title,
point: poi.point
})
}
this.searchResults = searchResults
}
})
local.search(this.searchText)
},
selectResult(result) { // 选择搜索结果
this.selectedPoint = result.point
this.center = result.point
this.zoom = 15
this.searchResults = []
}
}
}
</script>
<style scoped>
.map-container {
height: 400px;
margin-bottom: 20px;
}
.map {
height: 100%;
}
.search-container {
position: relative;
}
.search-input {
width: 100%;
height: 30px;
padding: 5px;
box-sizing: border-box;
border: 1px solid #ccc;
border-radius: 5px;
}
.search-results {
position: absolute;
top: 35px;
left: 0;
width: 100%;
max-height: 200px;
overflow-y: auto;
background-color: #fff;
border: 1px solid #ccc;
border-radius: 5px;
list-style: none;
padding: 0;
margin: 0;
}
.search-results li {
padding: 5px;
cursor: pointer;
}
.search-results li:hover {
background-color: #f5f5f5;
}
</style>
```
这个组件包含一个地图容器和一个搜索容器。在地图容器中,我们使用了vue-baidu-map组件来展示地图,并且监听了点击事件来处理选点。在搜索容器中,我们使用了一个输入框和一个搜索结果列表来实现搜索功能。我们使用BMap.LocalSearch来进行地点搜索,并且在搜索结果中展示了标题,同时在选择结果时将地图中心点和选中点设置为所选结果。
这就是一个简单的百度地图选点和搜索功能的实现。在实际项目中,您可能需要对其进行更多的定制和扩展。
阅读全文