Вопрос чисто из любопытства. Создаём слой из файла, при этом указываем свойство {visibility:false}, подключаем его к карте и как следует из консоли firebug-а - видим, что он не загружается. Вроде бы все правильно. Но потом нам потребовалось включить видимость и отцентрировать карту по охвату слоя. Пишем:
Код: Выделить всё
layer.setVisibility(true);
map.zoomToExtent(layer.getDataExtent());
Однако в этом случае layer.getDataExtent() возвращает null. Таким образом первый вопрос - если мы включаем видимость слоя setVisibility(true), а затем пытаемся определить его охват и получаем null - означает ли это, что слой еще не загружен, то есть не выполнив до конца операцию layer.setVisibility(true), частью которой как я понимаю является загрузка слоя, программа переходит к следующей инструкции? Можно ли как-то принудительно загружать слой, при этом оставляя его невидимым, чтобы избежать подобных ситуаций?
Конечно можно использовать следующую конструкцию:
Код: Выделить всё
layer.events.register("loadend",layer,function(){map.zoomToExtent(layer.getDataExtent())})
Но это не всегда бывает удобно. Рассмотрим это на примере все той же задачи. Если при смене видимости слоя нам нужно центрировать карту на него, то выглядеть это будет как-то так:
Код: Выделить всё
layer.events.register("loadend",layer,function(){
layer.events.register("visibilitychanged",layer,function(){map.zoomToExtent(layer.getDataExtent())})})
Думается, что подобных конструкций можно избежать, если все-так на начальном этапе каким-то образом загружать слой с признаком visibility:false.
Spatial is now, more than ever, just another column- The Geometry Column.