add an optional argument to getAttributes so we can get a feature's attributes except for the geometry ones
This commit is contained in:
@@ -68,17 +68,23 @@ goog.inherits(ol.Feature, ol.Object);
|
||||
|
||||
/**
|
||||
* Gets a copy of the attributes of this feature.
|
||||
* @param {boolean=} opt_nonGeometry Don't include any geometry attributes
|
||||
* (by default geometry attributes are returned).
|
||||
* @return {Object.<string, *>} Attributes object.
|
||||
* @todo stability experimental
|
||||
*/
|
||||
ol.Feature.prototype.getAttributes = function() {
|
||||
ol.Feature.prototype.getAttributes = function(opt_nonGeometry) {
|
||||
var keys = this.getKeys(),
|
||||
len = keys.length,
|
||||
attributes = {},
|
||||
i, key;
|
||||
for (i = 0; i < len; ++ i) {
|
||||
key = keys[i];
|
||||
attributes[key] = this.get(key);
|
||||
var value = this.get(key);
|
||||
if (!goog.isDef(opt_nonGeometry) || opt_nonGeometry == false ||
|
||||
(opt_nonGeometry === true && !(value instanceof ol.geom.Geometry))) {
|
||||
attributes[key] = value;
|
||||
}
|
||||
}
|
||||
return attributes;
|
||||
};
|
||||
|
||||
@@ -351,11 +351,7 @@ ol.parser.GeoJSON.prototype.encodeFeatureCollection_ = function(collection) {
|
||||
*/
|
||||
ol.parser.GeoJSON.prototype.encodeFeature_ = function(feature) {
|
||||
var geometry = feature.getGeometry(),
|
||||
attributes = feature.getAttributes();
|
||||
var properties = goog.object.filter(attributes,
|
||||
function(element, index, array) {
|
||||
return !(element instanceof ol.geom.Geometry);
|
||||
});
|
||||
properties = feature.getAttributes(true);
|
||||
return /** @type {GeoJSONFeature} */({
|
||||
type: 'Feature',
|
||||
properties: properties,
|
||||
|
||||
@@ -422,11 +422,10 @@ ol.parser.ogc.GML = function(opt_options) {
|
||||
this.writeNode('_geometry', feature.getGeometry(), this.featureNS,
|
||||
node);
|
||||
}
|
||||
var attributes = feature.getAttributes();
|
||||
var attributes = feature.getAttributes(true);
|
||||
for (var name in attributes) {
|
||||
var value = attributes[name];
|
||||
if (goog.isDefAndNotNull(value) && !(value instanceof
|
||||
ol.geom.Geometry)) {
|
||||
if (goog.isDefAndNotNull(value)) {
|
||||
this.writeNode('_attribute', {name: name, value: value},
|
||||
this.featureNS, node);
|
||||
}
|
||||
|
||||
@@ -78,6 +78,23 @@ describe('ol.Feature', function() {
|
||||
expect(attributes.ten).to.be(10);
|
||||
});
|
||||
|
||||
it('returns an object with all attributes except geometry', function() {
|
||||
var point = new ol.geom.Point([15, 30]);
|
||||
var feature = new ol.Feature({
|
||||
foo: 'bar',
|
||||
ten: 10,
|
||||
loc: point
|
||||
});
|
||||
|
||||
var attributes = feature.getAttributes(true);
|
||||
|
||||
var keys = goog.object.getKeys(attributes);
|
||||
expect(keys.sort()).to.eql(['foo', 'ten']);
|
||||
|
||||
expect(attributes.foo).to.be('bar');
|
||||
expect(attributes.ten).to.be(10);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user