9

我有一个全球对象数据库(地图上的点),我想在传单地图上显示。不是一次加载所有数据库(只是太大)并在 Leaflet LayerGroup 上创建对象,有没有更有效的方法来查询数据,也许是在每个地图图块加载时,或者我正在寻找创建自定义解决方案为了这?

4

2 回答 2

13

您可以在 map 上观看 'moveend' 事件,在map.on('moveend',loadstuff)内部进行 ajax 调用loadstuff()以获取当前内部的标记map.getBounds(),然后添加/删除标记(我假设您对它们中的每一个都有某种全局标识符)它们是否在里面或在当前视图之外。

于 2013-04-10T07:19:36.297 回答
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);
于 2014-06-21T01:38:50.257 回答