2015-12-14 2 views
0

Есть ли способ предотвратить сборку плиток за пределами полигона? Ближайший пример этого я нашел здесьПредотвращение плит за пределами многоугольника от загрузки

http://jsfiddle.net/LsvDk/23/

var polygon = L.multiPolygon(
[ 
[ 
    [ 
    [51.509, -0.08], 
    [51.503, -0.08], 
    [51.503, -0.047], 
    [51.51, -0.047], 
    ], 
    [ 
    [84.774798, -176.835937], 
    [-85.221998, -175.078125], 
    [-85.103422, 176.484375], 
    [84.3916, 178.242188] 
    ] 
] 
], { 
    color: '#DBDBDB', 
weight: 1, 
opacity: 1, 
fillOpacity: 1 
}).addTo(map); 

Он делает то, что я хочу, за исключением того, что выглядит паршиво, когда панорамирование или масштабирование, потому что он загружает плитки за пределы полигона.

+0

Хотите ли вы, чтобы они не загрузились * или нет * дисплей *? Кроме того, что именно не так с JSFiddle, он выглядит солидным для меня? –

+0

@SteveBennett Я бы хотел, чтобы они не отображались. В этом примере вы можете видеть, когда панорамирование или масштабирование вблизи края этого многоугольника отображает другие фрагменты. Я пытался найти способ, чтобы он не показывал плитки вне полигона вообще. – BFlint

ответ

1

Если мое понимание верное, вам не нравится приведенный вами пример, потому что он использует векторную форму (многоугольник), чтобы скрыть плитки, но Листовка должна повторно отобразить фигуру при панорамировании/масштабировании, что делает фон Временно появляются плитки?


EDIT:

Пожалуйста, попробуйте с TileLayer.BoundaryCanvas plugin. Вместо того, чтобы использовать векторную форму в качестве маски, он объединяет плитку и ее маску в холст. Следовательно, маска становится растровым изображением, которое позволяет избежать литографического поведения повторной рендеринга векторной формы при каждом панорамировании/масштабировании, но вместо этого сохраняет предыдущие фрагменты (в сочетании с маской в ​​этом случае) до тех пор, пока не будут получены новые.

Позволяет нарисовать слои плитки с произвольной полигональной границей. Для рендеринга используется холст HTML5.

Маска определяется как форма GeoJSON, поэтому ее необходимо настроить так же легко, как в вашем примере.


Оставшееся оригинальный ответ:

Вы, вероятно, будет заинтересован в bounds option of Tile Layer, чтобы предотвратить любое отображение плитки за пределами указанной области.

Когда этот параметр установлен, TileLayer загружает только те плиты, которые находятся в заданных географических границах.

Однако, если ваша видимая область не идеально подходит для границ плиток, вам все равно придется использовать маску для покрытия некоторых областей, и вы все равно можете получить ту же проблему с повторной визуализацией векторных фигур.

+0

Да, я считаю, вы понимаете, о чем я прошу. Я не знал, что он показывает их, потому что он снова возвращает многоугольник. Оценки помогут мне, но не будут идеальными, потому что плитки не будут идеально прямоугольными и будут хорошо вписываться в границы. – BFlint

+0

Хотя ... Возможно ли, что во время панорамирования/масштабирования я могу сначала отобразить фигуру, а затем загрузить плитки? Я думаю, что это может помочь. – BFlint

+0

Не знаете, как легко было бы запросить формы предварительного рендеринга. Но более сложным решением будет использование специального плагина. Я отредактирую вышеупомянутый ответ. – ghybs