1、普通maker创建,然后添加到地图上,页面会出现卡顿,甚至有可能卡死,页面崩溃。。。
async initMark() {
var map = this.map
this.removeMarkers()
this.map.setZoom(7)
this.map.setCenter([108.907295, 35.601474])
this.infoWindow = new AMap.InfoWindow({ offset: new AMap.Pixel(-3, -16) })
let infoWindow = this.infoWindow
let list = this.list
let category = this.mapDataType ? '' : this.category
for (var i = 0; i < list.length; i++) {
let iconType =
list[i] && list[i].index ? list[i].index.split('_data')[0] : ''
let icon = iconType ? this.newIcon(iconType) : this.icon
let lon = list[i].lon || list[i].end_lon
let lat = list[i].lat || list[i].end_lat
// console.log(i, lon, lat)
if (lon && lat) {
let marker = new AMap.Marker({
position: [lon, lat],
data: list[i],
map: map,
offset: new AMap.Pixel(-11, -11),
icon: icon
})
let that = this
marker.on('click', function(e) {
let myRow = ''
let showItem = []
let shwoTitlekey = ''
let data =e.target.w.data || e.target.Ce.data
let trueKey = data && data.index ? data.index.split('_data')[0] : ''
if (data.index) {
shwoTitlekey = getKeyByCategory(trueKey).nameKey
detailByIndexAndIdApi({ index: data.index, id: data.id }).then(
res => {
data = res.data
showItem = formItem[trueKey]
myRow =
'<div class="info_title">' + data[shwoTitlekey] + '</div>'
if (showItem && showItem.length) {
for (let i = 0; i < showItem.length; i++) {
if (showItem[i].type === 'objArray') {
let val = ''
for (let j = 0; j < showItem[i].name.length; j++) {
val +=
data[showItem[i].name[j].value] +
showItem[i].name[j].label
}
myRow +=
'<div class="info_row"><span class="info_lable">' +
showItem[i].label +
':</span>' +
val +
'</div>'
} else if (showItem[i].type === 'array') {
let val = ''
for (let j = 0; j < showItem[i].name.length; j++) {
if (data[showItem[i].name[j]]) {
val +=
j > 0
? '、' + data[showItem[i].name[j]]
: data[showItem[i].name[j]]
}
}
myRow +=
'<div class="info_row"><span class="info_lable">' +
showItem[i].label +
':</span>' +
val +
'</div>'
} else {
let currentVal = data[showItem[i].name]
? data[showItem[i].name]
: '无'
myRow +=
'<div class="info_row"><span class="info_lable">' +
showItem[i].label +
':</span>' +
currentVal +
'</div>'
}
}
}
let html = myRow
infoWindow.setContent(html)
infoWindow.open(map, e.target.getPosition())
}
)
}
})
}
// marker.emit('click', { target: marker })
}
}
2、 通过new AMap.MassMarks实现,页面可以很好的渲染,不会出现卡死。
async initMark() {
var map = this.map
this.resetMap()
this.infoWindow = new AMap.InfoWindow({ offset: new AMap.Pixel(-3, -16) })
let infoWindow = this.infoWindow
let list = this.list
let category = this.mapDataType ? '' : this.category
let style = []
list.forEach((item, ind) => {
let lon = item.lon || item.end_lon
let lat = item.lat || item.end_lat
item.lnglat = [lon, lat]
let iconType = item && item.index ? item.index.split('_data')[0] : ''
let icon = iconType ? this.newIcon2(iconType) : this.icon
style.push(icon)
item.style = ind
})
var mass = new AMap.MassMarks(list, {
opacity: 1,
zIndex: 111,
cursor: 'pointer',
style: style
})
var marker = new AMap.Marker({ content: ' ', map: map })
mass.on('click', function(e) {
let myRow = ''
let showItem = []
let shwoTitlekey = ''
let data = e.data || e.target.w.data || e.target.Ce.data
let trueKey = data && data.index ? data.index.split('_data')[0] : ''
if (data.index) {
shwoTitlekey = getKeyByCategory(trueKey).nameKey
detailByIndexAndIdApi({ index: data.index, id: data.id }).then(
res => {
data = res.data
showItem = formItem[trueKey]
myRow = '<div class="info_title">' + data[shwoTitlekey] + '</div>'
if (showItem && showItem.length) {
for (let i = 0; i < showItem.length; i++) {
if (showItem[i].type === 'objArray') {
let val = ''
for (let j = 0; j < showItem[i].name.length; j++) {
val +=
data[showItem[i].name[j].value] +
showItem[i].name[j].label
}
myRow +=
'<div class="info_row"><span class="info_lable">' +
showItem[i].label +
':</span>' +
val +
'</div>'
} else if (showItem[i].type === 'array') {
let val = ''
for (let j = 0; j < showItem[i].name.length; j++) {
if (data[showItem[i].name[j]]) {
val +=
j > 0
? '、' + data[showItem[i].name[j]]
: data[showItem[i].name[j]]
}
}
myRow +=
'<div class="info_row"><span class="info_lable">' +
showItem[i].label +
':</span>' +
val +
'</div>'
} else {
let currentVal = data[showItem[i].name]
? data[showItem[i].name]
: '无'
myRow +=
'<div class="info_row"><span class="info_lable">' +
showItem[i].label +
':</span>' +
currentVal +
'</div>'
}
}
}
let html = myRow
infoWindow.setContent(html)
infoWindow.open(map, e.data.lnglat)
}
)
}
})
this.mass= mass
mass.setMap(map)
}
3、关于地图重绘
普通maker可以通过重绘地图的方式: this.map.clearMap()
海量点重绘可以通过清除海量点重绘: this.mass.clear()
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。