我建议您减少点要素的渲染量:人眼将看不到10,000点,更不用说2,000,000。
您可以尝试从自定义服务器动态地请求数据集(必须设置),例如
map = ...
map.on('moveend', function(e) {
getGeoJson(e);
});
map.on('zoomend', function(e) {
getGeoJson(e);
});
map.setView([2,3], 2);
function getGeoJson(event) {
// todo determine current viewport
$http.get('someGeoJsonDataProvider.someLanguage?currentView=[lat0,lon0,lat1,lon1]').then(function (resp) {
// todo clear layers
// new layer
map.addLayer(
L.geoJson(resp.data)
);
});
}
然后,服务器将根据用户现在要查看的内容来计算返回的点。根据缩放系数和裁剪,您只需要返回很小比例的点,而不会恶化用户体验。
缺点:设置服务器(您应该找到用于过滤地理位置的库)且渲染速度较慢(每次缩放或拖动之后,都需要发出服务器请求)