From 5b707d4275911714f85fa22f8e879f0f4f64ad6a Mon Sep 17 00:00:00 2001 From: Tim Schaub Date: Fri, 28 Jun 2013 17:24:53 -0600 Subject: [PATCH] Shared structure for crs transforms --- src/ol/parser/topojson.js | 63 +++++++++++++++++++++++++++++++-------- 1 file changed, 50 insertions(+), 13 deletions(-) diff --git a/src/ol/parser/topojson.js b/src/ol/parser/topojson.js index e1b4b2df43..baedc9cdfe 100644 --- a/src/ol/parser/topojson.js +++ b/src/ol/parser/topojson.js @@ -1,6 +1,7 @@ goog.provide('ol.parser.TopoJSON'); goog.require('ol.Feature'); +goog.require('ol.geom.GeometryType'); goog.require('ol.geom.LineString'); goog.require('ol.geom.MultiLineString'); goog.require('ol.geom.MultiPoint'); @@ -20,7 +21,18 @@ goog.require('ol.parser.StringFeatureParser'); * @implements {ol.parser.StringFeatureParser} * @extends {ol.parser.Parser} */ -ol.parser.TopoJSON = function() {}; +ol.parser.TopoJSON = function() { + + /** + * Common feature for all shared vertex creation. + * // TODO: make feature optional in shared vertex callback + * + * @type {ol.Feature} + * @private + */ + this.feature_ = new ol.Feature(); + +}; goog.inherits(ol.parser.TopoJSON, ol.parser.Parser); goog.addSingletonGetter(ol.parser.TopoJSON); @@ -212,8 +224,12 @@ ol.parser.TopoJSON.prototype.readLineString_ = function(object, arcs, opt_options) { var coordinates = this.concatenateArcs_(object.arcs, arcs); // TODO: make feature optional in callback - // TODO: get shared structure - return new ol.geom.LineString(coordinates); + var callback = opt_options && opt_options.callback; + var sharedVertices; + if (callback) { + sharedVertices = callback(this.feature_, ol.geom.GeometryType.LINESTRING); + } + return new ol.geom.LineString(coordinates, sharedVertices); }; @@ -235,8 +251,13 @@ ol.parser.TopoJSON.prototype.readMultiLineString_ = function(object, arcs, coordinates[i] = this.concatenateArcs_(array[i], arcs); } // TODO: make feature optional in callback - // TODO: get shared structure - return new ol.geom.MultiLineString(coordinates); + var callback = opt_options && opt_options.callback; + var sharedVertices; + if (callback) { + sharedVertices = callback(this.feature_, + ol.geom.GeometryType.MULTILINESTRING); + } + return new ol.geom.MultiLineString(coordinates, sharedVertices); }; @@ -257,8 +278,12 @@ ol.parser.TopoJSON.prototype.readMultiPoint_ = function(object, scale, this.transformVertex_(coordinates[i], scale, translate); } // TODO: make feature optional in callback - // TODO: get shared structure - return new ol.geom.MultiPoint(coordinates); + var callback = opt_options && opt_options.callback; + var sharedVertices; + if (callback) { + sharedVertices = callback(this.feature_, ol.geom.GeometryType.MULTIPOINT); + } + return new ol.geom.MultiPoint(coordinates, sharedVertices); }; @@ -289,8 +314,12 @@ ol.parser.TopoJSON.prototype.readMultiPolygon_ = function(object, arcs, coordinates[i] = ringCoords; } // TODO: make feature optional in callback - // TODO: get shared structure - return new ol.geom.MultiPolygon(coordinates); + var callback = opt_options && opt_options.callback; + var sharedVertices; + if (callback) { + sharedVertices = callback(this.feature_, ol.geom.GeometryType.MULTIPOLYGON); + } + return new ol.geom.MultiPolygon(coordinates, sharedVertices); }; @@ -309,8 +338,12 @@ ol.parser.TopoJSON.prototype.readPoint_ = function(object, scale, translate, var coordinates = object.coordinates; this.transformVertex_(coordinates, scale, translate); // TODO: make feature optional in callback - // TODO: get shared structure - return new ol.geom.Point(coordinates); + var callback = opt_options && opt_options.callback; + var sharedVertices; + if (callback) { + sharedVertices = callback(this.feature_, ol.geom.GeometryType.POINT); + } + return new ol.geom.Point(coordinates, sharedVertices); }; @@ -332,8 +365,12 @@ ol.parser.TopoJSON.prototype.readPolygon_ = function(object, arcs, coordinates[i] = this.concatenateArcs_(array[i], arcs); } // TODO: make feature optional in callback - // TODO: get shared structure - return new ol.geom.Polygon(coordinates); + var callback = opt_options && opt_options.callback; + var sharedVertices; + if (callback) { + sharedVertices = callback(this.feature_, ol.geom.GeometryType.POLYGON); + } + return new ol.geom.Polygon(coordinates, sharedVertices); };