MapContainer.vue
6.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
<template>
<div id="container1" ></div>
</template>
<script>
import AMapLoader from '@amap/amap-jsapi-loader'
window._AMapSecurityConfig = {
securityJsCode: '0909896c00dc4bf28c6ee99a43533c53'
}
var map = {}; // 最好在data外声明要不然地图会一卡一卡
var markers = []; // 最好在data外声明要不然地图会一卡一卡
export default {
components: {},
props:['message'],
watch: {
// 监听父组件传递的值
message(newValue, oldValue) {
console.log(newValue, oldValue)
this.mapData = newValue
this.initMap()
}
},
data() {
return {
autoOptions: {
input: ''
},
auto: null,
map: null,
mapData:[
{
name: '测试',
longitude: 104.113368, // 经纬度
latitude: 30.518559, // 经纬度
content:'123123123@163.com',
// img:''
},
],
}
},
methods: {
initMap() {
AMapLoader.load({
key: '438a727f8ff61d71f33694f386c108c3', // 申请好的Web端开发者Key,首次调用 load 时必填
terrain: true,
version: '2.0', // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
plugins: ['AMap.ToolBar', 'AMap.Scale', 'AMap.HawkEye', 'AMap.Geolocation','AMap.AutoComplete',"AMap.Marker",'AMap.InfoWindow'],// 需要使用的的插件列表,如比例尺'AMap.Scale'等
})
.then(AMap => {
this.map = new AMap.Map('container1', {
//设置地图容器id
viewMode: '3D', //是否为3D地图模式
zoom: 10, //初始化地图级别
center: [104.113368,30.518559] //初始化地图中心点位置
});
this.map.addControl(new AMap.Scale())
this.map.addControl(new AMap.ToolBar())
this.map.addControl(new AMap.HawkEye())
this.map.addControl(new AMap.Geolocation())
this.markPoints()
this.latitude()
})
.catch(e => {
console.log(e)
})
},
markPoints() {
this.mapData.forEach((item,index) => {
// 创建一个 Marker 实例:
console.log(item.mapPunctuation)
if(item.mapPunctuation){
var mapMsg = item.mapPunctuation
}else{
var mapMsg = item.mapMarker
}
if(mapMsg){
let pos = JSON.parse(mapMsg)
const marker = new AMap.Marker({
map: this.map,
icon: new AMap.Icon({
// size: new AMap.Size(19, 32),
// anchor:new AMap.Pixel(20, 30),
image: 'https://webapi.amap.com/theme/v1.3/markers/n/mark_b.png', // 默认图标的URL
}),
position: new AMap.LngLat(pos.longitude, pos.latitude),
// position: new AMap.LngLat(item.longitude, item.latitude), // 经纬度对象,也可 以是经纬度构成的一维数组[lng, lat]
});
markers.push(marker)
// 将创建的点标记添加到已有的地图实例:
this.map.add(marker);
this.map.setFitView();
//给标记点添加事件
marker.on('click', (e) => {
this.setInfoWindows(e, item)
console.log(e, item)
})
}else{
return;
}
});
},
//显示的弹出框组件
setInfoWindows(e, item) {
if(item.mapPunctuation){
var mapMsg = item.mapPunctuation
}else{
var mapMsg = item.mapMarker
}
// 信息窗体的内容
let content = [
`<div class="chuangti">`,
`<div class="moren ">资源名称 : ${item.shopName || item.advertisingName || item.venueName}<div class="xiangq" onclick='goshop(${JSON.stringify(item)})'">详情 ></div></div>`,
`<div class="">位置 : ${item.detailedLocation || item.detailedLocation}</div>`,
`<div class="">租赁情况 : <span class="kongzhi">空置</span></div>`,
"招商进度 : 无租赁申请</div>",
];
let contentlist = [
`<div class="chuangti">`,
`<div class="moren ">资源名称 : ${item.shopName || item.advertisingName || item.venueName}<div class="xiangq" onclick='goshop(${JSON.stringify(item)})'>详情 ></div></div>`,
`<div class="">位置 : ${item.detailedLocation || item.detailedLocation}</div>`,
`<div class="">租赁人 :张三</div>`,
`<div class="">经营类型 :休闲娱乐</div>`,
`<div class="">联系方式 :1231312312312</div>`,
`<div class="">到期时间 :2022-02-22</div>`,
];
// 创建 infoWindow 实例
let infoWindow = new AMap.InfoWindow({
offset: new AMap.Pixel(8,0),
content: content.join("<br>") //传入 dom 对象,或者 html 字符串
});
// 打开信息窗体
let pos = JSON.parse(mapMsg)
let dd = this.map.getCenter()
// dd.pos = [e.pos[0], e.pos[1]]
dd.lat = pos.latitude
dd.lng = pos.longitude
infoWindow.open(this.map, dd);
infoWindow.setAnchor('bottom-center')
},
//点击获取经纬度
latitude() {
this.map.on('click',(ev)=> {
// 触发事件的对象
let target = ev.target;
// 触发事件的地理坐标,AMap.LngLat 类型
let lnglat = ev.lnglat;
// 触发事件的像素坐标,AMap.Pixel 类型
let pixel = ev.pixel;
// 触发事件类型
let type = ev.type;
});
},
destroyMap() {
if (this.map) {
this.map.destroy();
this.map = null;
}
}
},
created(){
//标注文字上的点击事件
window.goshop = (item)=>{
this.$emit('MapItem', item)
}
},
mounted() {
//DOM初始化完成进行地图初始化
// this.initMap()
},
beforeDestroy() {
this.destroyMap();
}
}
</script>
<style lang="scss">
#container1 {
position: relative;
padding: 0px;
margin: 0px;
width: 100%;
height: 100%;
}
::v-deeep .amap-info-content{
padding:0px;
}
.chuangti{
font-size: 12px;
}
.moren{
// width: 160px;
display: flex;
justify-content: space-between;
}
.xiangq{
color: #3F9B6A;
}
.kongzhi{
color: #F59A23;
}
.amap-icon{
img {
width:19px;
height:30px;
}
}
</style>