事情原因是做项目遇到一个需求,地图上定位描点,但是由于数据量暴增,直接导致地图卡死。
所以想到的解决方案是,只加载当前屏幕中的 地图描点信息。
实现方法是使用 regionChange 方法
但是还有问题就是 万一缩放到 又要加载全部数据的定位一样会卡死
我的解决办法就是优化同屏显示数量,我这里是默认最多显示 200个
javascript
<template>
<view>
<map id="myMap" :markers="visibleMarkers" :latitude="latitude" :longitude="longitude" :scale="scale" @regionchange="regionChange"></map>
</view>
</template>
<script>
export default {
data() {
return {
latitude: 39.909,
longitude: 116.3974,
scale: 12,
allMarkers: [
// 这里是所有的标注点数据,包含经纬度等信息
{ id: 1, latitude: 39.91, longitude: 116.39, name: 'Marker 1' },
{ id: 2, latitude: 39.92, longitude: 116.40, name: 'Marker 2' },
// 更多的标注点...
],
visibleMarkers: [] // 存储当前可见区域的标注点
};
},
methods: {
regionChange(event) {
// 仅在用户结束拖动或缩放操作时更新标记点
if (event.type === 'end') {
const mapContext = uni.createMapContext('myMap');
mapContext.getRegion({
success: (res) => {
const { southwest, northeast } = res;
const visibleMarkers = this.allMarkers.filter(marker => {
return marker.latitude >= southwest.latitude && marker.latitude <= northeast.latitude &&
marker.longitude >= southwest.longitude && marker.longitude <= northeast.longitude;
});
// 限制 visibleMarkers 的数量为 200 个
this.visibleMarkers = visibleMarkers.slice(0, 200);
}
});
}
}
}
};
</script>