我有一个全局的对象数据库(地图上的点),我想在Leaflet地图上显示。不是一次加载所有数据库(只是太大)而是在Leaflet LayerGroup上创建对象,是否有更有效的方法来查询数据,可能是在每个地图图块加载时,或者我正在考虑创建自定义解决方案对此?
答案 0 :(得分:13)
您可以使用map.on('moveend',loadstuff)
在地图上观看'moveend'事件,在loadstuff()
内进行ajax调用以获取当前map.getBounds()
内的标记,然后添加/删除标记(I假设你有一些全局标识符,无论它们是在当前视图的内部还是外部。
答案 1 :(得分:3)
有一种标准而有效的方法可以解决snkashis所说的问题。创建平铺的geoJSON服务,并使用leaflet-tilelayer-geojson插件。
然后,您需要浏览器端的所有代码(来自Github页面):
var geojsonURL = 'http://polymaps.appspot.com/state/{z}/{x}/{y}.json';
var geojsonTileLayer = new L.TileLayer.GeoJSON(geojsonURL, {
clipTiles: true,
unique: function (feature) {
return feature.id;
}
}, {
style: style,
onEachFeature: function (feature, layer) {
if (feature.properties) {
var popupString = '<div class="popup">';
for (var k in feature.properties) {
var v = feature.properties[k];
popupString += k + ': ' + v + '<br />';
}
popupString += '</div>';
layer.bindPopup(popupString);
}
if (!(layer instanceof L.Point)) {
layer.on('mouseover', function () {
layer.setStyle(hoverStyle);
});
layer.on('mouseout', function () {
layer.setStyle(style);
});
}
}
}
);
map.addLayer(geojsonTileLayer);