From 011285aefeb6c7520db279ec2cffd587f60d4abb Mon Sep 17 00:00:00 2001 From: Alexandre Silva Date: Mon, 16 Oct 2017 14:51:55 +0100 Subject: [PATCH] Added option to the ol.format.GeoJSON to allow the reading of the geometry_name from the geojson. --- externs/geojson.js | 5 +++++ externs/olx.js | 12 ++++++++++++ src/ol/format/geojson.js | 9 +++++++++ 3 files changed, 26 insertions(+) diff --git a/externs/geojson.js b/externs/geojson.js index 4dbe44a8d3..108fbe494c 100644 --- a/externs/geojson.js +++ b/externs/geojson.js @@ -140,6 +140,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 22e1921606..318af1996f 100644 --- a/externs/olx.js +++ b/externs/olx.js @@ -1994,6 +1994,7 @@ olx.format.WriteOptions.prototype.decimals; /** * @typedef {{defaultDataProjection: ol.ProjectionLike, * geometryName: (string|undefined), + * readGeometryNameFromGeoJSON: (boolean|undefined), * featureProjection: ol.ProjectionLike}} */ olx.format.GeoJSONOptions; @@ -2024,6 +2025,17 @@ 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. + * @type {boolean|undefined} + * @api + */ +olx.format.GeoJSONOptions.prototype.readGeometryNameFromGeoJSON; + + /** * @typedef {{geometryName: (string|undefined)}} */ diff --git a/src/ol/format/geojson.js b/src/ol/format/geojson.js index f3f18e386c..ad053e1de8 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.readGeometryNameFromGeoJSON_ = options.readGeometryNameFromGeoJSON; + }; 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.readGeometryNameFromGeoJSON_ && geoJSONFeature.geometry_name !== undefined) { + feature.setGeometryName(geoJSONFeature.geometry_name); } feature.setGeometry(geometry); if (geoJSONFeature.id !== undefined) {