dojox
Version:
Dojo eXtensions, a rollup of many useful sub-projects and varying states of maturity – from very stable and robust, to alpha and experimental. See individual projects contain README files for details.
176 lines (158 loc) • 4.25 kB
JavaScript
define([
"dojo/_base/declare",
"dojo/_base/lang",
"dojo/_base/array",
"dojo/_base/sniff",
"./Feature"
], function(declare, lang, array, sniff, Feature){
return declare("dojox.geo.openlayers.Layer", null, {
// summary:
// Base layer class for dojox.geo.openlayers.Map specific layers extending OpenLayers.Layer class.
// This layer class accepts Features which encapsulates graphic objects to be added to the map.
// This layer class encapsulates an OpenLayers.Layer.
// This class provides Feature management such as add, remove and feature access.
constructor: function(name, options){
// summary:
// Constructs a new Layer.
// name: String
// The name of the layer.
// options: Object
// Options passed to the underlying OpenLayers.Layer object.
var ol = options ? options.olLayer : null;
if(!ol){
ol = lang.delegate(new OpenLayers.Layer(name, options));
}
this.olLayer = ol;
this._features = null;
this.olLayer.events.register("moveend", this, lang.hitch(this, this.moveTo));
},
renderFeature: function(/* Feature */f){
// summary:
// Called when rendering a feature is necessary.
// f: Feature
// The feature to draw.
f.render();
},
getDojoMap: function(){
return this.dojoMap;
},
addFeature: function(f){
// summary:
// Add a feature or an array of features to the layer.
// f: Feature|Feature[]
// The Feature or array of features to add.
if(lang.isArray(f)){
array.forEach(f, function(item){
this.addFeature(item);
}, this);
return;
}
if(this._features == null){
this._features = [];
}
this._features.push(f);
f._setLayer(this);
},
removeFeature: function(f){
// summary:
// Removes a feature or an array of features from the layer.
// f: Feature|Feature[]
// The Feature or array of features to remove.
var ft = this._features;
if(ft == null){
return;
}
if(f instanceof Array){
f = f.slice(0);
array.forEach(f, function(item){
this.removeFeature(item);
}, this);
return;
}
var i = array.indexOf(ft, f);
if(i != -1){
ft.splice(i, 1);
}
f._setLayer(null);
f.remove();
},
removeFeatureAt: function(index){
// summary:
// Remove the feature at the specified index.
// index: int
// The index of the feature to remove.
var ft = this._features;
var f = ft[index];
if(!f){
return;
}
ft.splice(index, 1);
f._setLayer(null);
f.remove();
},
getFeatures: function(){
// summary:
// Returns the feature hold by this layer.
// returns:
// The untouched array of features hold by this layer.
return this._features; // Feature[]
},
getFeatureAt: function(i){
// summary:
// Returns the i-th feature of this layer.
// i: Number
// The index of the feature to return.
// returns:
// The i-th feature of this layer.
if(this._features == null){
return undefined;
}
return this._features[i]; // Feature
},
getFeatureCount: function(){
// summary:
// Returns the number of the features contained by this layer.
// returns:
// The number of the features contained by this layer.
if(this._features == null){
return 0;
}
return this._features.length; // Number
},
clear: function(){
// summary:
// Removes all the features from this layer.
var fa = this.getFeatures();
this.removeFeature(fa);
},
moveTo: function(event){
// summary:
// Called when the layer is panned or zoomed.
// event: MouseEvent
// The event
if(event.zoomChanged){
if(this._features == null){
return;
}
array.forEach(this._features, function(f){
this.renderFeature(f);
}, this);
}
},
redraw: function(){
// summary:
// Redraws this layer
if(sniff.isIE){
setTimeout(lang.hitch(this, function(){
this.olLayer.redraw();
}, 0));
}else{
this.olLayer.redraw();
}
},
added: function(){
// summary:
// Called when the layer is added to the map
}
});
});