Код: Выделить всё
OpenLayers.Control.DrawFeature
Parameters
layer {OpenLayers.Layer.Vector}
handler {OpenLayers.Handler}
options {Object}
Рассмотрим второй подход. Важно заметить, что при создании рассматриваемого контрола обязательным параметром является объект класса OpenLayers.Handler, именно он отвечает за то, какого типа геометрия будет рисоваться данным контролом. Поскольку в OpenLayers нет функции определения типа геометрий слоя, то как будет показано дальше - удобным оказывается самостоятельное указание типа геометрии слоя при его создании. Сразу же предостерегаю от использования свойства geometryType слоя для хранения такой информации. Допустим, вы указали значение этого поля - OpenLayers.Geometry.Polygon, тем самым ограничив допустимые типы геометрий. В этом случае, например, если вдруг понадобится воспользоваться контролом OpenLayers.Control.ModifyFeature в режиме DRAG - то вы не сможете этого сделать. Этот режим подразумевает создание некоего временного вертекса (точки) в активном слое за который можно двигать объект, но поскольку тип допустимых геометрий ограничен только полигонами - это привдёт к ошибке. Поэтому для передачи инфомации о типе геометрии слоя удобней оказывается использовать свойство metadata слоя. Например:
Код: Выделить всё
metadata: {gType: 'Polygon'}
Код: Выделить всё
metadata: {gType: 'Point'}
Код: Выделить всё
map.getLayersByClass('OpenLayers.Layer.Vector').forEach(function(layer) {
if (layer.metadata.gType == 'Point') {
map.addControl(new OpenLayers.Control.DrawFeature(layer, OpenLayers.Handler.Point))
}
else if (layer.metadata.gType == 'Polygon') {
map.addControl(new OpenLayers.Control.DrawFeature(layer, OpenLayers.Handler.Polygon))
}
})
Код: Выделить всё
map.getControlsByClass('OpenLayers.Control.DrawFeature').forEach(function(control) {
if (control.layer == selectedLayer) {
control.activate();
}
else {
control.deactivate();
}
})