Add scope and type checking to ol.reader.GeoJSON

This commit is contained in:
Tom Payne
2013-11-07 12:38:44 +01:00
parent 2704da9e4e
commit 82dc4baff6

View File

@@ -54,13 +54,16 @@ ol.reader.GeoJSON.readPolygonGeometry_ = function(geometry) {
/** /**
* @param {GeoJSONFeature} feature Feature. * @param {GeoJSONObject} object Object.
* @param {function(ol.Feature): *} callback Callback. * @param {function(this: S, ol.Feature): T} callback Callback.
* @param {S=} opt_obj Scope.
* @private * @private
* @return {*} Callback result. * @return {T} Callback result.
* @template S,T
*/ */
ol.reader.GeoJSON.readFeature_ = function(feature, callback) { ol.reader.GeoJSON.readFeature_ = function(object, callback, opt_obj) {
goog.asserts.assert(feature.type == 'Feature'); goog.asserts.assert(object.type == 'Feature');
var feature = /** @type {GeoJSONFeature} */ (object);
var geometryReader = var geometryReader =
ol.reader.GeoJSON.GEOMETRY_READERS_[feature.geometry.type]; ol.reader.GeoJSON.GEOMETRY_READERS_[feature.geometry.type];
goog.asserts.assert(goog.isDef(geometryReader)); goog.asserts.assert(goog.isDef(geometryReader));
@@ -69,23 +72,25 @@ ol.reader.GeoJSON.readFeature_ = function(feature, callback) {
if (goog.isDef(feature.properties)) { if (goog.isDef(feature.properties)) {
f.setValues(feature.properties); f.setValues(feature.properties);
} }
return callback(f); return callback.call(opt_obj, f);
}; };
/** /**
* @param {GeoJSONFeatureCollection} featureCollection Feature collection. * @param {GeoJSONObject} object Object.
* @param {function(ol.Feature): *} callback Callback. * @param {function(this: S, ol.Feature): T} callback Callback.
* @param {S=} opt_obj Scope.
* @private * @private
* @return {*} Callback result. * @return {T|undefined} Callback result.
* @template S,T
*/ */
ol.reader.GeoJSON.readFeatureCollection_ = ol.reader.GeoJSON.readFeatureCollection_ = function(object, callback, opt_obj) {
function(featureCollection, callback) { goog.asserts.assert(object.type == 'FeatureCollection');
goog.asserts.assert(featureCollection.type == 'FeatureCollection'); var featureCollection = /** @type {GeoJSONFeatureCollection} */ (object);
var features = featureCollection.features; var features = featureCollection.features;
var i, ii; var i, ii;
for (i = 0, ii = features.length; i < ii; ++i) { for (i = 0, ii = features.length; i < ii; ++i) {
var result = ol.reader.GeoJSON.readFeature_(features[i], callback); var result = ol.reader.GeoJSON.readFeature_(features[i], callback, opt_obj);
if (result) { if (result) {
return result; return result;
} }
@@ -96,22 +101,26 @@ ol.reader.GeoJSON.readFeatureCollection_ =
/** /**
* @param {GeoJSONObject} object Object. * @param {GeoJSONObject} object Object.
* @param {function(ol.Feature): *} callback Callback. * @param {function(this: S, ol.Feature): T} callback Callback.
* @return {*} Callback result. * @param {S=} opt_obj Scope.
* @return {T} Callback result.
* @template S,T
*/ */
ol.reader.GeoJSON.readObject = function(object, callback) { ol.reader.GeoJSON.readObject = function(object, callback, opt_obj) {
var objectReader = ol.reader.GeoJSON.OBJECT_READERS_[object.type]; var objectReader = ol.reader.GeoJSON.OBJECT_READERS_[object.type];
goog.asserts.assert(goog.isDef(objectReader)); goog.asserts.assert(goog.isDef(objectReader));
return objectReader(object, callback); return objectReader(object, callback, opt_obj);
}; };
/** /**
* @param {string} string String. * @param {string} string String.
* @param {function(ol.Feature): *} callback Callback. * @param {function(ol.Feature): T} callback Callback.
* @return {*} Callback result. * @param {S=} opt_obj Scope.
* @return {T} Callback result.
* @template S,T
*/ */
ol.reader.GeoJSON.readString = function(string, callback) { ol.reader.GeoJSON.readString = function(string, callback, opt_obj) {
var object = goog.json.parse(string); var object = goog.json.parse(string);
return ol.reader.GeoJSON.readObject( return ol.reader.GeoJSON.readObject(
/** @type {GeoJSONObject} */ (object), callback); /** @type {GeoJSONObject} */ (object), callback);
@@ -133,7 +142,7 @@ ol.reader.GeoJSON.GEOMETRY_READERS_ = {
/** /**
* @const * @const
* @private * @private
* @type {Object.<string, function(*, function(ol.Feature): *): *>} * @type {Object.<string, function(GeoJSONObject, function(ol.Feature): *, *): *>}
*/ */
ol.reader.GeoJSON.OBJECT_READERS_ = { ol.reader.GeoJSON.OBJECT_READERS_ = {
'Feature': ol.reader.GeoJSON.readFeature_, 'Feature': ol.reader.GeoJSON.readFeature_,