Ограничить панорамирование путями в Leaflet

Я хочу ограничить панорамирование в листовке путями, желательно более одного. Идея состоит в том, что можно перемещаться только по дорогам или по заранее рассчитанной траектории, но не по всей карте.

http://leafletjs.com/reference.html

maxBounds, кажется, ограничивается только прямоугольной областью. Динамический сброс прямоугольника, чтобы держать пользователей ближе к пути, кажется вероятным, но не очень привлекательным.

1 ответ

Способ сделать это действительно с помощью maxBounds вариант или setMaxBounds метод вашего L.Map пример. Например, если вы хотите ограничить границы карты полилинией, вам понадобятся границы этой полилинии. Вам не нужно рассчитывать это самостоятельно, вы можете использовать getBounds метод L.Polyline класс, который возвращает L.LatLngBounds объект. Этот объект может быть использован с setMaxBounds метод L.Map:

var map = new L.Map('leaflet', {...});

var polyline = new L.Polyline([
    [52.366667, 4.9],
    [51.507222, -0.1275]
]).addTo(map);

// Get bounds
var bounds = polyline.getBounds();

// Set view to bounds
map.fitBounds(bounds);

// Restrict view to bounds
map.setMaxBounds(bounds);

Пример на Плункер: http://plnkr.co/edit/jFw7mB?p=preview

getBounds Метод существует на всех классах, расширенных от L.Path лайк L.MultiPolyline, L.Polygon, L.MultiPolygon, L.Rectangle, L.Circle а также L.CircleMarker,

Он также существует на слоях L.FeatureGroup а также L.GeoJSON что очень удобно, если вам нужно установить границы для нескольких объектов на вашей карте. Вы содержите их в L.FeatureGroup а затем позвоните getBounds метод на L.FeatureGroup пример:

// Empty featuregroup
var featureGroup = new L.FeatureGroup().addTo(map);

// Add some features to featuregroup
var polyline1 = new L.Polyline([
    [52.366667, 4.9],
    [51.507222, -0.1275]
]).addTo(featureGroup);

var polyline2 = new L.Polyline([
    [52.366667, 4.9],
    [48.8567, 2.3508]
]).addTo(featureGroup);

var polyline3 = new L.Polyline([
    [52.366667, 4.9],
    [52.516667, 13.383333]
]).addTo(featureGroup);

// Get bounds of featuregroup
var bounds = featureGroup.getBounds();

// Set view to bounds
map.fitBounds(bounds);

// Restrict view to bounds
map.setMaxBounds(bounds);

Пример на Плункер: http://plnkr.co/edit/yoax8c?p=preview

Ссылка:

Другие вопросы по тегам