您不一定需要Leaflet插件。您可以简单地使用distanceTo方法,并按距user_marker的距离对标记进行排序。然后你调用fitBounds方法。我创建了一个working example here。
下面是代码的关键步骤:
var testData = [{lat:37.7859,lon:-122.1362},{lat:37.6921,lon:-122.0312},{lat:37.823,lon:-122.6112},{lat:37.7478,lon:-122.1562},{lat:37.6759,lon:-122.0458},{lat:37.555,lon:-122.050}];
var marker_layer = new L.layerGroup();
var user_marker = L.marker(L.latLng(37.7829, -122.1312)).addTo(map);
//k closest markers
var k = 3;
var dist_markers = [];
$.each(testData, function(index, p) {
var latlng = L.latLng(p.lat, p.lon)
var marker = L.marker(latlng);
marker.addTo(marker_layer);
dist = L.latLng(37.7829, -122.1312).distanceTo(latlng);
dist_markers.push([dist,marker]);
});
dist_markers.sort(Comparator);
var close_markers = dist_markers.slice(0,k)
close_markers = close_markers.map(function(d) {return d[1];});
var group = new L.featureGroup(close_markers);
marker_layer.addTo(map);
user_marker.addTo(map);
map.on('click', function() {
map.fitBounds(group.getBounds());
});
这看起来很像解决方案,我会去的:)我eventuelly去用'leaflet.GeometryUtil'的解决方案,与一些hackish的解决办法;) –