Ограничить видимую часть плитки областью полигона в Leaflet?

Как в Leaflet ограничить видимую часть тайла областью, содержащейся в полигоне (или геоджсоне), то есть пересечением между полигоном и тайлом под ним.

Пример использования: отображать только одну страну и скрывать все остальные.

РЕДАКТИРОВАТЬ: я не ищу метод fitBounds/setMaxBounds, а способ отображения только внутренней области многоугольника.


person VH-NZZ    schedule 30.01.2014    source источник


Ответы (2)


Вы можете использовать метод map.setMaxBounds(L.latLngBounds), чтобы ограничить представление.

Для ограничения просмотра карты:

map.fitBounds(polygon.getBounds()); // max zoom to see whole polygon
map.setMaxBounds(polygon.getBounds()); // restrict map view to polygon bounds
map.options.minZoom = map.getZoom(); // restrict user to zoom out 

Когда вы хотите вернуть это:

delete map.options.maxBounds;  // remove the maxBounds object from the map options
map.options.minZoom = 0; // set min-zoom to 0 = no restriciton

Я настроил jsfiddle, где вы можете увидеть поведение: jsfiddle

ИЗМЕНИТЬ:

Я обновил jsfiddle, чтобы использовать мультиполигон и скрыть весь мир, кроме этого треугольника. Единственная проблема в том, что во время масштабирования вы все равно можете видеть другие части карты. jsfiddle2

person Community    schedule 30.01.2014
comment
Спасибо, но я не об этом спрашиваю. Я хотел бы ограничить плитку вашим синим треугольником, т. Е. Единственная видимая часть карты — это треугольник, а остальная часть обрезана. Очень похоже на пересечение полигона и карты. - person VH-NZZ; 30.01.2014
comment
okiharaherbst, взгляните на мою правку, это то, что вы хотите? - person ; 31.01.2014
comment
это подойдет для моего случая, очень обязан! Я полагаю, что можно ограничить масштабирование, чтобы не видеть другие части мира. - person VH-NZZ; 31.01.2014
comment
Кстати, я наткнулся на github.com/aparshin/leaflet-boundary-canvas, который Плагин Leaflet, который делает именно это. - person VH-NZZ; 31.01.2014
comment
этот плагин выглядит многообещающе, не стесняйтесь писать это как ответ - person ; 31.01.2014
comment
Спасибо, но ваше мультиполигональное решение не требует никаких других зависимостей. Это будет соответствовать счету на данный момент. - person VH-NZZ; 31.01.2014

Поздний ответ, но для тех, кто ищет, слой Leaflet Boundary Canvas может делать то, что вам нужно. . Вы можете передать ему многоугольник или мультиполигон, и он затенит все остальные области карты.

person Matt Hampel    schedule 02.06.2017