diff --git a/externs/geojson.js b/externs/geojson.js index 57ecc5b082..1dbd178395 100644 --- a/externs/geojson.js +++ b/externs/geojson.js @@ -118,6 +118,11 @@ GeoJSONFeature.prototype.id; GeoJSONFeature.prototype.properties; +/** + * @type {string|undefined} + */ +GeoJSONFeature.prototype.geometry_name; + /** * @constructor diff --git a/externs/olx.js b/externs/olx.js index d3a9987d27..cf29fa0d01 100644 --- a/externs/olx.js +++ b/externs/olx.js @@ -2002,6 +2002,7 @@ olx.format.WriteOptions.prototype.decimals; /** * @typedef {{defaultDataProjection: ol.ProjectionLike, * geometryName: (string|undefined), + * extractGeometryName: (boolean|undefined), * featureProjection: ol.ProjectionLike}} */ olx.format.GeoJSONOptions; @@ -2032,6 +2033,18 @@ olx.format.GeoJSONOptions.prototype.featureProjection; olx.format.GeoJSONOptions.prototype.geometryName; +/** + * Certain GeoJSON providers include the geometry_name field in the feature + * geoJSON. If set to `true` the geoJSON reader will look for that field to + * set the geometry name. If both this field is set to `true` and a + * `geometryName` is provided, the `geometryName` will take precedence. + * Default is `false`. + * @type {boolean|undefined} + * @api + */ +olx.format.GeoJSONOptions.prototype.extractGeometryName; + + /** * @typedef {{geometryName: (string|undefined)}} */ diff --git a/src/ol/format/geojson.js b/src/ol/format/geojson.js index 5aa20b86de..8efd112b29 100644 --- a/src/ol/format/geojson.js +++ b/src/ol/format/geojson.js @@ -53,6 +53,13 @@ ol.format.GeoJSON = function(opt_options) { */ this.geometryName_ = options.geometryName; + /** + * Look for the geometry name in the feature GeoJSON + * @type {boolean|undefined} + * @private + */ + this.extractGeometryName_ = options.extractGeometryName; + }; ol.inherits(ol.format.GeoJSON, ol.format.JSONFeature); @@ -377,6 +384,8 @@ ol.format.GeoJSON.prototype.readFeatureFromObject = function( var feature = new ol.Feature(); if (this.geometryName_) { feature.setGeometryName(this.geometryName_); + } else if (this.extractGeometryName_ && geoJSONFeature.geometry_name !== undefined) { + feature.setGeometryName(geoJSONFeature.geometry_name); } feature.setGeometry(geometry); if (geoJSONFeature.id !== undefined) {