diff --git a/src/ol/format/EsriJSON.js b/src/ol/format/EsriJSON.js index f36d1243aa..37d4dcee8e 100644 --- a/src/ol/format/EsriJSON.js +++ b/src/ol/format/EsriJSON.js @@ -104,10 +104,11 @@ class EsriJSON extends JSONFeature { /** * @param {Object} object Object. * @param {import("./Feature.js").ReadOptions=} opt_options Read options. + * @param {string=} opt_idField Name of the field where to get the id from. * @protected * @return {import("../Feature.js").default} Feature. */ - readFeatureFromObject(object, opt_options) { + readFeatureFromObject(object, opt_options, opt_idField) { const esriJSONFeature = /** @type {EsriJSONFeature} */ (object); const geometry = readGeometry(esriJSONFeature.geometry, opt_options); const feature = new Feature(); @@ -115,12 +116,12 @@ class EsriJSON extends JSONFeature { feature.setGeometryName(this.geometryName_); } feature.setGeometry(geometry); - if (opt_options && opt_options.idField && - esriJSONFeature.attributes[opt_options.idField]) { - feature.setId(/** @type {number} */(esriJSONFeature.attributes[opt_options.idField])); - } if (esriJSONFeature.attributes) { feature.setProperties(esriJSONFeature.attributes, true); + const id = esriJSONFeature.attributes[opt_idField]; + if (id !== undefined) { + feature.setId(/** @type {number} */(id)); + } } return feature; } @@ -138,9 +139,8 @@ class EsriJSON extends JSONFeature { /** @type {Array} */ const features = []; const esriJSONFeatures = esriJSONFeatureSet.features; - options.idField = object.objectIdFieldName; for (let i = 0, ii = esriJSONFeatures.length; i < ii; ++i) { - features.push(this.readFeatureFromObject(esriJSONFeatures[i], options)); + features.push(this.readFeatureFromObject(esriJSONFeatures[i], options, object.objectIdFieldName)); } return features; } else { diff --git a/test/spec/ol/format/esrijson.test.js b/test/spec/ol/format/esrijson.test.js index 7513708d6d..c6490b3ba9 100644 --- a/test/spec/ol/format/esrijson.test.js +++ b/test/spec/ol/format/esrijson.test.js @@ -97,6 +97,7 @@ describe('ol.format.EsriJSON', function() { }; const featureCollectionEsriJSON = { + objectIdFieldName: 'prop0', features: [pointEsriJSON, lineStringEsriJSON, polygonEsriJSON] }; @@ -230,6 +231,10 @@ describe('ol.format.EsriJSON', function() { expect(features[0].getGeometry()).to.be.an(Point); expect(features[1].getGeometry()).to.be.an(LineString); expect(features[2].getGeometry()).to.be.an(Polygon); + + expect(features[0].getId()).to.eql('value0'); + expect(features[1].getId()).to.eql('value0'); + expect(features[2].getId()).to.eql('value0'); }); it('can read and transform a point', function() {