2014-10-22 6 views
0

Можно ли скрыть все функции на слое при изменении масштаба? Я попытался установить как видимые, так и непрозрачные свойства самого слоя, которые теперь отображаются при масштабировании. Также я попытался установить стиль для каждой функции в «none», но, похоже, он не работает. Я попытался с этими двумя альтернативами:Скрыть слой или функции при масштабировании в открытых слоях 3?

1.

function hideGraphicsFeatures(hide) { 
    if(hide) { 
    graphicsLayer.setVisible(false); 
    } else { 
    graphicsLayer.setVisible(true); 
    } 
    map.render();  

}

2.

function hideGraphicsFeatures(hide) { 
    var features = graphicsLayer.getFeatures(); 
    if(hide) { 
    for (var i = features.length - 1; i >= 0; i--) { 
      features[i].style.display = 'none'; 
    }; 
    } else { 
    for (var i = features.length - 1; i >= 0; i--) { 
      features[i].style.display = ''; // show. Set to anything but 'none' 
    }; 
    } 
    map.render();  

}

ответ

1

Я считаю, что знаю, что вы ищете. Я должен был сделать что-то подобное, чтобы улучшить производительность масштабирования/панорамирования, когда на карте были отображены десятки тысяч функций на многих уровнях. Для панорамирования я устанавливаю видимость слоев на false, когда событие первой карты «pointerdrag» запускается и возвращает их в видимые в событии «moveend» (вам может потребоваться дополнительная обработка, чтобы избежать избыточных действий и перезагрузки данных).

Для увеличения его немного сложнее, но, к счастью, вы можете переопределить ol.interaction.MouseWheelZoom обработчик с помощью пользовательской функции:

ol.interaction.MouseWheelZoom.handleEvent = myFunction(evt){ 
    // here you set the layers to invisible and set the new map zoom level 
    // based on the event's wheel value... 
} 

После этого в обработчик события «» zoomend вы сделать слои видимыми. Если вы просто используете кнопки для увеличения/уменьшения масштаба, легко скрыть/показать слои. Это сработало для меня, и это хорошее решение в некоторых ситуациях.

-1

может быть, вы можете сделать это один. Но, извините, если это вам не поможет.

function showGraphic() { $('#Graphic1').hide(); $('#Graphic2').show(2000); $('#Graphic3').hide(); $('#Graphic4').hide(); }

+0

Это не работает, потому что я визуализирую свою графику (функции) в элементе canvas, где отображается карта. – Raskolnikoov

1

Try:

function zoomChanged() { 
    zoom = map.getZoom(); 
    if (zoom >=15) { 
     graphicsLayer.setVisibility(true); 
    } 
    else if (zoom < 15) { 
     graphicsLayer.setVisibility(false); 
    } 
} 

И затем вызвать эту функцию с помощью:

map.events.register("zoomend", map, zoomChanged); 

Где "карта" является переменной вашей инициализации карты. Комбинированные, они переключают видимость слоя вкл и выкл на основе уровня масштабирования. Если это не совсем то, что вы собираетесь делать, вы можете использовать другой индикатор в блоке if/else. Я думаю, что вам просто не хватает обработчика событий.

Смежные вопросы