153 lines
4.0 KiB
Vue
Raw Normal View History

2022-08-02 10:16:07 +08:00
<template>
<div class="m-map">
<div class="search" v-if="placeSearch">
<div id="js-result" v-show="searchKey" class="result"></div>
</div>
<div id="js-container" class="map">正在加载数据 ...</div>
</div>
</template>
<script>
import remoteLoad from '@/util/remoteLoad.js'
window._AMapSecurityConfig = {
securityJsCode: '4c7f32be1ae23595dd423fbdf337df3f'
}
// import { MapKey } from './config'
export default {
name: 'MapDrag',
props: {
searchKey: {
default: ''
}
},
data () {
return {
// searchKey: "",
placeSearch: null,
dragStatus: false,
AMapUI: null,
AMap: null,
city: '',
geolocation: null
}
},
watch: {
searchKey () {
if (this.searchKey === '') {
this.placeSearch.clear()
}
}
},
async created () {
// 已载入高德地图API则直接初始化地图
if (window.AMap && window.AMapUI) {
this.initMap()
// 未载入高德地图API则先载入API再初始化
} else {
await remoteLoad('https://webapi.amap.com/maps?v=2.0&key=4b083a38fc17ad7c5e3df667931e0cf0')
await remoteLoad('https://webapi.amap.com/ui/1.1/main.js')
this.initMap()
}
},
methods: {
// 搜索
handleSearch () {
console.log(this.searchKey, '33333oooo')
if (this.searchKey) {
this.placeSearch.search(this.searchKey)
}
},
// 实例化地图
initMap () {
// 加载PositionPickerloadUI的路径参数为模块名中 'ui/' 之后的部分
const AMapUI = (this.AMapUI = window.AMapUI)
const AMap = (this.AMap = window.AMap)
const that = this
AMapUI.loadUI(['misc/PositionPicker'], (PositionPicker) => {
const mapConfig = {
zoom: 16
}
const map = new AMap.Map('js-container', mapConfig)
// 获得当前定位的城市
AMap.plugin('AMap.CitySearch', function () {
const citySearch = new AMap.CitySearch()
console.log('citySearch', citySearch)
// 加载地图搜索插件
AMap.plugin('AMap.PlaceSearch', () => {
that.placeSearch = new AMap.PlaceSearch({
pageSize: 5,
pageIndex: 1,
citylimit: false,
map: map,
panel: 'js-result'
// city: that.city, // 设定搜索城市
})
AMap.Event.addListener(that.placeSearch, 'listElementClick', function (e) {
that.$emit('listElementClick', e)
})
AMap.Event.addListener(that.placeSearch, 'markerClick', function (e) {
that.$emit('listElementClick', e)
})
})
// citySearch.getLocalCity(function (status, result) {
// console.log('getLocalCity', status, result)
// if (status === 'complete' && result.info === 'OK') {
// // 查询成功result即为当前所在城市信息
// that.city = result.adcode
// }
// })
})
// 启用工具条
AMap.plugin(['AMap.ToolBar', 'AMap.Scale', 'AMap.Geolocation'], function () {
map.addControl(
new AMap.ToolBar({
position: 'RB'
})
)
map.addControl(
new AMap.Scale({
position: 'LB'
})
)
})
// 创建地图拖拽
const positionPicker = new PositionPicker({
mode: 'dragMap', // 设定为拖拽地图模式,可选'dragMap'、'dragMarker',默认为'dragMap'
map: map // 依赖地图对象
})
// 启动拖放
positionPicker.start()
})
}
}
}
</script>
<style lang="css" scoped>
.m-map {
max-width: 700px;
max-height: 462px;
position: relative;
}
.m-map .map {
min-width: 700px;
min-height: 462px;
}
.m-map .search {
position: absolute;
top: 10px;
left: 10px;
width: 285px;
z-index: 1;
}
.m-map .result {
max-height: 300px;
overflow: auto;
margin-top: 10px;
}
</style>