diff --git a/src/objectliterals.jsdoc b/src/objectliterals.jsdoc index 70ef57ea1e..a670c3e478 100644 --- a/src/objectliterals.jsdoc +++ b/src/objectliterals.jsdoc @@ -516,9 +516,10 @@ * @property {string|undefined} logo Logo. * @property {ol.parser.Parser} parser Parser instance to parse data * provided as `data` or fetched from `url`. - * @property {ol.ProjectionLike|undefined} projection Projection. EPSG:4326 - * is assumed if not defined. TODO: Get projection from the parser instead - * of assuming EPSG:4326. + * @property {ol.ProjectionLike|undefined} projection Projection. Usually the + * projection is provided by the parser, so this only needs to be set if + * the parser does not know the SRS (e.g. in some GML flavors), or if the + * projection determined by the parser needs to be overridden. * @property {string|undefined} url Server url providing the vector data. */ diff --git a/src/ol/layer/vectorlayer.js b/src/ol/layer/vectorlayer.js index f0746f61d7..6655842bb0 100644 --- a/src/ol/layer/vectorlayer.js +++ b/src/ol/layer/vectorlayer.js @@ -423,8 +423,6 @@ ol.layer.Vector.prototype.groupFeaturesBySymbolizerLiteral = * one projection. */ ol.layer.Vector.prototype.parseFeatures = function(data, parser, projection) { - var features; - var lookup = {}; lookup[ol.geom.GeometryType.POINT] = this.pointVertices_; lookup[ol.geom.GeometryType.LINESTRING] = this.lineVertices_; @@ -437,10 +435,11 @@ ol.layer.Vector.prototype.parseFeatures = function(data, parser, projection) { return lookup[type]; }; - var addFeatures = function(features, metadata) { + var addFeatures = function(data) { + var features = data.features; var sourceProjection = this.getSource().getProjection(); if (goog.isNull(sourceProjection)) { - sourceProjection = metadata.projection; + sourceProjection = data.metadata.projection; } var transform = ol.proj.getTransform(sourceProjection, projection); @@ -472,7 +471,7 @@ ol.layer.Vector.prototype.parseFeatures = function(data, parser, projection) { goog.isFunction(parser.readFeaturesWithMetadataFromString), 'Expected parser with a readFeaturesWithMetadataFromString method.'); result = parser.readFeaturesWithMetadataFromString(data, options); - addFeatures.call(this, result.features, result.metadata); + addFeatures.call(this, result); } } else if (goog.isObject(data)) { if (goog.isFunction(parser.readFeaturesFromObjectAsync)) { @@ -483,7 +482,7 @@ ol.layer.Vector.prototype.parseFeatures = function(data, parser, projection) { goog.isFunction(parser.readFeaturesWithMetadataFromObject), 'Expected parser with a readFeaturesWithMetadataFromObject method.'); result = parser.readFeaturesWithMetadataFromObject(data, options); - addFeatures.call(this, result.features, result.metadata); + addFeatures.call(this, result); } } else { // TODO: parse more data types diff --git a/src/ol/parser/featureparser.js b/src/ol/parser/featureparser.js index ff27ede189..f8c8d09a8f 100644 --- a/src/ol/parser/featureparser.js +++ b/src/ol/parser/featureparser.js @@ -8,19 +8,6 @@ goog.provide('ol.parser.StringFeatureParser'); goog.require('ol.Feature'); -/** - * @typedef {{projection: ol.Projection}} - */ -ol.parser.ReadFeaturesMetadata; - - -/** - * @typedef {{features: Array., - * metadata: ol.parser.ReadFeaturesMetadata}} - */ -ol.parser.ReadFeaturesResult; - - /** * @interface @@ -78,9 +65,8 @@ ol.parser.AsyncStringFeatureParser = function() {}; /** * @param {string} data String data. - * @param {function(Array., ol.parser.ReadFeaturesMetadata)} - * callback Callback which is called - * after parsing. + * @param {function(ol.parser.ReadFeaturesResult)} callback Callback which is + * called after parsing. * @param {ol.parser.ReadFeaturesOptions=} opt_options Feature reading options. */ ol.parser.AsyncStringFeatureParser.prototype.readFeaturesFromStringAsync = @@ -96,9 +82,8 @@ ol.parser.AsyncObjectFeatureParser = function() {}; /** * @param {Object} obj Object representing features. - * @param {function(Array., ol.parser.ReadFeaturesMetadata)} - * callback Callback which is called - * after parsing. + * @param {function(ol.parser.ReadFeaturesResult)} callback Callback which is + * called after parsing. * @param {ol.parser.ReadFeaturesOptions=} opt_options Feature reading options. */ ol.parser.AsyncObjectFeatureParser.prototype.readFeaturesFromObjectAsync = @@ -111,7 +96,20 @@ ol.parser.AsyncObjectFeatureParser.prototype.readFeaturesFromObjectAsync = ol.parser.ReadFeaturesCallback; +/** + * @typedef {{projection: ol.ProjectionLike}} + */ +ol.parser.ReadFeaturesMetadata; + + /** * @typedef {{callback: ol.parser.ReadFeaturesCallback}} */ ol.parser.ReadFeaturesOptions; + + +/** + * @typedef {{features: Array., + * metadata: ol.parser.ReadFeaturesMetadata}} + */ +ol.parser.ReadFeaturesResult; diff --git a/src/ol/parser/geojson.js b/src/ol/parser/geojson.js index 32b3857be6..e1e3b26fd6 100644 --- a/src/ol/parser/geojson.js +++ b/src/ol/parser/geojson.js @@ -16,7 +16,6 @@ goog.require('ol.geom.SharedVertices'); goog.require('ol.parser.Parser'); goog.require('ol.parser.ReadFeaturesOptions'); goog.require('ol.parser.StringFeatureParser'); -goog.require('ol.proj'); @@ -65,7 +64,7 @@ ol.parser.GeoJSON.prototype.readFeaturesWithMetadataFromString = function(str, opt_options) { var json = /** @type {GeoJSONFeatureCollection} */ (JSON.parse(str)); return {features: this.parseFeatureCollection_(json, opt_options), - metadata: {projection: ol.proj.get('EPSG:4326')}}; + metadata: {projection: 'EPSG:4326'}}; }; @@ -79,7 +78,7 @@ ol.parser.GeoJSON.prototype.readFeaturesWithMetadataFromString = ol.parser.GeoJSON.prototype.readFeaturesWithMetadataFromObject = function(object, opt_options) { return {features: this.parseFeatureCollection_(object, opt_options), - metadata: {projection: ol.proj.get('EPSG:4326')}}; + metadata: {projection: 'EPSG:4326'}}; }; diff --git a/src/ol/parser/gpx.js b/src/ol/parser/gpx.js index 295c62d8e0..4f4ff946e7 100644 --- a/src/ol/parser/gpx.js +++ b/src/ol/parser/gpx.js @@ -12,7 +12,6 @@ goog.require('ol.parser.ObjectFeatureParser'); goog.require('ol.parser.ReadFeaturesOptions'); goog.require('ol.parser.StringFeatureParser'); goog.require('ol.parser.XML'); -goog.require('ol.proj'); @@ -47,7 +46,6 @@ ol.parser.GPX = function(opt_options) { 'gpx': function(node, obj) { if (!goog.isDef(obj.features)) { obj.features = []; - obj.metadata = {projection: ol.proj.get('EPSG:4326')}; } this.readChildNodes(node, obj); }, @@ -245,7 +243,8 @@ ol.parser.GPX.prototype.read = function(data) { if (data && data.nodeType == 9) { data = data.documentElement; } - var obj = {features: [], metadata: {projection: ol.proj.get('EPSG:4326')}}; + var obj = /** @type {ol.parser.ReadFeaturesResult} */ + ({metadata: {projection: 'EPSG:4326'}}); this.readNode(data, obj); return obj; }; diff --git a/src/ol/parser/kml.js b/src/ol/parser/kml.js index 021118d640..b3080ac44d 100644 --- a/src/ol/parser/kml.js +++ b/src/ol/parser/kml.js @@ -27,7 +27,6 @@ goog.require('ol.parser.DomFeatureParser'); goog.require('ol.parser.ReadFeaturesOptions'); goog.require('ol.parser.StringFeatureParser'); goog.require('ol.parser.XML'); -goog.require('ol.proj'); goog.require('ol.style.Icon'); goog.require('ol.style.Line'); goog.require('ol.style.LineLiteral'); @@ -66,7 +65,6 @@ ol.parser.KML = function(opt_options) { 'kml': function(node, obj) { if (!goog.isDef(obj.features)) { obj.features = []; - obj.metadata = {projection: ol.proj.get('EPSG:4326')}; } if (!goog.isDef(obj.links)) { obj.links = []; @@ -823,9 +821,8 @@ goog.inherits(ol.parser.KML, ol.parser.XML); /** * @param {Object} obj Object representing features. - * @param {function(Array., ol.parser.ReadFeaturesMetadata)} - * callback Callback which is called - * after parsing. + * @param {function(ol.parser.ReadFeaturesResult)} callback Callback which is + * called after parsing. * @param {ol.parser.ReadFeaturesOptions=} opt_options Feature reading options. */ ol.parser.KML.prototype.readFeaturesFromObjectAsync = @@ -836,16 +833,15 @@ ol.parser.KML.prototype.readFeaturesFromObjectAsync = /** - * @param {string} data String data. - * @param {function(Array., ol.parser.ReadFeaturesMetadata)} - * callback Callback which is called - * after parsing. + * @param {string} str String data. + * @param {function(ol.parser.ReadFeaturesResult)} + * callback Callback which is called after parsing. * @param {ol.parser.ReadFeaturesOptions=} opt_options Feature reading options. */ ol.parser.KML.prototype.readFeaturesFromStringAsync = - function(data, callback, opt_options) { + function(str, callback, opt_options) { this.readFeaturesOptions_ = opt_options; - this.read(data, callback); + this.read(str, callback); }; @@ -858,7 +854,7 @@ ol.parser.KML.prototype.readFeaturesFromStringAsync = ol.parser.KML.prototype.readFeaturesWithMetadataFromString = function(str, opt_options) { this.readFeaturesOptions_ = opt_options; - return this.read(str); + return /** @type {ol.parser.ReadFeaturesResult} */ (this.read(str)); }; @@ -871,7 +867,7 @@ ol.parser.KML.prototype.readFeaturesWithMetadataFromString = ol.parser.KML.prototype.readFeaturesWithMetadataFromNode = function(node, opt_options) { this.readFeaturesOptions_ = opt_options; - return this.read(node); + return /** @type {ol.parser.ReadFeaturesResult} */ (this.read(node)); }; @@ -883,7 +879,7 @@ ol.parser.KML.prototype.readFeaturesWithMetadataFromNode = ol.parser.KML.prototype.readFeaturesWithMetadataFromObject = function(obj, opt_options) { this.readFeaturesOptions_ = opt_options; - return this.read(obj); + return /** @type {ol.parser.ReadFeaturesResult} */ (this.read(obj)); }; @@ -934,10 +930,11 @@ ol.parser.KML.prototype.parseLinks = function(deferreds, obj, done) { /** * @param {string|Document|Element|Object} data Data to read. - * @param {Function=} opt_callback Optional callback to call when reading - * is done. - * @return {ol.parser.ReadFeaturesResult} An object representing the - * document. + * @param {function(ol.parser.ReadFeaturesResult)=} opt_callback Optional + * callback to call when reading is done. If provided, this method will + * return undefined. + * @return {ol.parser.ReadFeaturesResult|undefined} An object representing the + * document if `opt_callback` was not provided. */ ol.parser.KML.prototype.read = function(data, opt_callback) { if (goog.isString(data)) { @@ -946,7 +943,8 @@ ol.parser.KML.prototype.read = function(data, opt_callback) { if (data && data.nodeType == 9) { data = data.documentElement; } - var obj = {features: [], metadata: {projection: ol.proj.get('EPSG:4326')}}; + var obj = /** @type {ol.parser.ReadFeaturesResult} */ + ({metadata: {projection: 'EPSG:4326'}}); this.readNode(data, obj); if (goog.isDef(opt_callback)) { var deferreds = []; @@ -966,9 +964,8 @@ ol.parser.KML.prototype.read = function(data, opt_callback) { }, this); }); } else { - return /* ol.parser.ReadFeaturesResult */(obj); + return obj; } - return {features: null, metadata: {projection: ol.proj.get('EPSG:4326')}}; };