leaflet - 传单:仅在屏幕上显示元素
问题描述
我有一个非常大的 geoson,当它加载时,地图非常慢。
我想在地图上仅显示与可见屏幕相关的元素(与移动和缩放兼容)。
有代码:
var geojsonLayerAerien = new L.GeoJSON.AJAX("/json/data.json",
{
style: {
weight: 3,
color: "#5588EE",
opacity: 0.5,
fillColor: "#B0DE5C",
fillOpacity: 0.3
},
onEachFeature: onEachFeature
}
);
var overlayMaps = {
"Réseau Aérien": geojsonLayerAerien
};
L.control.layers(baseMaps, overlayMaps, null, { collapsed: true }).addTo(map);
你能帮我实现代码或给我一些提示吗?谢谢
解决方案
在加载数据之前,尝试使用 php 或其他方式过滤数据,因此计算在服务器端。
但是如果你想在客户端,你可以检查对象的纬度是否在地图范围内:
var bbox = mymap.getBounds().pad(0.3); //Expand bounds 10%
var rect = L.rectangle(bbox, {fillColor: '#f00'}).addTo(mymap); //Only for showing the loading area
function bboxFilter(feature) {
if (feature.geometry.type === "Point"){
var latlng = L.latLng(feature.geometry.coordinates[1],feature.geometry.coordinates[0]);
if(bbox.contains(latlng)){
return true;
}else{
return false;
}
}else{
var polylatlng = new L.Polyline([]);
var coords = feature.geometry.coordinates;
coords[0].forEach(function(coord){
var lat = coord[1];
var lng = coord[0];
polylatlng.addLatLng(L.latLng([lat,lng]));
});
if(bbox.contains(polylatlng.getLatLngs())){
polylatlng.removeFrom(mymap);
return true;
}else{
polylatlng.removeFrom(mymap);
return false;
}
}
}
var geojson = L.geoJSON(json,{filter: bboxFilter}).addTo(mymap);
mymap.on('moveend',reloadData);
function reloadData(){
bbox = mymap.getBounds().pad(0.3); //Expand bounds 10%
geojson.clearLayers();
geojson = L.geoJSON(json,{filter: bboxFilter}).addTo(mymap);
rect.setBounds(bbox);
}
示例:https ://jsfiddle.net/falkedesign/b2st3m9u/
PS:换成bbox = mymap.getBounds().pad(0.3);
看bbox = mymap.getBounds().pad(-0.1);
效果
推荐阅读
- c++ - PyRun_SimpleString 因特殊字符而失败
- java - 如何在不更改已设置字体的情况下更改 TextInputLayout 提示的字体颜色?
- python - 启动实例运行文件而不是终止的自动化方式
- function - 通过 Google Tag Manager 数据层跟踪页面上所有事件的功能
- javascript - 将 CRA 应用程序部署到 Google Cloud 时出现致命错误
- github - GitHub GraphQL 查询未返回最后一次提交
- php - 我的设计应该如何处理 bulkupload csv
- c# - 在将对象保存到数据库之前或之后,我将如何将其排入队列?
- azure - 无法在 FormRecognizer Preview 中选择位置或定价层
- excel - 将两张表中的excel单元格链接在一起