diff --git a/examples/wms-custom-proj.js b/examples/wms-custom-proj.js index 2b829f3830..b1185b006b 100644 --- a/examples/wms-custom-proj.js +++ b/examples/wms-custom-proj.js @@ -1,5 +1,4 @@ goog.require('ol.Attribution'); -goog.require('ol.Extent'); goog.require('ol.Map'); goog.require('ol.RendererHints'); goog.require('ol.View2D'); @@ -13,10 +12,10 @@ goog.require('ol.source.TiledWMS'); var projection = ol.projection.configureProj4jsProjection({ code: 'EPSG:21781', - extent: new ol.Extent(485869.5728, 76443.1884, 837076.5648, 299941.7864) + extent: [485869.5728, 837076.5648, 76443.1884, 299941.7864] }); -var extent = new ol.Extent(420000, 30000, 900000, 350000); +var extent = [420000, 900000, 30000, 350000]; var layers = [ new ol.layer.TileLayer({ source: new ol.source.TiledWMS({ diff --git a/examples/wms-single-image-custom-proj.js b/examples/wms-single-image-custom-proj.js index d4b3444abf..1f51f91620 100644 --- a/examples/wms-single-image-custom-proj.js +++ b/examples/wms-single-image-custom-proj.js @@ -1,5 +1,4 @@ goog.require('ol.Attribution'); -goog.require('ol.Extent'); goog.require('ol.Map'); goog.require('ol.RendererHints'); goog.require('ol.View2D'); @@ -10,10 +9,10 @@ goog.require('ol.source.SingleImageWMS'); var projection = ol.projection.configureProj4jsProjection({ code: 'EPSG:21781', - extent: new ol.Extent(485869.5728, 76443.1884, 837076.5648, 299941.7864) + extent: [485869.5728, 837076.5648, 76443.1884, 299941.7864] }); -var extent = new ol.Extent(420000, 30000, 900000, 350000); +var extent = [420000, 900000, 30000, 350000]; var layers = [ new ol.layer.ImageLayer({ source: new ol.source.SingleImageWMS({ diff --git a/examples/wms-single-image.js b/examples/wms-single-image.js index ba63537379..98b429b7f0 100644 --- a/examples/wms-single-image.js +++ b/examples/wms-single-image.js @@ -1,4 +1,3 @@ -goog.require('ol.Extent'); goog.require('ol.Map'); goog.require('ol.RendererHint'); goog.require('ol.View2D'); @@ -16,7 +15,7 @@ var layers = [ source: new ol.source.SingleImageWMS({ url: 'http://demo.opengeo.org/geoserver/wms', params: {'LAYERS': 'topp:states'}, - extent: new ol.Extent(-13884991, 2870341, -7455066, 6338219) + extent: [-13884991, -7455066, 2870341, 6338219] }) }) ]; diff --git a/examples/wms-tiled.js b/examples/wms-tiled.js index f82a00293a..db2ba8a059 100644 --- a/examples/wms-tiled.js +++ b/examples/wms-tiled.js @@ -1,4 +1,3 @@ -goog.require('ol.Extent'); goog.require('ol.Map'); goog.require('ol.RendererHint'); goog.require('ol.View2D'); @@ -15,7 +14,7 @@ var layers = [ source: new ol.source.TiledWMS({ url: 'http://demo.opengeo.org/geoserver/wms', params: {'LAYERS': 'topp:states', 'TILED': true}, - extent: new ol.Extent(-13884991, 2870341, -7455066, 6338219) + extent: [-13884991, -7455066, 2870341, 6338219] }) }) ]; diff --git a/examples/wmts.js b/examples/wmts.js index e118592498..66c9923998 100644 --- a/examples/wmts.js +++ b/examples/wmts.js @@ -1,7 +1,7 @@ -goog.require('ol.Extent'); goog.require('ol.Map'); goog.require('ol.RendererHint'); goog.require('ol.View2D'); +goog.require('ol.extent'); goog.require('ol.layer.TileLayer'); goog.require('ol.projection'); goog.require('ol.source.OSM'); @@ -11,7 +11,7 @@ goog.require('ol.tilegrid.WMTS'); var projection = ol.projection.get('EPSG:900913'); var projectionExtent = projection.getExtent(); -var size = projectionExtent.getWidth() / 256; +var size = ol.extent.getWidth(projectionExtent) / 256; var resolutions = new Array(26); var matrixIds = new Array(26); for (var z = 0; z < 26; ++z) { @@ -34,12 +34,12 @@ var map = new ol.Map({ format: 'image/png', projection: projection, tileGrid: new ol.tilegrid.WMTS({ - origin: projectionExtent.getTopLeft(), + origin: ol.extent.getTopLeft(projectionExtent), resolutions: resolutions, matrixIds: matrixIds }), style: '_null', - extent: new ol.Extent(-13682835, 5204068, -13667473, 5221690) + extent: [-13682835, -13667473, 5204068, 5221690] }) }) ], diff --git a/src/ol/extent.exports b/src/ol/extent.exports index 9ba8337eaa..74acd74e1b 100644 --- a/src/ol/extent.exports +++ b/src/ol/extent.exports @@ -1,11 +1,16 @@ -@exportSymbol ol.Extent -@exportProperty ol.Extent.prototype.getCenter -@exportProperty ol.Extent.prototype.getHeight -@exportProperty ol.Extent.prototype.getWidth -@exportProperty ol.Extent.prototype.containsCoordinate -@exportProperty ol.Extent.prototype.containsExtent -@exportProperty ol.Extent.prototype.getBottomLeft -@exportProperty ol.Extent.prototype.getBottomRight -@exportProperty ol.Extent.prototype.getTopLeft -@exportProperty ol.Extent.prototype.getTopRight -@exportProperty ol.Extent.prototype.transform +@exportSymbol ol.extent.boundingExtent +@exportSymbol ol.extent.containsCoordinate +@exportSymbol ol.extent.containsExtent +@exportSymbol ol.extent.equals +@exportSymbol ol.extent.extend +@exportSymbol ol.extent.getBottomLeft +@exportSymbol ol.extent.getBottomRight +@exportSymbol ol.extent.getCenter +@exportSymbol ol.extent.getHeight +@exportSymbol ol.extent.getSize +@exportSymbol ol.extent.getTopLeft +@exportSymbol ol.extent.getTopRight +@exportSymbol ol.extent.getWidth +@exportSymbol ol.extent.intersects +@exportSymbol ol.extent.isEmpty +@exportSymbol ol.extent.transform diff --git a/src/ol/extent.js b/src/ol/extent.js index c5e38e7a91..c620d226ef 100644 --- a/src/ol/extent.js +++ b/src/ol/extent.js @@ -1,52 +1,193 @@ goog.provide('ol.Extent'); +goog.provide('ol.extent'); +goog.require('goog.asserts'); goog.require('ol.Coordinate'); -goog.require('ol.Rectangle'); +goog.require('ol.Size'); goog.require('ol.TransformFunction'); - /** - * Rectangular extent which is not rotated. An extent does not know its - * projection. - * - * @constructor - * @extends {ol.Rectangle} - * @param {number} minX Minimum X. - * @param {number} minY Minimum Y. - * @param {number} maxX Maximum X. - * @param {number} maxY Maximum Y. + * @typedef {Array.} */ -ol.Extent = function(minX, minY, maxX, maxY) { - goog.base(this, minX, minY, maxX, maxY); -}; -goog.inherits(ol.Extent, ol.Rectangle); +ol.Extent; /** * Builds an extent that includes all given coordinates. * - * @param {...ol.Coordinate} var_args Coordinates. - * @return {!ol.Extent} Bounding extent. + * @param {Array.} coordinates Coordinates. + * @return {ol.Extent} Bounding extent. */ -ol.Extent.boundingExtent = function(var_args) { - var coordinate0 = arguments[0]; - var extent = new ol.Extent(coordinate0[0], coordinate0[1], - coordinate0[0], coordinate0[1]); +ol.extent.boundingExtent = function(coordinates) { + var extent = ol.extent.createEmptyExtent(); + var n = coordinates.length; var i; - for (i = 1; i < arguments.length; ++i) { - var coordinate = arguments[i]; - extent.extendXY(coordinate[0], coordinate[1]); + for (i = 0; i < n; ++i) { + ol.extent.extendCoordinate(extent, coordinates[i]); } return extent; }; +/** + * @param {Array.} xs Xs. + * @param {Array.} ys Ys. + * @param {ol.Extent=} opt_extent Destination extent. + * @private + * @return {ol.Extent} + */ +ol.extent.boundingExtentXYs_ = function(xs, ys, opt_extent) { + goog.asserts.assert(xs.length > 0); + goog.asserts.assert(ys.length > 0); + var minX = Math.min.apply(null, xs); + var maxX = Math.max.apply(null, xs); + var minY = Math.min.apply(null, ys); + var maxY = Math.max.apply(null, ys); + if (goog.isDef(opt_extent)) { + opt_extent[0] = minX; + opt_extent[1] = maxX; + opt_extent[2] = minY; + opt_extent[3] = maxY; + return opt_extent; + } else { + return [minX, maxX, minY, maxY]; + } +}; + + +/** + * Checks if the passed coordinate is contained or on the edge + * of the extent. + * + * @param {ol.Extent} extent Extent. + * @param {ol.Coordinate} coordinate Coordinate. + * @return {boolean} Contains. + */ +ol.extent.containsCoordinate = function(extent, coordinate) { + return extent[0] <= coordinate[0] && coordinate[0] <= extent[1] && + extent[2] <= coordinate[1] && coordinate[1] <= extent[3]; +}; + + +/** + * Checks if the passed extent is contained or on the edge of the + * extent. + * + * @param {ol.Extent} extent1 Extent 1. + * @param {ol.Extent} extent2 Extent 2. + * @return {boolean} Contains. + */ +ol.extent.containsExtent = function(extent1, extent2) { + return extent1[0] <= extent2[0] && extent2[1] <= extent1[1] && + extent1[2] <= extent2[2] && extent2[3] <= extent1[3]; +}; + + /** * @return {ol.Extent} Empty extent. */ -ol.Extent.createEmptyExtent = function() { - return new ol.Extent(Infinity, Infinity, -Infinity, -Infinity); +ol.extent.createEmptyExtent = function() { + return [Infinity, -Infinity, Infinity, -Infinity]; +}; + + +/** + * @param {number} minX Minimum X. + * @param {number} maxX Maximum X. + * @param {number} minY Minimum Y. + * @param {number} maxY Maximum Y. + * @param {ol.Extent|undefined} extent Extent. + * @return {ol.Extent} Extent. + */ +ol.extent.createOrUpdate = function(minX, maxX, minY, maxY, extent) { + if (goog.isDef(extent)) { + extent[0] = minX; + extent[1] = maxX; + extent[2] = minY; + extent[3] = maxY; + return extent; + } else { + return [minX, maxX, minY, maxY]; + } +}; + + +/** + * @param {ol.Extent} extent1 Extent 1. + * @param {ol.Extent} extent2 Extent 2. + * @return {boolean} Equals. + */ +ol.extent.equals = function(extent1, extent2) { + return extent1[0] == extent2[0] && extent1[1] == extent2[1] && + extent1[2] == extent2[2] && extent1[3] == extent2[3]; +}; + + +/** + * @param {ol.Extent} extent1 Extent 1. + * @param {ol.Extent} extent2 Extent 2. + */ +ol.extent.extend = function(extent1, extent2) { + if (extent2[0] < extent1[0]) { + extent1[0] = extent2[0]; + } + if (extent2[1] > extent1[1]) { + extent1[1] = extent2[1]; + } + if (extent2[2] < extent1[2]) { + extent1[2] = extent2[2]; + } + if (extent2[3] > extent1[3]) { + extent1[3] = extent2[3]; + } +}; + + +/** + * @param {ol.Extent} extent Extent. + * @param {ol.Coordinate} coordinate Coordinate. + */ +ol.extent.extendCoordinate = function(extent, coordinate) { + if (coordinate[0] < extent[0]) { + extent[0] = coordinate[0]; + } + if (coordinate[0] > extent[1]) { + extent[1] = coordinate[0]; + } + if (coordinate[1] < extent[2]) { + extent[2] = coordinate[1]; + } + if (coordinate[1] > extent[3]) { + extent[3] = coordinate[1]; + } +}; + + +/** + * @param {ol.Extent} extent Extent. + * @return {ol.Coordinate} Bottom left coordinate. + */ +ol.extent.getBottomLeft = function(extent) { + return [extent[0], extent[2]]; +}; + + +/** + * @param {ol.Extent} extent Extent. + * @return {ol.Coordinate} Bottom right coordinate. + */ +ol.extent.getBottomRight = function(extent) { + return [extent[1], extent[2]]; +}; + + +/** + * @param {ol.Extent} extent Extent. + * @return {ol.Coordinate} Center. + */ +ol.extent.getCenter = function(extent) { + return [(extent[0] + extent[1]) / 2, (extent[2] + extent[3]) / 2]; }; @@ -55,9 +196,11 @@ ol.Extent.createEmptyExtent = function() { * @param {number} resolution Resolution. * @param {number} rotation Rotation. * @param {ol.Size} size Size. + * @param {ol.Extent=} opt_extent Destination extent. * @return {ol.Extent} Extent. */ -ol.Extent.getForView2DAndSize = function(center, resolution, rotation, size) { +ol.extent.getForView2DAndSize = + function(center, resolution, rotation, size, opt_extent) { var dx = resolution * size.width / 2; var dy = resolution * size.height / 2; var cosRotation = Math.cos(rotation); @@ -71,102 +214,128 @@ ol.Extent.getForView2DAndSize = function(center, resolution, rotation, size) { xs[i] = center[0] + x * cosRotation - y * sinRotation; ys[i] = center[1] + x * sinRotation + y * cosRotation; } - var minX = Math.min.apply(null, xs); - var minY = Math.min.apply(null, ys); - var maxX = Math.max.apply(null, xs); - var maxY = Math.max.apply(null, ys); - return new ol.Extent(minX, minY, maxX, maxY); + return ol.extent.boundingExtentXYs_(xs, ys, opt_extent); }; /** - * Checks if the passed coordinate is contained or on the edge - * of the extent. - * - * @param {ol.Coordinate} coordinate Coordinate. - * @return {boolean} Contains. - */ -ol.Extent.prototype.containsCoordinate = function(coordinate) { - return this.minX <= coordinate[0] && coordinate[0] <= this.maxX && - this.minY <= coordinate[1] && coordinate[1] <= this.maxY; -}; - - -/** - * @param {number} minX Minimum X. - * @param {number} minY Minimum Y. - * @param {number} maxX Maximum X. - * @param {number} maxY Maximum Y. - * @param {ol.Extent|undefined} extent Extent. - * @return {ol.Extent} Extent. - */ -ol.Extent.createOrUpdate = function(minX, minY, maxX, maxY, extent) { - if (goog.isDef(extent)) { - extent.minX = minX; - extent.minY = minY; - extent.maxX = maxX; - extent.maxY = maxY; - return extent; - } else { - return new ol.Extent(minX, minY, maxX, maxY); - } -}; - - -/** - * Checks if the passed extent is contained or on the edge of the - * extent. - * * @param {ol.Extent} extent Extent. - * @return {boolean} Contains. + * @return {number} Height. */ -ol.Extent.prototype.containsExtent = function(extent) { - return this.minX <= extent.minX && extent.maxX <= this.maxX && - this.minY <= extent.minY && extent.maxY <= this.maxY; +ol.extent.getHeight = function(extent) { + return extent[3] - extent[2]; }; /** - * @return {ol.Coordinate} Bottom left coordinate. + * @param {ol.Extent} extent Extent. + * @return {ol.Size} Size. */ -ol.Extent.prototype.getBottomLeft = function() { - return [this.minX, this.minY]; -}; - - -/** - * @return {ol.Coordinate} Bottom right coordinate. - */ -ol.Extent.prototype.getBottomRight = function() { - return [this.maxX, this.minY]; +ol.extent.getSize = function(extent) { + return new ol.Size(extent[1] - extent[0], extent[3] - extent[2]); }; /** + * @param {ol.Extent} extent Extent. * @return {ol.Coordinate} Top left coordinate. */ -ol.Extent.prototype.getTopLeft = function() { - return [this.minX, this.maxY]; +ol.extent.getTopLeft = function(extent) { + return [extent[0], extent[3]]; }; /** + * @param {ol.Extent} extent Extent. * @return {ol.Coordinate} Top right coordinate. */ -ol.Extent.prototype.getTopRight = function() { - return [this.maxX, this.maxY]; +ol.extent.getTopRight = function(extent) { + return [extent[1], extent[3]]; }; /** + * @param {ol.Extent} extent Extent. + * @return {number} Width. + */ +ol.extent.getWidth = function(extent) { + return extent[1] - extent[0]; +}; + + +/** + * @param {ol.Extent} extent1 Extent 1. + * @param {ol.Extent} extent2 Extent. + * @return {boolean} Intersects. + */ +ol.extent.intersects = function(extent1, extent2) { + return extent1[0] <= extent2[1] && + extent1[1] >= extent2[0] && + extent1[2] <= extent2[3] && + extent1[3] >= extent2[2]; +}; + + +/** + * @param {ol.Extent} extent Extent. + * @return {boolean} Is empty. + */ +ol.extent.isEmpty = function(extent) { + return extent[1] < extent[0] || extent[3] < extent[2]; +}; + + +/** + * @param {ol.Extent} extent Extent. + * @param {ol.Coordinate} coordinate Coordinate. + * @return {ol.Coordinate} Coordinate. + */ +ol.extent.normalize = function(extent, coordinate) { + return [ + (coordinate[0] - extent[0]) / (extent[1] - extent[0]), + (coordinate[1] - extent[2]) / (extent[3] - extent[2]) + ]; +}; + + +/** + * @param {ol.Extent} extent Extent. + * @param {number} value Value. + */ +ol.extent.scaleFromCenter = function(extent, value) { + var deltaX = ((extent[1] - extent[0]) / 2) * (value - 1); + var deltaY = ((extent[3] - extent[2]) / 2) * (value - 1); + extent[0] -= deltaX; + extent[1] += deltaX; + extent[2] -= deltaY; + extent[3] += deltaY; +}; + + +/** + * @param {ol.Extent} extent Extent. + * @return {string} String. + */ +ol.extent.toString = function(extent) { + return '(' + [extent[0], extent[1], extent[2], extent[3]].join(', ') + ')'; +}; + + +/** + * @param {ol.Extent} extent Extent. * @param {ol.TransformFunction} transformFn Transform function. + * @param {ol.Extent=} opt_extent Destination extent. * @return {ol.Extent} Extent. */ -ol.Extent.prototype.transform = function(transformFn) { - var input = [this.minX, this.minY, this.maxX, this.maxY]; - input = transformFn(input, input, 2); - return new ol.Extent(Math.min(input[0], input[2]), - Math.min(input[1], input[3]), - Math.max(input[0], input[2]), - Math.max(input[1], input[3])); +ol.extent.transform = function(extent, transformFn, opt_extent) { + var coordinates = [ + extent[0], extent[2], + extent[0], extent[3], + extent[1], extent[2], + extent[1], extent[3] + ]; + transformFn(coordinates, coordinates, 2); + var xs = [coordinates[0], coordinates[2], coordinates[4], coordinates[6]]; + var ys = [coordinates[1], coordinates[3], coordinates[5], coordinates[7]]; + return ol.extent.boundingExtentXYs_(xs, ys, opt_extent); }; diff --git a/src/ol/filter/extentfilter.js b/src/ol/filter/extentfilter.js index b8738bfa73..2892246519 100644 --- a/src/ol/filter/extentfilter.js +++ b/src/ol/filter/extentfilter.js @@ -1,6 +1,6 @@ goog.provide('ol.filter.Extent'); -goog.require('ol.Extent'); +goog.require('ol.extent'); goog.require('ol.filter.Filter'); @@ -35,5 +35,5 @@ ol.filter.Extent.prototype.getExtent = function() { * @inheritDoc */ ol.filter.Extent.prototype.applies = function(feature) { - return feature.getGeometry().getBounds().intersects(this.extent_); + return ol.extent.intersects(feature.getGeometry().getBounds(), this.extent_); }; diff --git a/src/ol/geom/abstractcollection.js b/src/ol/geom/abstractcollection.js index 800c5d47ff..65bbef6dcd 100644 --- a/src/ol/geom/abstractcollection.js +++ b/src/ol/geom/abstractcollection.js @@ -1,6 +1,5 @@ goog.provide('ol.geom.AbstractCollection'); -goog.require('ol.Extent'); goog.require('ol.geom.Geometry'); @@ -49,12 +48,12 @@ ol.geom.AbstractCollection.prototype.getBounds = function() { for (i = 0; i < len; ++i) { bounds = components[i].getBounds(); - minX = Math.min(bounds.minX, minX); - minY = Math.min(bounds.minY, minY); - maxX = Math.max(bounds.maxX, maxX); - maxY = Math.max(bounds.maxY, maxY); + minX = Math.min(bounds[0], minX); + maxX = Math.max(bounds[1], maxX); + minY = Math.min(bounds[2], minY); + maxY = Math.max(bounds[3], maxY); } - this.bounds = new ol.Extent(minX, minY, maxX, maxY); + this.bounds = [minX, maxX, minY, maxY]; } return this.bounds; }; diff --git a/src/ol/geom/linestring.js b/src/ol/geom/linestring.js index 1705954163..7f92785690 100644 --- a/src/ol/geom/linestring.js +++ b/src/ol/geom/linestring.js @@ -1,7 +1,6 @@ goog.provide('ol.geom.LineString'); goog.require('goog.asserts'); -goog.require('ol.Extent'); goog.require('ol.geom.Geometry'); goog.require('ol.geom.GeometryType'); goog.require('ol.geom.SharedVertices'); @@ -126,7 +125,7 @@ ol.geom.LineString.prototype.getBounds = function() { maxY = y; } } - this.bounds_ = new ol.Extent(minX, minY, maxX, maxY); + this.bounds_ = [minX, maxX, minY, maxY]; } return this.bounds_; }; diff --git a/src/ol/geom/point.js b/src/ol/geom/point.js index f593db0cb7..97d3ed7a34 100644 --- a/src/ol/geom/point.js +++ b/src/ol/geom/point.js @@ -1,7 +1,6 @@ goog.provide('ol.geom.Point'); goog.require('goog.asserts'); -goog.require('ol.Extent'); goog.require('ol.geom.Geometry'); goog.require('ol.geom.GeometryType'); goog.require('ol.geom.SharedVertices'); @@ -69,7 +68,7 @@ ol.geom.Point.prototype.getBounds = function() { if (goog.isNull(this.bounds_)) { var x = this.get(0), y = this.get(1); - this.bounds_ = new ol.Extent(x, y, x, y); + this.bounds_ = [x, x, y, y]; } return this.bounds_; }; diff --git a/src/ol/imageurlfunction.js b/src/ol/imageurlfunction.js index 9f52622858..6ec18fbc37 100644 --- a/src/ol/imageurlfunction.js +++ b/src/ol/imageurlfunction.js @@ -1,7 +1,6 @@ goog.provide('ol.ImageUrlFunction'); goog.provide('ol.ImageUrlFunctionType'); -goog.require('ol.Extent'); goog.require('ol.Size'); diff --git a/src/ol/interaction/dragzoominteraction.js b/src/ol/interaction/dragzoominteraction.js index 5f5218dbfe..87a293b168 100644 --- a/src/ol/interaction/dragzoominteraction.js +++ b/src/ol/interaction/dragzoominteraction.js @@ -4,10 +4,10 @@ goog.provide('ol.interaction.DragZoom'); goog.require('goog.asserts'); -goog.require('ol.Extent'); goog.require('ol.Size'); goog.require('ol.View2D'); goog.require('ol.control.DragBox'); +goog.require('ol.extent'); goog.require('ol.interaction.ConditionType'); goog.require('ol.interaction.Drag'); @@ -63,9 +63,8 @@ ol.interaction.DragZoom.prototype.handleDragEnd = if (this.deltaX * this.deltaX + this.deltaY * this.deltaY >= ol.SHIFT_DRAG_ZOOM_HYSTERESIS_PIXELS_SQUARED) { var map = mapBrowserEvent.map; - var extent = ol.Extent.boundingExtent( - this.startCoordinate, - mapBrowserEvent.getCoordinate()); + var extent = ol.extent.boundingExtent( + [this.startCoordinate, mapBrowserEvent.getCoordinate()]); map.withFrozenRendering(function() { // FIXME works for View2D only var view = map.getView(); diff --git a/src/ol/map.js b/src/ol/map.js index c551e7317b..6cad4f16fe 100644 --- a/src/ol/map.js +++ b/src/ol/map.js @@ -32,7 +32,6 @@ goog.require('ol.Collection'); goog.require('ol.CollectionEvent'); goog.require('ol.CollectionEventType'); goog.require('ol.Color'); -goog.require('ol.Extent'); goog.require('ol.FrameState'); goog.require('ol.IView'); goog.require('ol.MapBrowserEvent'); @@ -52,6 +51,7 @@ goog.require('ol.View'); goog.require('ol.View2D'); goog.require('ol.ViewHint'); goog.require('ol.control.defaults'); +goog.require('ol.extent'); goog.require('ol.interaction.defaults'); goog.require('ol.layer.Layer'); goog.require('ol.projection'); @@ -838,7 +838,7 @@ ol.Map.prototype.renderFrame_ = function(time) { if (!goog.isNull(frameState)) { // FIXME works for View2D only - frameState.extent = ol.Extent.getForView2DAndSize(view2DState.center, + frameState.extent = ol.extent.getForView2DAndSize(view2DState.center, view2DState.resolution, view2DState.rotation, frameState.size); } diff --git a/src/ol/parser/ogc/owscommon_v1.js b/src/ol/parser/ogc/owscommon_v1.js index 97a800b48d..5ddd185547 100644 --- a/src/ol/parser/ogc/owscommon_v1.js +++ b/src/ol/parser/ogc/owscommon_v1.js @@ -1,5 +1,4 @@ goog.provide('ol.parser.ogc.OWSCommon_v1'); -goog.require('ol.Extent'); goog.require('ol.parser.XML'); @@ -196,9 +195,10 @@ ol.parser.ogc.OWSCommon_v1 = function() { var pointList = str.split(this.regExes.splitSpace); obj['right'] = pointList[0]; obj['top'] = pointList[1]; - obj['bounds'] = new ol.Extent(parseFloat(obj['left']), - parseFloat(obj['bottom']), parseFloat(obj['right']), - parseFloat(obj['top'])); + obj['bounds'] = [ + parseFloat(obj['left']), parseFloat(obj['right']), + parseFloat(obj['bottom']), parseFloat(obj['top']) + ]; delete obj['left']; delete obj['bottom']; delete obj['right']; diff --git a/src/ol/pixelbounds.js b/src/ol/pixelbounds.js index 42a63f3b91..54f941edef 100644 --- a/src/ol/pixelbounds.js +++ b/src/ol/pixelbounds.js @@ -1,18 +1,34 @@ goog.provide('ol.PixelBounds'); -goog.require('ol.Rectangle'); - /** * @constructor - * @extends {ol.Rectangle} * @param {number} minX Minimum X. - * @param {number} minY Minimum Y. * @param {number} maxX Maximum X. + * @param {number} minY Minimum Y. * @param {number} maxY Maximum Y. */ -ol.PixelBounds = function(minX, minY, maxX, maxY) { - goog.base(this, minX, minY, maxX, maxY); +ol.PixelBounds = function(minX, maxX, minY, maxY) { + + /** + * @type {number} + */ + this.minX = minX; + + /** + * @type {number} + */ + this.maxX = maxX; + + /** + * @type {number} + */ + this.minY = minY; + + /** + * @type {number} + */ + this.maxY = maxY; + }; -goog.inherits(ol.PixelBounds, ol.Rectangle); diff --git a/src/ol/projection/epsg3857projection.js b/src/ol/projection/epsg3857projection.js index 9409522183..03ab370256 100644 --- a/src/ol/projection/epsg3857projection.js +++ b/src/ol/projection/epsg3857projection.js @@ -2,7 +2,6 @@ goog.provide('ol.projection.EPSG3857'); goog.require('goog.array'); goog.require('goog.asserts'); -goog.require('ol.Extent'); goog.require('ol.Projection'); goog.require('ol.ProjectionUnits'); goog.require('ol.math'); @@ -44,9 +43,10 @@ ol.projection.EPSG3857.HALF_SIZE = Math.PI * ol.projection.EPSG3857.RADIUS; * @const * @type {ol.Extent} */ -ol.projection.EPSG3857.EXTENT = new ol.Extent( - -ol.projection.EPSG3857.HALF_SIZE, -ol.projection.EPSG3857.HALF_SIZE, - ol.projection.EPSG3857.HALF_SIZE, ol.projection.EPSG3857.HALF_SIZE); +ol.projection.EPSG3857.EXTENT = [ + -ol.projection.EPSG3857.HALF_SIZE, ol.projection.EPSG3857.HALF_SIZE, + -ol.projection.EPSG3857.HALF_SIZE, ol.projection.EPSG3857.HALF_SIZE +]; /** diff --git a/src/ol/projection/epsg4326projection.js b/src/ol/projection/epsg4326projection.js index e0ea8eba83..5bf5cc545d 100644 --- a/src/ol/projection/epsg4326projection.js +++ b/src/ol/projection/epsg4326projection.js @@ -1,6 +1,5 @@ goog.provide('ol.projection.EPSG4326'); -goog.require('ol.Extent'); goog.require('ol.Projection'); goog.require('ol.ProjectionUnits'); goog.require('ol.projection'); @@ -31,7 +30,7 @@ goog.inherits(ol.projection.EPSG4326, ol.Projection); * @const * @type {ol.Extent} */ -ol.projection.EPSG4326.EXTENT = new ol.Extent(-180, -90, 180, 90); +ol.projection.EPSG4326.EXTENT = [-180, 180, -90, 90]; /** diff --git a/src/ol/rectangle.js b/src/ol/rectangle.js deleted file mode 100644 index 3a9d696413..0000000000 --- a/src/ol/rectangle.js +++ /dev/null @@ -1,171 +0,0 @@ -goog.provide('ol.Rectangle'); - -goog.require('goog.asserts'); -goog.require('ol.Size'); - - - -/** - * @constructor - * @param {number} minX Minimum X. - * @param {number} minY Minimum Y. - * @param {number} maxX Maximum X. - * @param {number} maxY Maximum Y. - */ -ol.Rectangle = function(minX, minY, maxX, maxY) { - - /** - * @type {number} - */ - this.minX = minX; - - /** - * @type {number} - */ - this.minY = minY; - - /** - * @type {number} - */ - this.maxX = maxX; - - /** - * @type {number} - */ - this.maxY = maxY; - -}; - - -/** - * @param {ol.Rectangle} rectangle Rectangle. - * @return {boolean} Equals. - */ -ol.Rectangle.prototype.equals = function(rectangle) { - return this.minX == rectangle.minX && this.minY == rectangle.minY && - this.maxX == rectangle.maxX && this.maxY == rectangle.maxY; -}; - - -/** - * @param {ol.Rectangle} rectangle Rectangle. - */ -ol.Rectangle.prototype.extend = function(rectangle) { - if (rectangle.minX < this.minX) { - this.minX = rectangle.minX; - } - if (rectangle.minY < this.minY) { - this.minY = rectangle.minY; - } - if (rectangle.maxX > this.maxX) { - this.maxX = rectangle.maxX; - } - if (rectangle.maxY > this.maxY) { - this.maxY = rectangle.maxY; - } -}; - - -/** - * @param {number} x X. - * @param {number} y Y. - */ -ol.Rectangle.prototype.extendXY = function(x, y) { - if (x < this.minX) { - this.minX = x; - } - if (y < this.minY) { - this.minY = y; - } - if (x > this.maxX) { - this.maxX = x; - } - if (y > this.maxY) { - this.maxY = y; - } -}; - - -/** - * @return {ol.Coordinate} Center. - */ -ol.Rectangle.prototype.getCenter = function() { - return [(this.minX + this.maxX) / 2, (this.minY + this.maxY) / 2]; -}; - - -/** - * @return {number} Height. - */ -ol.Rectangle.prototype.getHeight = function() { - return this.maxY - this.minY; -}; - - -/** - * @return {ol.Size} Size. - */ -ol.Rectangle.prototype.getSize = function() { - return new ol.Size(this.getWidth(), this.getHeight()); -}; - - -/** - * @return {number} Width. - */ -ol.Rectangle.prototype.getWidth = function() { - return this.maxX - this.minX; -}; - - -/** - * @param {ol.Rectangle} rectangle Rectangle. - * @return {boolean} Intersects. - */ -ol.Rectangle.prototype.intersects = function(rectangle) { - return this.minX <= rectangle.maxX && - this.maxX >= rectangle.minX && - this.minY <= rectangle.maxY && - this.maxY >= rectangle.minY; -}; - - -/** - * @return {boolean} Is empty. - */ -ol.Rectangle.prototype.isEmpty = function() { - return this.maxX < this.minX || this.maxY < this.minY; -}; - - -/** - * @param {ol.Coordinate} coordinate Coordinate. - * @return {ol.Coordinate} Coordinate. - */ -ol.Rectangle.prototype.normalize = function(coordinate) { - return [ - (coordinate[0] - this.minX) / this.getWidth(), - (coordinate[1] - this.minY) / this.getHeight() - ]; -}; - - -/** - * @return {string} String. - */ -ol.Rectangle.prototype.toString = function() { - return '(' + [this.minX, this.minY, this.maxX, this.maxY].join(', ') + ')'; -}; - - -/** - * @param {number} value Value. - */ -ol.Rectangle.prototype.scaleFromCenter = function(value) { - var deltaX = (this.getWidth() / 2.0) * (value - 1); - var deltaY = (this.getHeight() / 2.0) * (value - 1); - this.minX -= deltaX; - this.minY -= deltaY; - this.maxX += deltaX; - this.maxY += deltaY; -}; diff --git a/src/ol/renderer/canvas/canvasimagelayerrenderer.js b/src/ol/renderer/canvas/canvasimagelayerrenderer.js index 47385527af..d0f1599c1a 100644 --- a/src/ol/renderer/canvas/canvasimagelayerrenderer.js +++ b/src/ol/renderer/canvas/canvasimagelayerrenderer.js @@ -113,8 +113,8 @@ ol.renderer.canvas.ImageLayer.prototype.renderFrame = 1); goog.vec.Mat4.translate( transform, - (imageExtent.minX - viewCenter[0]) / imageResolution, - (viewCenter[1] - imageExtent.maxY) / imageResolution, + (imageExtent[0] - viewCenter[0]) / imageResolution, + (viewCenter[1] - imageExtent[3]) / imageResolution, 0); this.updateAttributions(frameState.attributions, image.getAttributions()); diff --git a/src/ol/renderer/canvas/canvastilelayerrenderer.js b/src/ol/renderer/canvas/canvastilelayerrenderer.js index a84f67ca10..55ffae16b7 100644 --- a/src/ol/renderer/canvas/canvastilelayerrenderer.js +++ b/src/ol/renderer/canvas/canvastilelayerrenderer.js @@ -9,12 +9,12 @@ goog.require('goog.dom'); goog.require('goog.dom.TagName'); goog.require('goog.object'); goog.require('goog.vec.Mat4'); -goog.require('ol.Extent'); goog.require('ol.Size'); goog.require('ol.Tile'); goog.require('ol.TileCoord'); goog.require('ol.TileRange'); goog.require('ol.TileState'); +goog.require('ol.extent'); goog.require('ol.layer.TileLayer'); goog.require('ol.renderer.Map'); goog.require('ol.renderer.canvas.Layer'); @@ -187,7 +187,7 @@ ol.renderer.canvas.TileLayer.prototype.renderFrame = var extent; if (tileResolution == view2DState.resolution) { center = this.snapCenterToPixel(center, tileResolution, frameState.size); - extent = ol.Extent.getForView2DAndSize( + extent = ol.extent.getForView2DAndSize( center, tileResolution, view2DState.rotation, frameState.size); } else { extent = frameState.extent; @@ -244,8 +244,8 @@ ol.renderer.canvas.TileLayer.prototype.renderFrame = Math.floor((canvasTileRangeHeight - tileRange.getHeight()) / 2); this.renderedCanvasZ_ = z; this.renderedCanvasTileRange_ = new ol.TileRange( - minX, minY, - minX + canvasTileRangeWidth - 1, minY + canvasTileRangeHeight - 1); + minX, minX + canvasTileRangeWidth - 1, + minY, minY + canvasTileRangeHeight - 1); this.renderedTiles_ = new Array(canvasTileRangeWidth * canvasTileRangeHeight); canvasTileRange = this.renderedCanvasTileRange_; @@ -271,7 +271,7 @@ ol.renderer.canvas.TileLayer.prototype.renderFrame = tilesToDrawByZ, getTileIfLoaded); var allTilesLoaded = true; - var tmpExtent = new ol.Extent(0, 0, 0, 0); + var tmpExtent = ol.extent.createEmptyExtent(); var tmpTileRange = new ol.TileRange(0, 0, 0, 0); var childTileRange, fullyLoaded, tile, tileState, x, y; for (x = tileRange.minX; x <= tileRange.maxX; ++x) { @@ -315,8 +315,9 @@ ol.renderer.canvas.TileLayer.prototype.renderFrame = var zs = goog.array.map(goog.object.getKeys(tilesToDrawByZ), Number); goog.array.sort(zs); var opaque = tileSource.getOpaque(); - var origin = tileGrid.getTileCoordExtent(new ol.TileCoord( - z, canvasTileRange.minX, canvasTileRange.maxY), tmpExtent).getTopLeft(); + var origin = ol.extent.getTopLeft(tileGrid.getTileCoordExtent( + new ol.TileCoord(z, canvasTileRange.minX, canvasTileRange.maxY), + tmpExtent)); var currentZ, index, scale, tileCoordKey, tileExtent, tilesToDraw; var ix, iy, interimTileExtent, interimTileRange, maxX, maxY; var height, width; @@ -348,8 +349,8 @@ ol.renderer.canvas.TileLayer.prototype.renderFrame = for (tileCoordKey in tilesToDraw) { tile = tilesToDraw[tileCoordKey]; tileExtent = tileGrid.getTileCoordExtent(tile.tileCoord, tmpExtent); - x = (tileExtent.minX - origin[0]) / tileResolution; - y = (origin[1] - tileExtent.maxY) / tileResolution; + x = (tileExtent[0] - origin[0]) / tileResolution; + y = (origin[1] - tileExtent[3]) / tileResolution; width = scale * tileSize.width; height = scale * tileSize.height; tileState = tile.getState(); diff --git a/src/ol/renderer/canvas/canvasvectorlayerrenderer.js b/src/ol/renderer/canvas/canvasvectorlayerrenderer.js index 923b8a4f15..b343880a36 100644 --- a/src/ol/renderer/canvas/canvasvectorlayerrenderer.js +++ b/src/ol/renderer/canvas/canvasvectorlayerrenderer.js @@ -6,11 +6,11 @@ goog.require('goog.events'); goog.require('goog.events.EventType'); goog.require('goog.object'); goog.require('goog.vec.Mat4'); -goog.require('ol.Extent'); goog.require('ol.Size'); goog.require('ol.TileCache'); goog.require('ol.TileCoord'); goog.require('ol.ViewHint'); +goog.require('ol.extent'); goog.require('ol.filter.Extent'); goog.require('ol.filter.Geometry'); goog.require('ol.filter.Logical'); @@ -229,7 +229,7 @@ ol.renderer.canvas.VectorLayer.prototype.renderFrame = extent, tileResolution), tileRangeExtent = tileGrid.getTileRangeExtent(z, tileRange), tileSize = tileGrid.getTileSize(z), - sketchOrigin = tileRangeExtent.getTopLeft(), + sketchOrigin = ol.extent.getTopLeft(tileRangeExtent), transform = this.transform_; goog.vec.Mat4.makeIdentity(transform); @@ -324,10 +324,10 @@ ol.renderer.canvas.VectorLayer.prototype.renderFrame = tilesToRender[key] = tileCoord; } else if (!frameState.viewHints[ol.ViewHint.ANIMATING]) { tileExtent = tileGrid.getTileCoordExtent(tileCoord); - tileExtent.minX -= tileGutter; - tileExtent.minY -= tileGutter; - tileExtent.maxX += tileGutter; - tileExtent.maxY += tileGutter; + tileExtent[0] -= tileGutter; + tileExtent[1] += tileGutter; + tileExtent[2] -= tileGutter; + tileExtent[3] += tileGutter; extentFilter = new ol.filter.Extent(tileExtent); for (i = 0; i < numFilters; ++i) { geomFilter = filters[i]; diff --git a/src/ol/renderer/dom/domimagelayerrenderer.js b/src/ol/renderer/dom/domimagelayerrenderer.js index f0feaed037..022d5ce4db 100644 --- a/src/ol/renderer/dom/domimagelayerrenderer.js +++ b/src/ol/renderer/dom/domimagelayerrenderer.js @@ -100,8 +100,8 @@ ol.renderer.dom.ImageLayer.prototype.renderFrame = 1); goog.vec.Mat4.translate( transform, - (imageExtent.minX - viewCenter[0]) / imageResolution, - (viewCenter[1] - imageExtent.maxY) / imageResolution, + (imageExtent[0] - viewCenter[0]) / imageResolution, + (viewCenter[1] - imageExtent[3]) / imageResolution, 0); if (image != this.image_) { var imageElement = image.getImageElement(this); diff --git a/src/ol/renderer/dom/domtilelayerrenderer.js b/src/ol/renderer/dom/domtilelayerrenderer.js index 197048b272..f80bbe6754 100644 --- a/src/ol/renderer/dom/domtilelayerrenderer.js +++ b/src/ol/renderer/dom/domtilelayerrenderer.js @@ -11,13 +11,13 @@ goog.require('goog.object'); goog.require('goog.style'); goog.require('goog.vec.Mat4'); goog.require('ol.Coordinate'); -goog.require('ol.Extent'); goog.require('ol.Tile'); goog.require('ol.TileCoord'); goog.require('ol.TileRange'); goog.require('ol.TileState'); goog.require('ol.ViewHint'); goog.require('ol.dom'); +goog.require('ol.extent'); goog.require('ol.layer.TileLayer'); goog.require('ol.renderer.dom.Layer'); goog.require('ol.tilegrid.TileGrid'); @@ -98,7 +98,7 @@ ol.renderer.dom.TileLayer.prototype.renderFrame = var extent; if (tileResolution == view2DState.resolution) { center = this.snapCenterToPixel(center, tileResolution, frameState.size); - extent = ol.Extent.getForView2DAndSize( + extent = ol.extent.getForView2DAndSize( center, tileResolution, view2DState.rotation, frameState.size); } else { extent = frameState.extent; @@ -117,7 +117,7 @@ ol.renderer.dom.TileLayer.prototype.renderFrame = tilesToDrawByZ, getTileIfLoaded); var allTilesLoaded = true; - var tmpExtent = new ol.Extent(0, 0, 0, 0); + var tmpExtent = ol.extent.createEmptyExtent(); var tmpTileRange = new ol.TileRange(0, 0, 0, 0); var childTileRange, fullyLoaded, tile, tileState, x, y; for (x = tileRange.minX; x <= tileRange.maxX; ++x) { @@ -272,7 +272,8 @@ ol.renderer.dom.TileLayerZ_ = function(tileGrid, tileCoordOrigin) { * @private * @type {ol.Coordinate} */ - this.origin_ = tileGrid.getTileCoordExtent(tileCoordOrigin).getTopLeft(); + this.origin_ = + ol.extent.getTopLeft(tileGrid.getTileCoordExtent(tileCoordOrigin)); /** * @private diff --git a/src/ol/renderer/webgl/webglimagelayerrenderer.js b/src/ol/renderer/webgl/webglimagelayerrenderer.js index ca9546e714..62cf769a22 100644 --- a/src/ol/renderer/webgl/webglimagelayerrenderer.js +++ b/src/ol/renderer/webgl/webglimagelayerrenderer.js @@ -169,11 +169,13 @@ ol.renderer.webgl.ImageLayer.prototype.updateProjectionMatrix_ = 2 / canvasExtentWidth, 2 / canvasExtentHeight, 1); goog.vec.Mat4.rotateZ(projectionMatrix, -viewRotation); goog.vec.Mat4.translate(projectionMatrix, - imageExtent.minX - viewCenter[0], - imageExtent.minY - viewCenter[1], + imageExtent[0] - viewCenter[0], + imageExtent[2] - viewCenter[1], 0); goog.vec.Mat4.scale(projectionMatrix, - imageExtent.getWidth() / 2, imageExtent.getHeight() / 2, 1); + (imageExtent[1] - imageExtent[0]) / 2, + (imageExtent[3] - imageExtent[2]) / 2, + 1); goog.vec.Mat4.translate(projectionMatrix, 1, 1, 0); }; diff --git a/src/ol/renderer/webgl/webgltilelayerrenderer.js b/src/ol/renderer/webgl/webgltilelayerrenderer.js index 79369dc52c..78320cd27a 100644 --- a/src/ol/renderer/webgl/webgltilelayerrenderer.js +++ b/src/ol/renderer/webgl/webgltilelayerrenderer.js @@ -8,11 +8,11 @@ goog.require('goog.object'); goog.require('goog.vec.Mat4'); goog.require('goog.vec.Vec4'); goog.require('goog.webgl'); -goog.require('ol.Extent'); goog.require('ol.Size'); goog.require('ol.Tile'); goog.require('ol.TileRange'); goog.require('ol.TileState'); +goog.require('ol.extent'); goog.require('ol.layer.TileLayer'); goog.require('ol.math'); goog.require('ol.renderer.webgl.Layer'); @@ -129,7 +129,7 @@ ol.renderer.webgl.TileLayer.prototype.renderFrame = var extent; if (tileResolution == view2DState.resolution) { center = this.snapCenterToPixel(center, tileResolution, frameState.size); - extent = ol.Extent.getForView2DAndSize( + extent = ol.extent.getForView2DAndSize( center, tileResolution, view2DState.rotation, frameState.size); } else { extent = frameState.extent; @@ -156,11 +156,10 @@ ol.renderer.webgl.TileLayer.prototype.renderFrame = var origin = tileGrid.getOrigin(z); var minX = origin[0] + tileRange.minX * tileSize.width * tileResolution; var minY = origin[1] + tileRange.minY * tileSize.height * tileResolution; - framebufferExtent = new ol.Extent( - minX, - minY, - minX + framebufferExtentSize.width, - minY + framebufferExtentSize.height); + framebufferExtent = [ + minX, minX + framebufferExtentSize.width, + minY, minY + framebufferExtentSize.height + ]; this.bindFramebuffer(frameState, framebufferDimension); gl.viewport(0, 0, framebufferDimension, framebufferDimension); @@ -200,7 +199,7 @@ ol.renderer.webgl.TileLayer.prototype.renderFrame = tilesToDrawByZ, getTileIfLoaded); var allTilesLoaded = true; - var tmpExtent = new ol.Extent(0, 0, 0, 0); + var tmpExtent = ol.extent.createEmptyExtent(); var tmpTileRange = new ol.TileRange(0, 0, 0, 0); var childTileRange, fullyLoaded, tile, tileState, x, y; for (x = tileRange.minX; x <= tileRange.maxX; ++x) { @@ -240,11 +239,13 @@ ol.renderer.webgl.TileLayer.prototype.renderFrame = goog.array.forEach(zs, function(z) { goog.object.forEach(tilesToDrawByZ[z], function(tile) { var tileExtent = tileGrid.getTileCoordExtent(tile.tileCoord, tmpExtent); - var sx = 2 * tileExtent.getWidth() / framebufferExtentSize.width; - var sy = 2 * tileExtent.getHeight() / framebufferExtentSize.height; - var tx = 2 * (tileExtent.minX - framebufferExtent.minX) / + var sx = + 2 * (tileExtent[1] - tileExtent[0]) / framebufferExtentSize.width; + var sy = + 2 * (tileExtent[3] - tileExtent[2]) / framebufferExtentSize.height; + var tx = 2 * (tileExtent[0] - framebufferExtent[0]) / framebufferExtentSize.width - 1; - var ty = 2 * (tileExtent.minY - framebufferExtent.minY) / + var ty = 2 * (tileExtent[2] - framebufferExtent[2]) / framebufferExtentSize.height - 1; goog.vec.Vec4.setFromValues(u_tileOffset, sx, sy, tx, ty); gl.uniform4fv(this.locations_.u_tileOffset, u_tileOffset); @@ -286,17 +287,17 @@ ol.renderer.webgl.TileLayer.prototype.renderFrame = var texCoordMatrix = this.texCoordMatrix; goog.vec.Mat4.makeIdentity(texCoordMatrix); goog.vec.Mat4.translate(texCoordMatrix, - (center[0] - framebufferExtent.minX) / - (framebufferExtent.maxX - framebufferExtent.minX), - (center[1] - framebufferExtent.minY) / - (framebufferExtent.maxY - framebufferExtent.minY), + (center[0] - framebufferExtent[0]) / + (framebufferExtent[1] - framebufferExtent[0]), + (center[1] - framebufferExtent[2]) / + (framebufferExtent[3] - framebufferExtent[2]), 0); goog.vec.Mat4.rotateZ(texCoordMatrix, view2DState.rotation); goog.vec.Mat4.scale(texCoordMatrix, frameState.size.width * view2DState.resolution / - (framebufferExtent.maxX - framebufferExtent.minX), + (framebufferExtent[1] - framebufferExtent[0]), frameState.size.height * view2DState.resolution / - (framebufferExtent.maxY - framebufferExtent.minY), + (framebufferExtent[3] - framebufferExtent[2]), 1); goog.vec.Mat4.translate(texCoordMatrix, -0.5, diff --git a/src/ol/source/bingmapssource.js b/src/ol/source/bingmapssource.js index 102b720634..7aadac914e 100644 --- a/src/ol/source/bingmapssource.js +++ b/src/ol/source/bingmapssource.js @@ -6,11 +6,11 @@ goog.require('goog.asserts'); goog.require('goog.math'); goog.require('goog.net.Jsonp'); goog.require('ol.Attribution'); -goog.require('ol.Extent'); goog.require('ol.Size'); goog.require('ol.TileCoord'); goog.require('ol.TileRange'); goog.require('ol.TileUrlFunction'); +goog.require('ol.extent'); goog.require('ol.projection'); goog.require('ol.source.ImageTileSource'); goog.require('ol.tilegrid.XYZ'); @@ -129,9 +129,8 @@ ol.source.BingMaps.prototype.handleImageryMetadataResponse = var minZ = coverageArea.zoomMin; var maxZ = coverageArea.zoomMax; var bbox = coverageArea.bbox; - var epsg4326Extent = - new ol.Extent(bbox[1], bbox[0], bbox[3], bbox[2]); - var extent = epsg4326Extent.transform(transform); + var epsg4326Extent = [bbox[1], bbox[3], bbox[0], bbox[2]]; + var extent = ol.extent.transform(epsg4326Extent, transform); var tileRange, z, zKey; for (z = minZ; z <= maxZ; ++z) { zKey = z.toString(); diff --git a/src/ol/source/singleimagewmssource.js b/src/ol/source/singleimagewmssource.js index ec4f9a199d..d0a1ff88f4 100644 --- a/src/ol/source/singleimagewmssource.js +++ b/src/ol/source/singleimagewmssource.js @@ -1,9 +1,9 @@ goog.provide('ol.source.SingleImageWMS'); -goog.require('ol.Extent'); goog.require('ol.Image'); goog.require('ol.ImageUrlFunction'); goog.require('ol.Size'); +goog.require('ol.extent'); goog.require('ol.source.ImageSource'); goog.require('ol.source.wms'); @@ -56,15 +56,14 @@ ol.source.SingleImageWMS.prototype.getImage = var image = this.image_; if (!goog.isNull(image) && image.getResolution() == resolution && - image.getExtent().containsExtent(extent)) { + ol.extent.containsExtent(image.getExtent(), extent)) { return image; } - extent = new ol.Extent(extent.minX, extent.minY, - extent.maxX, extent.maxY); - extent.scaleFromCenter(this.ratio_); - var width = extent.getWidth() / resolution; - var height = extent.getHeight() / resolution; + extent = extent.slice(); + ol.extent.scaleFromCenter(extent, this.ratio_); + var width = (extent[1] - extent[0]) / resolution; + var height = (extent[3] - extent[2]) / resolution; var size = new ol.Size(width, height); this.image_ = this.createImage(extent, resolution, size, projection); diff --git a/src/ol/source/staticimagesource.js b/src/ol/source/staticimagesource.js index 2509d3b526..74dd079a63 100644 --- a/src/ol/source/staticimagesource.js +++ b/src/ol/source/staticimagesource.js @@ -2,6 +2,7 @@ goog.provide('ol.source.StaticImage'); goog.require('ol.Image'); goog.require('ol.ImageUrlFunctionType'); +goog.require('ol.extent'); goog.require('ol.projection'); goog.require('ol.source.ImageSource'); @@ -19,7 +20,7 @@ ol.source.StaticImage = function(options) { var imageExtent = options.imageExtent; var imageSize = options.imageSize; - var imageResolution = imageExtent.getHeight() / imageSize.height; + var imageResolution = (imageExtent[3] - imageExtent[2]) / imageSize.height; var projection = ol.projection.get(options.projection); goog.base(this, { @@ -47,7 +48,7 @@ goog.inherits(ol.source.StaticImage, ol.source.ImageSource); */ ol.source.StaticImage.prototype.getImage = function(extent, resolution, projection) { - if (extent.intersects(this.image_.getExtent())) { + if (ol.extent.intersects(extent, this.image_.getExtent())) { return this.image_; } return null; diff --git a/src/ol/source/tiledwmssource.js b/src/ol/source/tiledwmssource.js index d4d9811e0f..6597c64a4e 100644 --- a/src/ol/source/tiledwmssource.js +++ b/src/ol/source/tiledwmssource.js @@ -4,9 +4,9 @@ goog.provide('ol.source.TiledWMS'); goog.require('goog.array'); goog.require('goog.math'); -goog.require('ol.Extent'); goog.require('ol.TileCoord'); goog.require('ol.TileUrlFunction'); +goog.require('ol.extent'); goog.require('ol.source.ImageTileSource'); goog.require('ol.source.wms'); @@ -56,16 +56,15 @@ ol.source.TiledWMS = function(options) { extent = goog.isDef(extent) ? extent : projectionExtent; if (!goog.isNull(extent) && projection.isGlobal() && - extent.minX === projectionExtent.minX && - extent.maxX === projectionExtent.maxX) { + extent[0] === projectionExtent[0] && + extent[1] === projectionExtent[1]) { var numCols = Math.ceil( - (extent.maxX - extent.minX) / (tileExtent.maxX - tileExtent.minX)); + (extent[1] - extent[0]) / (tileExtent[1] - tileExtent[0])); x = goog.math.modulo(x, numCols); tileExtent = tileGrid.getTileCoordExtent( new ol.TileCoord(tileCoord.z, x, tileCoord.y)); } - // FIXME We shouldn't need a typecast here. - if (!tileExtent.intersects(/** @type {ol.Extent} */ (extent))) { + if (!ol.extent.intersects(tileExtent, extent)) { return null; } return new ol.TileCoord(tileCoord.z, x, tileCoord.y); diff --git a/src/ol/source/tilejsonsource.js b/src/ol/source/tilejsonsource.js index 5abf5b9104..41d39cdfd0 100644 --- a/src/ol/source/tilejsonsource.js +++ b/src/ol/source/tilejsonsource.js @@ -13,10 +13,10 @@ goog.require('goog.asserts'); goog.require('goog.math'); goog.require('goog.net.jsloader'); goog.require('ol.Attribution'); -goog.require('ol.Extent'); goog.require('ol.TileCoord'); goog.require('ol.TileRange'); goog.require('ol.TileUrlFunction'); +goog.require('ol.extent'); goog.require('ol.projection'); goog.require('ol.source.ImageTileSource'); goog.require('ol.tilegrid.XYZ'); @@ -80,10 +80,10 @@ ol.source.TileJSON.prototype.handleTileJSONResponse = function() { var epsg4326Extent, extent; if (goog.isDef(tileJSON.bounds)) { var bounds = tileJSON.bounds; - epsg4326Extent = new ol.Extent( - bounds[0], bounds[1], bounds[2], bounds[3]); - extent = epsg4326Extent.transform(ol.projection.getTransformFromProjections( - epsg4326Projection, this.getProjection())); + epsg4326Extent = [bounds[0], bounds[2], bounds[1], bounds[3]]; + var transform = ol.projection.getTransformFromProjections( + epsg4326Projection, this.getProjection()); + extent = ol.extent.transform(epsg4326Extent, transform); this.setExtent(extent); } else { epsg4326Extent = null; @@ -116,7 +116,7 @@ ol.source.TileJSON.prototype.handleTileJSONResponse = function() { if (!goog.isNull(extent)) { var tileExtent = tileGrid.getTileCoordExtent( new ol.TileCoord(tileCoord.z, x, tileCoord.y)); - if (!tileExtent.intersects(extent)) { + if (!ol.extent.intersects(tileExtent, extent)) { return null; } } diff --git a/src/ol/source/wmssource.js b/src/ol/source/wmssource.js index 68c5cbe026..48c5729c52 100644 --- a/src/ol/source/wmssource.js +++ b/src/ol/source/wmssource.js @@ -34,8 +34,8 @@ ol.source.wms.getUrl = var axisOrientation = projection.getAxisOrientation(); var bboxValues = (wms13 && axisOrientation.substr(0, 2) == 'ne') ? - [extent.minY, extent.minX, extent.maxY, extent.maxX] : - [extent.minX, extent.minY, extent.maxX, extent.maxY]; + [extent[2], extent[0], extent[3], extent[1]] : + [extent[0], extent[2], extent[1], extent[3]]; baseParams['BBOX'] = bboxValues.join(','); return goog.uri.utils.appendParamsFromMap(baseUrl, baseParams); diff --git a/src/ol/source/wmtssource.js b/src/ol/source/wmtssource.js index 44fe980cd2..91fed7ba60 100644 --- a/src/ol/source/wmtssource.js +++ b/src/ol/source/wmtssource.js @@ -6,10 +6,10 @@ goog.require('goog.asserts'); goog.require('goog.math'); goog.require('goog.object'); goog.require('goog.uri.utils'); -goog.require('ol.Extent'); goog.require('ol.TileCoord'); goog.require('ol.TileUrlFunction'); goog.require('ol.TileUrlFunctionType'); +goog.require('ol.extent'); goog.require('ol.projection'); goog.require('ol.source.ImageTileSource'); goog.require('ol.tilegrid.WMTS'); @@ -114,7 +114,7 @@ ol.source.WMTS = function(options) { })); } - var tmpExtent = new ol.Extent(0, 0, 0, 0); + var tmpExtent = ol.extent.createEmptyExtent(); var tmpTileCoord = new ol.TileCoord(0, 0, 0); tileUrlFunction = ol.TileUrlFunction.withTileCoordTransform( function(tileCoord, projection) { @@ -131,18 +131,17 @@ ol.source.WMTS = function(options) { options.extent : projectionExtent; if (!goog.isNull(extent) && projection.isGlobal() && - extent.minX === projectionExtent.minX && - extent.maxX === projectionExtent.maxX) { + extent[0] === projectionExtent[0] && + extent[1] === projectionExtent[1]) { var numCols = Math.ceil( - (extent.maxX - extent.minX) / - (tileExtent.maxX - tileExtent.minX)); + (extent[1] - extent[0]) / (tileExtent[1] - tileExtent[0])); x = goog.math.modulo(x, numCols); tmpTileCoord.z = tileCoord.z; tmpTileCoord.x = x; tmpTileCoord.y = tileCoord.y; tileExtent = tileGrid.getTileCoordExtent(tmpTileCoord, tmpExtent); } - if (!tileExtent.intersects(extent)) { + if (!ol.extent.intersects(tileExtent, extent)) { return null; } return new ol.TileCoord(tileCoord.z, x, y); diff --git a/src/ol/source/xyzsource.js b/src/ol/source/xyzsource.js index fbe84f7f3a..49e366cc76 100644 --- a/src/ol/source/xyzsource.js +++ b/src/ol/source/xyzsource.js @@ -5,11 +5,11 @@ goog.provide('ol.source.XYZOptions'); goog.require('goog.math'); goog.require('ol.Attribution'); -goog.require('ol.Extent'); goog.require('ol.Projection'); goog.require('ol.TileCoord'); goog.require('ol.TileUrlFunction'); goog.require('ol.TileUrlFunctionType'); +goog.require('ol.extent'); goog.require('ol.projection'); goog.require('ol.source.ImageTileSource'); goog.require('ol.tilegrid.XYZ'); @@ -58,10 +58,10 @@ ol.source.XYZ = function(options) { }); // FIXME factor out common code - var extent = options.extent; - if (goog.isDefAndNotNull(extent)) { + if (goog.isDef(options.extent)) { - var tmpExtent = new ol.Extent(0, 0, 0, 0); + var extent = options.extent; + var tmpExtent = ol.extent.createEmptyExtent(); var tmpTileCoord = new ol.TileCoord(0, 0, 0); tileUrlFunction = ol.TileUrlFunction.withTileCoordTransform( function(tileCoord) { @@ -78,8 +78,7 @@ ol.source.XYZ = function(options) { tmpTileCoord.x = x; tmpTileCoord.y = tileCoord.y; var tileExtent = tileGrid.getTileCoordExtent(tmpTileCoord, tmpExtent); - // FIXME we shouldn't need a typecast here - if (!tileExtent.intersects(/** @type {ol.Extent} */ (extent))) { + if (!ol.extent.intersects(tileExtent, extent)) { return null; } return new ol.TileCoord(tileCoord.z, x, y); diff --git a/src/ol/structs/rtree.js b/src/ol/structs/rtree.js index 248ddf0b77..39a0c8c643 100644 --- a/src/ol/structs/rtree.js +++ b/src/ol/structs/rtree.js @@ -1,24 +1,23 @@ goog.provide('ol.structs.RTree'); goog.require('goog.object'); -goog.require('ol.Rectangle'); +goog.require('ol.extent'); /** * @private * @constructor - * @param {number} minX Minimum X. - * @param {number} minY Minimum Y. - * @param {number} maxX Maximum X. - * @param {number} maxY Maximum Y. + * @param {ol.Extent} bounds Extent. * @param {ol.structs.RTreeNode_} parent Parent node. * @param {number} level Level in the tree hierarchy. - * @extends {ol.Rectangle} */ -ol.structs.RTreeNode_ = function(minX, minY, maxX, maxY, parent, level) { +ol.structs.RTreeNode_ = function(bounds, parent, level) { - goog.base(this, minX, minY, maxX, maxY); + /** + * @type {ol.Extent} + */ + this.bounds = bounds; /** * @type {Object} @@ -51,17 +50,16 @@ ol.structs.RTreeNode_ = function(minX, minY, maxX, maxY, parent, level) { this.children = []; }; -goog.inherits(ol.structs.RTreeNode_, ol.Rectangle); /** * Find all objects intersected by a rectangle. - * @param {ol.Rectangle} bounds Bounding box. + * @param {ol.Extent} bounds Bounding box. * @param {Object.} results Target object for results. * @param {string=} opt_type Type for another indexing dimension. */ ol.structs.RTreeNode_.prototype.find = function(bounds, results, opt_type) { - if (this.intersects(bounds) && + if (ol.extent.intersects(this.bounds, bounds) && (!goog.isDef(opt_type) || this.types[opt_type] === true)) { var numChildren = this.children.length; if (numChildren === 0) { @@ -79,11 +77,11 @@ ol.structs.RTreeNode_.prototype.find = function(bounds, results, opt_type) { /** * Find the appropriate node for insertion. - * @param {ol.Rectangle} bounds Bounding box. + * @param {ol.Extent} bounds Bounding box. * @return {ol.structs.RTreeNode_|undefined} Matching node. */ ol.structs.RTreeNode_.prototype.get = function(bounds) { - if (this.intersects(bounds)) { + if (ol.extent.intersects(this.bounds, bounds)) { var numChildren = this.children.length; if (numChildren === 0) { return goog.isNull(this.parent) ? this : this.parent; @@ -102,10 +100,10 @@ ol.structs.RTreeNode_.prototype.get = function(bounds) { /** * Update boxes up to the root to ensure correct bounding - * @param {ol.Rectangle} bounds Bounding box. + * @param {ol.Extent} bounds Bounding box. */ ol.structs.RTreeNode_.prototype.update = function(bounds) { - this.extend(bounds); + ol.extent.extend(this.bounds, bounds); if (!goog.isNull(this.parent)) { this.parent.update(bounds); } @@ -129,15 +127,15 @@ ol.structs.RTreeNode_.prototype.divide = function() { for (var i = 0; i < numChildren; ++i) { child = this.children[i]; if (i % half === 0) { - node = new ol.structs.RTreeNode_(child.minX, child.minY, - child.maxX, child.maxY, this, this.level + 1); + node = new ol.structs.RTreeNode_( + child.bounds.slice(), this, this.level + 1); goog.object.extend(this.types, node.types); this.children.push(node); } child.parent = /** @type {ol.structs.RTreeNode_} */ (node); goog.object.extend(node.types, child.types); node.children.push(child); - node.extend(child); + ol.extent.extend(node.bounds, child.bounds); } }; @@ -153,13 +151,13 @@ ol.structs.RTree = function() { * @type {ol.structs.RTreeNode_} */ this.root_ = new ol.structs.RTreeNode_( - -Infinity, -Infinity, Infinity, Infinity, null, 0); + [-Infinity, Infinity, -Infinity, Infinity], null, 0); }; /** - * @param {ol.Rectangle} bounds Bounding box. + * @param {ol.Extent} bounds Bounding box. * @param {string=} opt_type Type for another indexing dimension. * @return {Object.} Results for the passed bounding box. */ @@ -171,16 +169,14 @@ ol.structs.RTree.prototype.find = function(bounds, opt_type) { /** - * @param {ol.Rectangle} bounds Bounding box. + * @param {ol.Extent} bounds Bounding box. * @param {Object} object Object to store with the passed bounds. * @param {string=} opt_type Type for another indexing dimension. */ ol.structs.RTree.prototype.put = function(bounds, object, opt_type) { var found = this.root_.get(bounds); if (found) { - var node = new ol.structs.RTreeNode_( - bounds.minX, bounds.minY, bounds.maxX, bounds.maxY, - found, found.level + 1); + var node = new ol.structs.RTreeNode_(bounds, found, found.level + 1); node.object = object; node.objectId = goog.getUid(object).toString(); diff --git a/src/ol/tilegrid/tilegrid.js b/src/ol/tilegrid/tilegrid.js index 577f6dec6a..e987c31cae 100644 --- a/src/ol/tilegrid/tilegrid.js +++ b/src/ol/tilegrid/tilegrid.js @@ -5,13 +5,13 @@ goog.provide('ol.tilegrid.TileGrid'); goog.require('goog.array'); goog.require('goog.asserts'); goog.require('ol.Coordinate'); -goog.require('ol.Extent'); goog.require('ol.PixelBounds'); goog.require('ol.Projection'); goog.require('ol.Size'); goog.require('ol.TileCoord'); goog.require('ol.TileRange'); goog.require('ol.array'); +goog.require('ol.extent'); /** @@ -150,10 +150,10 @@ ol.tilegrid.TileGrid.prototype.getPixelBoundsForTileCoordAndResolution = var tileWidth = tileSize.width / scale; var tileHeight = tileSize.height / scale; var minX = Math.round(tileCoord.x * tileWidth); - var minY = Math.round(tileCoord.y * tileHeight); var maxX = Math.round((tileCoord.x + 1) * tileWidth); + var minY = Math.round(tileCoord.y * tileHeight); var maxY = Math.round((tileCoord.y + 1) * tileHeight); - return new ol.PixelBounds(minX, minY, maxX, maxY); + return new ol.PixelBounds(minX, maxX, minY, maxY); }; @@ -205,10 +205,10 @@ ol.tilegrid.TileGrid.prototype.getTileRangeExtent = var resolution = this.getResolution(z); var tileSize = this.getTileSize(z); var minX = origin[0] + tileRange.minX * tileSize.width * resolution; - var minY = origin[1] + tileRange.minY * tileSize.height * resolution; var maxX = origin[0] + (tileRange.maxX + 1) * tileSize.width * resolution; + var minY = origin[1] + tileRange.minY * tileSize.height * resolution; var maxY = origin[1] + (tileRange.maxY + 1) * tileSize.height * resolution; - return new ol.Extent(minX, minY, maxX, maxY); + return ol.extent.createOrUpdate(minX, maxX, minY, maxY, opt_extent); }; @@ -222,13 +222,13 @@ ol.tilegrid.TileGrid.prototype.getTileRangeForExtentAndResolution = function(extent, resolution, opt_tileRange) { var tileCoord = ol.tilegrid.TileGrid.tmpTileCoord_; this.getTileCoordForXYAndResolution_( - extent.minX, extent.minY, resolution, false, tileCoord); + extent[0], extent[2], resolution, false, tileCoord); var minX = tileCoord.x; var minY = tileCoord.y; this.getTileCoordForXYAndResolution_( - extent.maxX, extent.maxY, resolution, true, tileCoord); + extent[1], extent[3], resolution, true, tileCoord); return ol.TileRange.createOrUpdate( - minX, minY, tileCoord.x, tileCoord.y, opt_tileRange); + minX, tileCoord.x, minY, tileCoord.y, opt_tileRange); }; @@ -272,10 +272,10 @@ ol.tilegrid.TileGrid.prototype.getTileCoordExtent = var resolution = this.getResolution(tileCoord.z); var tileSize = this.getTileSize(tileCoord.z); var minX = origin[0] + tileCoord.x * tileSize.width * resolution; - var minY = origin[1] + tileCoord.y * tileSize.height * resolution; var maxX = minX + tileSize.width * resolution; + var minY = origin[1] + tileCoord.y * tileSize.height * resolution; var maxY = minY + tileSize.height * resolution; - return ol.Extent.createOrUpdate(minX, minY, maxX, maxY, opt_extent); + return ol.extent.createOrUpdate(minX, maxX, minY, maxY, opt_extent); }; @@ -401,8 +401,8 @@ ol.tilegrid.createForProjection = function(projection, opt_maxZoom, opt_tileSize) { var projectionExtent = projection.getExtent(); var size = Math.max( - projectionExtent.maxX - projectionExtent.minX, - projectionExtent.maxY - projectionExtent.minY); + projectionExtent[1] - projectionExtent[0], + projectionExtent[3] - projectionExtent[2]); var maxZoom = goog.isDef(opt_maxZoom) ? opt_maxZoom : ol.DEFAULT_MAX_ZOOM; var tileSize = goog.isDef(opt_tileSize) ? @@ -414,7 +414,7 @@ ol.tilegrid.createForProjection = resolutions[z] = size / Math.pow(2, z); } return new ol.tilegrid.TileGrid({ - origin: projectionExtent.getBottomLeft(), + origin: ol.extent.getBottomLeft(projectionExtent), resolutions: resolutions, tileSize: tileSize }); diff --git a/src/ol/tilegrid/xyztilegrid.js b/src/ol/tilegrid/xyztilegrid.js index 036c414640..7be9401599 100644 --- a/src/ol/tilegrid/xyztilegrid.js +++ b/src/ol/tilegrid/xyztilegrid.js @@ -46,8 +46,8 @@ ol.tilegrid.XYZ.prototype.getTileCoordChildTileRange = function(tileCoord, opt_tileRange) { if (tileCoord.z < this.maxZoom_) { return ol.TileRange.createOrUpdate( - tileCoord.x << 1, tileCoord.y << 1, - tileCoord.x + 1 << 1, tileCoord.y + 1 << 1, + tileCoord.x << 1, tileCoord.x + 1 << 1, + tileCoord.y << 1, tileCoord.y + 1 << 1, opt_tileRange); } else { return null; @@ -61,7 +61,7 @@ ol.tilegrid.XYZ.prototype.getTileCoordChildTileRange = ol.tilegrid.XYZ.prototype.forEachTileCoordParentTileRange = function(tileCoord, callback, opt_obj, opt_tileRange) { var tileRange = ol.TileRange.createOrUpdate( - 0, 0, tileCoord.x, tileCoord.y, opt_tileRange); + 0, tileCoord.x, 0, tileCoord.y, opt_tileRange); var z; for (z = tileCoord.z - 1; z >= 0; --z) { tileRange.minX = tileRange.maxX >>= 1; diff --git a/src/ol/tilerange.js b/src/ol/tilerange.js index bace42fe15..69aa7ec556 100644 --- a/src/ol/tilerange.js +++ b/src/ol/tilerange.js @@ -1,7 +1,7 @@ goog.provide('ol.TileRange'); goog.require('goog.asserts'); -goog.require('ol.Rectangle'); +goog.require('ol.Size'); goog.require('ol.TileCoord'); @@ -11,13 +11,12 @@ goog.require('ol.TileCoord'); * by its min/max tile coordinates and is inclusive of coordinates. * * @constructor - * @extends {ol.Rectangle} * @param {number} minX Minimum X. - * @param {number} minY Minimum Y. * @param {number} maxX Maximum X. + * @param {number} minY Minimum Y. * @param {number} maxY Maximum Y. */ -ol.TileRange = function(minX, minY, maxX, maxY) { +ol.TileRange = function(minX, maxX, minY, maxY) { /** * @type {number} @@ -27,12 +26,12 @@ ol.TileRange = function(minX, minY, maxX, maxY) { /** * @type {number} */ - this.minY = minY; + this.maxX = maxX; /** * @type {number} */ - this.maxX = maxX; + this.minY = minY; /** * @type {number} @@ -40,7 +39,6 @@ ol.TileRange = function(minX, minY, maxX, maxY) { this.maxY = maxY; }; -goog.inherits(ol.TileRange, ol.Rectangle); /** @@ -49,15 +47,15 @@ goog.inherits(ol.TileRange, ol.Rectangle); */ ol.TileRange.boundingTileRange = function(var_args) { var tileCoord0 = arguments[0]; - var tileRange = new ol.TileRange(tileCoord0.x, tileCoord0.y, - tileCoord0.x, tileCoord0.y); + var tileRange = new ol.TileRange(tileCoord0.x, tileCoord0.x, + tileCoord0.y, tileCoord0.y); var i, tileCoord; for (i = 1; i < arguments.length; ++i) { tileCoord = arguments[i]; goog.asserts.assert(tileCoord.z == tileCoord0.z); tileRange.minX = Math.min(tileRange.minX, tileCoord.x); - tileRange.minY = Math.min(tileRange.minY, tileCoord.y); tileRange.maxX = Math.max(tileRange.maxX, tileCoord.x); + tileRange.minY = Math.min(tileRange.minY, tileCoord.y); tileRange.maxY = Math.max(tileRange.maxY, tileCoord.y); } return tileRange; @@ -66,21 +64,21 @@ ol.TileRange.boundingTileRange = function(var_args) { /** * @param {number} minX Minimum X. - * @param {number} minY Minimum Y. * @param {number} maxX Maximum X. + * @param {number} minY Minimum Y. * @param {number} maxY Maximum Y. * @param {ol.TileRange|undefined} tileRange TileRange. * @return {ol.TileRange} Tile range. */ -ol.TileRange.createOrUpdate = function(minX, minY, maxX, maxY, tileRange) { +ol.TileRange.createOrUpdate = function(minX, maxX, minY, maxY, tileRange) { if (goog.isDef(tileRange)) { tileRange.minX = minX; - tileRange.minY = minY; tileRange.maxX = maxX; + tileRange.minY = minY; tileRange.maxY = maxY; return tileRange; } else { - return new ol.TileRange(minX, minY, maxX, maxY); + return new ol.TileRange(minX, maxX, minY, maxY); } }; @@ -106,7 +104,35 @@ ol.TileRange.prototype.containsTileRange = function(tileRange) { /** - * @inheritDoc + * @param {ol.TileRange} tileRange Tile range. + * @return {boolean} Equals. + */ +ol.TileRange.prototype.equals = function(tileRange) { + return this.minX == tileRange.minX && this.minY == tileRange.minY && + this.maxX == tileRange.maxX && this.maxY == tileRange.maxY; +}; + + +/** + * @param {ol.TileRange} tileRange Tile range. + */ +ol.TileRange.prototype.extend = function(tileRange) { + if (tileRange.minX < this.minX) { + this.minX = tileRange.minX; + } + if (tileRange.maxX > this.maxX) { + this.maxX = tileRange.maxX; + } + if (tileRange.minY < this.minY) { + this.minY = tileRange.minY; + } + if (tileRange.maxY > this.maxY) { + this.maxY = tileRange.maxY; + } +}; + + +/** * @return {number} Height. */ ol.TileRange.prototype.getHeight = function() { @@ -115,9 +141,28 @@ ol.TileRange.prototype.getHeight = function() { /** - * @inheritDoc + * @return {ol.Size} Size. + */ +ol.TileRange.prototype.getSize = function() { + return new ol.Size(this.getWidth(), this.getHeight()); +}; + + +/** * @return {number} Width. */ ol.TileRange.prototype.getWidth = function() { return this.maxX - this.minX + 1; }; + + +/** + * @param {ol.TileRange} tileRange Tile range. + * @return {boolean} Intersects. + */ +ol.TileRange.prototype.intersects = function(tileRange) { + return this.minX <= tileRange.maxX && + this.maxX >= tileRange.minX && + this.minY <= tileRange.maxY && + this.maxY >= tileRange.minY; +}; diff --git a/src/ol/tileurlfunction.js b/src/ol/tileurlfunction.js index c3057b1649..c2afc86c6e 100644 --- a/src/ol/tileurlfunction.js +++ b/src/ol/tileurlfunction.js @@ -3,8 +3,8 @@ goog.provide('ol.TileUrlFunctionType'); goog.require('goog.array'); goog.require('goog.math'); -goog.require('ol.Extent'); goog.require('ol.TileCoord'); +goog.require('ol.extent'); /** @@ -69,7 +69,7 @@ ol.TileUrlFunction.createFromTileUrlFunctions = function(tileUrlFunctions) { */ ol.TileUrlFunction.createFromParamsFunction = function(baseUrl, params, paramsFunction) { - var tmpExtent = new ol.Extent(0, 0, 0, 0); + var tmpExtent = ol.extent.createEmptyExtent(); return function(tileCoord, projection) { if (goog.isNull(tileCoord)) { return undefined; diff --git a/src/ol/view2d.js b/src/ol/view2d.js index c7b2fc6df2..e377b0a223 100644 --- a/src/ol/view2d.js +++ b/src/ol/view2d.js @@ -6,7 +6,6 @@ goog.provide('ol.View2DProperty'); goog.require('goog.asserts'); goog.require('ol.Constraints'); -goog.require('ol.Extent'); goog.require('ol.IView2D'); goog.require('ol.IView3D'); goog.require('ol.Projection'); @@ -16,6 +15,7 @@ goog.require('ol.RotationConstraintType'); goog.require('ol.Size'); goog.require('ol.View'); goog.require('ol.coordinate'); +goog.require('ol.extent'); goog.require('ol.projection'); @@ -55,8 +55,8 @@ ol.View2D = function(opt_options) { } else if (goog.isDef(options.zoom)) { var projectionExtent = values[ol.View2DProperty.PROJECTION].getExtent(); var size = Math.max( - projectionExtent.maxX - projectionExtent.minX, - projectionExtent.maxY - projectionExtent.minY); + projectionExtent[1] - projectionExtent[0], + projectionExtent[3] - projectionExtent[2]); values[ol.View2DProperty.RESOLUTION] = size / (ol.DEFAULT_TILE_SIZE * Math.pow(2, options.zoom)); } @@ -175,10 +175,10 @@ ol.View2D.prototype.getExtent = function(size) { var center = this.getCenter(); var resolution = this.getResolution(); var minX = center[0] - resolution * size.width / 2; - var minY = center[1] - resolution * size.height / 2; var maxX = center[0] + resolution * size.width / 2; + var minY = center[1] - resolution * size.height / 2; var maxY = center[1] + resolution * size.height / 2; - return new ol.Extent(minX, minY, maxX, maxY); + return [minX, maxX, minY, maxX]; }; @@ -214,8 +214,8 @@ goog.exportProperty( * @return {number} Resolution. */ ol.View2D.prototype.getResolutionForExtent = function(extent, size) { - var xResolution = (extent.maxX - extent.minX) / size.width; - var yResolution = (extent.maxY - extent.minY) / size.height; + var xResolution = (extent[1] - extent[0]) / size.width; + var yResolution = (extent[3] - extent[2]) / size.height; return Math.max(xResolution, yResolution); }; @@ -310,7 +310,7 @@ ol.View2D.prototype.getView3D = function() { * @param {ol.Size} size Box pixel size. */ ol.View2D.prototype.fitExtent = function(extent, size) { - this.setCenter(extent.getCenter()); + this.setCenter(ol.extent.getCenter(extent)); var resolution = this.getResolutionForExtent(extent, size); resolution = this.constrainResolution(resolution, 0, 0); this.setResolution(resolution); @@ -396,8 +396,8 @@ ol.View2D.createResolutionConstraint_ = function(options) { var projectionExtent = ol.projection.createProjection( options.projection, 'EPSG:3857').getExtent(); maxResolution = Math.max( - projectionExtent.maxX - projectionExtent.minX, - projectionExtent.maxY - projectionExtent.minY) / ol.DEFAULT_TILE_SIZE; + projectionExtent[1] - projectionExtent[0], + projectionExtent[3] - projectionExtent[2]) / ol.DEFAULT_TILE_SIZE; } var maxZoom = options.maxZoom; if (!goog.isDef(maxZoom)) { diff --git a/test/spec/ol/extent.test.js b/test/spec/ol/extent.test.js index bb2e8c745b..078f19a645 100644 --- a/test/spec/ol/extent.test.js +++ b/test/spec/ol/extent.test.js @@ -1,129 +1,243 @@ -goog.provide('ol.test.Extent'); +goog.provide('ol.test.extent'); -describe('ol.Extent', function() { + +describe('ol.extent', function() { describe('containsCoordinate', function() { describe('positive', function() { it('returns true', function() { - var extent = new ol.Extent(1, 2, 3, 4); - expect(extent.containsCoordinate([1, 2])).to.be.ok(); - expect(extent.containsCoordinate([1, 3])).to.be.ok(); - expect(extent.containsCoordinate([1, 4])).to.be.ok(); - expect(extent.containsCoordinate([2, 2])).to.be.ok(); - expect(extent.containsCoordinate([2, 3])).to.be.ok(); - expect(extent.containsCoordinate([2, 4])).to.be.ok(); - expect(extent.containsCoordinate([3, 2])).to.be.ok(); - expect(extent.containsCoordinate([3, 3])).to.be.ok(); - expect(extent.containsCoordinate([3, 4])).to.be.ok(); + var extent = [1, 3, 2, 4]; + expect(ol.extent.containsCoordinate(extent, [1, 2])).to.be.ok(); + expect(ol.extent.containsCoordinate(extent, [1, 3])).to.be.ok(); + expect(ol.extent.containsCoordinate(extent, [1, 4])).to.be.ok(); + expect(ol.extent.containsCoordinate(extent, [2, 2])).to.be.ok(); + expect(ol.extent.containsCoordinate(extent, [2, 3])).to.be.ok(); + expect(ol.extent.containsCoordinate(extent, [2, 4])).to.be.ok(); + expect(ol.extent.containsCoordinate(extent, [3, 2])).to.be.ok(); + expect(ol.extent.containsCoordinate(extent, [3, 3])).to.be.ok(); + expect(ol.extent.containsCoordinate(extent, [3, 4])).to.be.ok(); }); }); describe('negative', function() { it('returns false', function() { - var extent = new ol.Extent(1, 2, 3, 4); - expect(extent.containsCoordinate([0, 1])).to.not.be(); - expect(extent.containsCoordinate([0, 2])).to.not.be(); - expect(extent.containsCoordinate([0, 3])).to.not.be(); - expect(extent.containsCoordinate([0, 4])).to.not.be(); - expect(extent.containsCoordinate([0, 5])).to.not.be(); - expect(extent.containsCoordinate([1, 1])).to.not.be(); - expect(extent.containsCoordinate([1, 5])).to.not.be(); - expect(extent.containsCoordinate([2, 1])).to.not.be(); - expect(extent.containsCoordinate([2, 5])).to.not.be(); - expect(extent.containsCoordinate([3, 1])).to.not.be(); - expect(extent.containsCoordinate([3, 5])).to.not.be(); - expect(extent.containsCoordinate([4, 1])).to.not.be(); - expect(extent.containsCoordinate([4, 2])).to.not.be(); - expect(extent.containsCoordinate([4, 3])).to.not.be(); - expect(extent.containsCoordinate([4, 4])).to.not.be(); - expect(extent.containsCoordinate([4, 5])).to.not.be(); + var extent = [1, 3, 2, 4]; + expect(ol.extent.containsCoordinate(extent, [0, 1])).to.not.be(); + expect(ol.extent.containsCoordinate(extent, [0, 2])).to.not.be(); + expect(ol.extent.containsCoordinate(extent, [0, 3])).to.not.be(); + expect(ol.extent.containsCoordinate(extent, [0, 4])).to.not.be(); + expect(ol.extent.containsCoordinate(extent, [0, 5])).to.not.be(); + expect(ol.extent.containsCoordinate(extent, [1, 1])).to.not.be(); + expect(ol.extent.containsCoordinate(extent, [1, 5])).to.not.be(); + expect(ol.extent.containsCoordinate(extent, [2, 1])).to.not.be(); + expect(ol.extent.containsCoordinate(extent, [2, 5])).to.not.be(); + expect(ol.extent.containsCoordinate(extent, [3, 1])).to.not.be(); + expect(ol.extent.containsCoordinate(extent, [3, 5])).to.not.be(); + expect(ol.extent.containsCoordinate(extent, [4, 1])).to.not.be(); + expect(ol.extent.containsCoordinate(extent, [4, 2])).to.not.be(); + expect(ol.extent.containsCoordinate(extent, [4, 3])).to.not.be(); + expect(ol.extent.containsCoordinate(extent, [4, 4])).to.not.be(); + expect(ol.extent.containsCoordinate(extent, [4, 5])).to.not.be(); }); }); }); + describe('getCenter', function() { + it('returns the expected center', function() { + var extent = [1, 3, 2, 4]; + var center = ol.extent.getCenter(extent); + expect(center[0]).to.eql(2); + expect(center[1]).to.eql(3); + }); + }); + + describe('getForView2DAndSize', function() { + + it('works for a unit square', function() { + var extent = ol.extent.getForView2DAndSize( + [0, 0], 1, 0, new ol.Size(1, 1)); + expect(extent[0]).to.be(-0.5); + expect(extent[1]).to.be(0.5); + expect(extent[2]).to.be(-0.5); + expect(extent[3]).to.be(0.5); + }); + + it('works for center', function() { + var extent = ol.extent.getForView2DAndSize( + [5, 10], 1, 0, new ol.Size(1, 1)); + expect(extent[0]).to.be(4.5); + expect(extent[1]).to.be(5.5); + expect(extent[2]).to.be(9.5); + expect(extent[3]).to.be(10.5); + }); + + it('works for rotation', function() { + var extent = ol.extent.getForView2DAndSize( + [0, 0], 1, Math.PI / 4, new ol.Size(1, 1)); + expect(extent[0]).to.roughlyEqual(-Math.sqrt(0.5), 1e-9); + expect(extent[1]).to.roughlyEqual(Math.sqrt(0.5), 1e-9); + expect(extent[2]).to.roughlyEqual(-Math.sqrt(0.5), 1e-9); + expect(extent[3]).to.roughlyEqual(Math.sqrt(0.5), 1e-9); + }); + + it('works for resolution', function() { + var extent = ol.extent.getForView2DAndSize( + [0, 0], 2, 0, new ol.Size(1, 1)); + expect(extent[0]).to.be(-1); + expect(extent[1]).to.be(1); + expect(extent[2]).to.be(-1); + expect(extent[3]).to.be(1); + }); + + it('works for size', function() { + var extent = ol.extent.getForView2DAndSize( + [0, 0], 1, 0, new ol.Size(10, 5)); + expect(extent[0]).to.be(-5); + expect(extent[1]).to.be(5); + expect(extent[2]).to.be(-2.5); + expect(extent[3]).to.be(2.5); + }); + + }); + + describe('getSize', function() { + it('returns the expected size', function() { + var extent = [0, 2, 1, 4]; + var size = ol.extent.getSize(extent); + expect(size.width).to.eql(2); + expect(size.height).to.eql(3); + }); + }); + + describe('intersect', function() { + + var extent1; + + beforeEach(function() { + extent1 = [50, 100, 50, 100]; + }); + + it('returns the expected value', function() { + expect(ol.extent.intersects(extent1, extent1)).to.be(true); + expect(ol.extent.intersects(extent1, [20, 80, 20, 80])).to.be(true); + expect(ol.extent.intersects(extent1, [20, 80, 50, 100])).to.be(true); + expect(ol.extent.intersects(extent1, [20, 80, 80, 120])).to.be(true); + expect(ol.extent.intersects(extent1, [50, 100, 20, 80])).to.be(true); + expect(ol.extent.intersects(extent1, [50, 100, 80, 120])).to.be(true); + expect(ol.extent.intersects(extent1, [80, 120, 20, 80])).to.be(true); + expect(ol.extent.intersects(extent1, [80, 120, 50, 100])).to.be(true); + expect(ol.extent.intersects(extent1, [80, 120, 80, 120])).to.be(true); + expect(ol.extent.intersects(extent1, [20, 120, 20, 120])).to.be(true); + expect(ol.extent.intersects(extent1, [70, 80, 70, 80])).to.be(true); + expect(ol.extent.intersects(extent1, [10, 30, 10, 30])).to.be(false); + expect(ol.extent.intersects(extent1, [30, 70, 10, 30])).to.be(false); + expect(ol.extent.intersects(extent1, [50, 100, 10, 30])).to.be(false); + expect(ol.extent.intersects(extent1, [80, 120, 10, 30])).to.be(false); + expect(ol.extent.intersects(extent1, [120, 140, 10, 30])).to.be(false); + expect(ol.extent.intersects(extent1, [10, 30, 30, 70])).to.be(false); + expect(ol.extent.intersects(extent1, [120, 140, 30, 70])).to.be(false); + expect(ol.extent.intersects(extent1, [10, 30, 50, 100])).to.be(false); + expect(ol.extent.intersects(extent1, [120, 140, 50, 100])).to.be(false); + expect(ol.extent.intersects(extent1, [10, 30, 80, 120])).to.be(false); + expect(ol.extent.intersects(extent1, [120, 140, 80, 120])).to.be(false); + expect(ol.extent.intersects(extent1, [10, 30, 120, 140])).to.be(false); + expect(ol.extent.intersects(extent1, [30, 70, 120, 140])).to.be(false); + expect(ol.extent.intersects(extent1, [50, 100, 120, 140])).to.be(false); + expect(ol.extent.intersects(extent1, [80, 120, 120, 140])).to.be(false); + expect(ol.extent.intersects(extent1, [120, 140, 120, 140])).to.be(false); + }); + }); + + describe('normalize', function() { + it('returns the expected coordinate', function() { + var extent = [0, 2, 1, 3]; + var coordinate; + + coordinate = ol.extent.normalize(extent, [1, 2]); + expect(coordinate[0]).to.eql(0.5); + expect(coordinate[1]).to.eql(0.5); + + coordinate = ol.extent.normalize(extent, [0, 3]); + expect(coordinate[0]).to.eql(0); + expect(coordinate[1]).to.eql(1); + + coordinate = ol.extent.normalize(extent, [2, 1]); + expect(coordinate[0]).to.eql(1); + expect(coordinate[1]).to.eql(0); + + coordinate = ol.extent.normalize(extent, [0, 0]); + expect(coordinate[0]).to.eql(0); + expect(coordinate[1]).to.eql(-0.5); + + coordinate = ol.extent.normalize(extent, [-1, 1]); + expect(coordinate[0]).to.eql(-0.5); + expect(coordinate[1]).to.eql(0); + }); + }); + + describe('scaleFromCenter', function() { + it('scales the extent from its center', function() { + var extent = [1, 3, 1, 3]; + ol.extent.scaleFromCenter(extent, 2); + expect(extent[0]).to.eql(0); + expect(extent[1]).to.eql(4); + expect(extent[2]).to.eql(0); + expect(extent[3]).to.eql(4); + }); + }); + + describe('toString', function() { + it('returns the expected string', function() { + var extent = [0, 2, 1, 3]; + expect(ol.extent.toString(extent)).to.eql('(0, 2, 1, 3)'); + }); + }); + describe('transform', function() { it('does transform', function() { var transformFn = ol.projection.getTransform('EPSG:4326', 'EPSG:3857'); - var sourceExtent = new ol.Extent(-15, -30, 45, 60); - var destinationExtent = sourceExtent.transform(transformFn); + var sourceExtent = [-15, 45, -30, 60]; + var destinationExtent = ol.extent.transform(sourceExtent, transformFn); expect(destinationExtent).not.to.be(undefined); expect(destinationExtent).not.to.be(null); // FIXME check values with third-party tool - expect(destinationExtent.minX).to.roughlyEqual(-1669792.3618991037, 1e-9); - expect(destinationExtent.minY).to.roughlyEqual(-3503549.843504376, 1e-8); - expect(destinationExtent.maxX).to.roughlyEqual(5009377.085697311, 1e-9); - expect(destinationExtent.maxY).to.roughlyEqual(8399737.889818361, 1e-9); + expect(destinationExtent[0]).to.roughlyEqual(-1669792.3618991037, 1e-9); + expect(destinationExtent[1]).to.roughlyEqual(5009377.085697311, 1e-9); + expect(destinationExtent[2]).to.roughlyEqual(-3503549.843504376, 1e-8); + expect(destinationExtent[3]).to.roughlyEqual(8399737.889818361, 1e-9); }); it('takes arbitrary function', function() { - var transformFn = function(input) { - return [-input[0], -input[1], -input[2], -input[3]]; + var transformFn = function(input, output, opt_dimension) { + var dimension = goog.isDef(opt_dimension) ? opt_dimension : 2; + if (!goog.isDef(output)) { + output = new Array(input.length); + } + var n = input.length; + var i; + for (i = 0; i < n; i += dimension) { + output[i] = -input[i]; + output[i + 1] = -input[i + 1]; + } + return output; }; - var sourceExtent = new ol.Extent(-15, -30, 45, 60); - var destinationExtent = sourceExtent.transform(transformFn); + var sourceExtent = [-15, 45, -30, 60]; + var destinationExtent = ol.extent.transform(sourceExtent, transformFn); expect(destinationExtent).not.to.be(undefined); expect(destinationExtent).not.to.be(null); - expect(destinationExtent.minX).to.be(-45); - expect(destinationExtent.minY).to.be(-60); - expect(destinationExtent.maxX).to.be(15); - expect(destinationExtent.maxY).to.be(30); - }); - - }); - - describe('getForView2DAndSize', function() { - - it('works for a unit square', function() { - var extent = ol.Extent.getForView2DAndSize( - [0, 0], 1, 0, new ol.Size(1, 1)); - expect(extent.minX).to.be(-0.5); - expect(extent.minY).to.be(-0.5); - expect(extent.maxX).to.be(0.5); - expect(extent.maxY).to.be(0.5); - }); - - it('works for center', function() { - var extent = ol.Extent.getForView2DAndSize( - [5, 10], 1, 0, new ol.Size(1, 1)); - expect(extent.minX).to.be(4.5); - expect(extent.minY).to.be(9.5); - expect(extent.maxX).to.be(5.5); - expect(extent.maxY).to.be(10.5); - }); - - it('works for rotation', function() { - var extent = ol.Extent.getForView2DAndSize( - [0, 0], 1, Math.PI / 4, new ol.Size(1, 1)); - expect(extent.minX).to.roughlyEqual(-Math.sqrt(0.5), 1e-9); - expect(extent.minY).to.roughlyEqual(-Math.sqrt(0.5), 1e-9); - expect(extent.maxX).to.roughlyEqual(Math.sqrt(0.5), 1e-9); - expect(extent.maxY).to.roughlyEqual(Math.sqrt(0.5), 1e-9); - }); - - it('works for resolution', function() { - var extent = ol.Extent.getForView2DAndSize( - [0, 0], 2, 0, new ol.Size(1, 1)); - expect(extent.minX).to.be(-1); - expect(extent.minY).to.be(-1); - expect(extent.maxX).to.be(1); - expect(extent.maxY).to.be(1); - }); - - it('works for size', function() { - var extent = ol.Extent.getForView2DAndSize( - [0, 0], 1, 0, new ol.Size(10, 5)); - expect(extent.minX).to.be(-5); - expect(extent.minY).to.be(-2.5); - expect(extent.maxX).to.be(5); - expect(extent.maxY).to.be(2.5); + expect(destinationExtent[0]).to.be(-45); + expect(destinationExtent[1]).to.be(15); + expect(destinationExtent[2]).to.be(-60); + expect(destinationExtent[3]).to.be(30); }); }); }); -goog.require('ol.Extent'); + goog.require('ol.Size'); +goog.require('ol.extent'); goog.require('ol.projection'); diff --git a/test/spec/ol/filter/extentfilter.test.js b/test/spec/ol/filter/extentfilter.test.js index b6148e506e..835d4411d8 100644 --- a/test/spec/ol/filter/extentfilter.test.js +++ b/test/spec/ol/filter/extentfilter.test.js @@ -6,7 +6,7 @@ describe('ol.filter.Extent', function() { var extent, filter; beforeEach(function() { - extent = new ol.Extent(0, 0, 45, 90); + extent = [0, 45, 0, 90]; filter = new ol.filter.Extent(extent); }); @@ -31,7 +31,6 @@ describe('ol.filter.Extent', function() { }); -goog.require('ol.Extent'); goog.require('ol.Feature'); goog.require('ol.filter.Extent'); goog.require('ol.geom.Point'); diff --git a/test/spec/ol/geom/geometrycollection.test.js b/test/spec/ol/geom/geometrycollection.test.js index 16dd937b03..d9c1616c33 100644 --- a/test/spec/ol/geom/geometrycollection.test.js +++ b/test/spec/ol/geom/geometrycollection.test.js @@ -62,10 +62,10 @@ describe('ol.geom.GeometryCollection', function() { var line = new ol.geom.LineString([[1, 20], [30, 40]]); var multi = new ol.geom.GeometryCollection([point, line]); var bounds = multi.getBounds(); - expect(bounds.minX).to.be(1); - expect(bounds.minY).to.be(2); - expect(bounds.maxX).to.be(30); - expect(bounds.maxY).to.be(40); + expect(bounds[0]).to.be(1); + expect(bounds[1]).to.be(30); + expect(bounds[2]).to.be(2); + expect(bounds[3]).to.be(40); }); }); diff --git a/test/spec/ol/geom/linestring.test.js b/test/spec/ol/geom/linestring.test.js index 7c66f986b8..22e7c16d84 100644 --- a/test/spec/ol/geom/linestring.test.js +++ b/test/spec/ol/geom/linestring.test.js @@ -45,10 +45,10 @@ describe('ol.geom.LineString', function() { it('returns the bounding extent', function() { var line = new ol.geom.LineString([[10, 20], [20, 30], [30, 40]]); var bounds = line.getBounds(); - expect(bounds.minX).to.be(10); - expect(bounds.minY).to.be(20); - expect(bounds.maxX).to.be(30); - expect(bounds.maxY).to.be(40); + expect(bounds[0]).to.be(10); + expect(bounds[1]).to.be(30); + expect(bounds[2]).to.be(20); + expect(bounds[3]).to.be(40); }); }); diff --git a/test/spec/ol/geom/multilinestring.test.js b/test/spec/ol/geom/multilinestring.test.js index 3b1ea32db8..a63f6fa64f 100644 --- a/test/spec/ol/geom/multilinestring.test.js +++ b/test/spec/ol/geom/multilinestring.test.js @@ -60,10 +60,10 @@ describe('ol.geom.MultiLineString', function() { [[10, 20], [30, 40]], [[20, 30], [40, 50]]]); var bounds = multi.getBounds(); - expect(bounds.minX).to.be(10); - expect(bounds.minY).to.be(20); - expect(bounds.maxX).to.be(40); - expect(bounds.maxY).to.be(50); + expect(bounds[0]).to.be(10); + expect(bounds[1]).to.be(40); + expect(bounds[2]).to.be(20); + expect(bounds[3]).to.be(50); }); }); diff --git a/test/spec/ol/geom/multipoint.test.js b/test/spec/ol/geom/multipoint.test.js index 6e4b4fa0e7..c1b1f7098f 100644 --- a/test/spec/ol/geom/multipoint.test.js +++ b/test/spec/ol/geom/multipoint.test.js @@ -50,10 +50,10 @@ describe('ol.geom.MultiPoint', function() { it('returns the bounding extent', function() { var multi = new ol.geom.MultiPoint([[10, 20], [30, 40]]); var bounds = multi.getBounds(); - expect(bounds.minX).to.be(10); - expect(bounds.minY).to.be(20); - expect(bounds.maxX).to.be(30); - expect(bounds.maxY).to.be(40); + expect(bounds[0]).to.be(10); + expect(bounds[1]).to.be(30); + expect(bounds[2]).to.be(20); + expect(bounds[3]).to.be(40); }); }); diff --git a/test/spec/ol/geom/multipolygon.test.js b/test/spec/ol/geom/multipolygon.test.js index a0a300b1a6..66acc83f1a 100644 --- a/test/spec/ol/geom/multipolygon.test.js +++ b/test/spec/ol/geom/multipolygon.test.js @@ -63,10 +63,10 @@ describe('ol.geom.MultiPolygon', function() { [outer1, inner1a, inner1b], [outer2]]); var bounds = multi.getBounds(); - expect(bounds.minX).to.be(0); - expect(bounds.minY).to.be(0); - expect(bounds.maxX).to.be(20); - expect(bounds.maxY).to.be(50); + expect(bounds[0]).to.be(0); + expect(bounds[1]).to.be(20); + expect(bounds[2]).to.be(0); + expect(bounds[3]).to.be(50); }); }); diff --git a/test/spec/ol/geom/point.test.js b/test/spec/ol/geom/point.test.js index 9e5093fdee..1b00029a7e 100644 --- a/test/spec/ol/geom/point.test.js +++ b/test/spec/ol/geom/point.test.js @@ -47,10 +47,10 @@ describe('ol.geom.Point', function() { it('returns the bounding extent', function() { var point = new ol.geom.Point([10, 20]); var bounds = point.getBounds(); - expect(bounds.minX).to.be(10); - expect(bounds.minY).to.be(20); - expect(bounds.maxX).to.be(10); - expect(bounds.maxY).to.be(20); + expect(bounds[0]).to.be(10); + expect(bounds[1]).to.be(10); + expect(bounds[2]).to.be(20); + expect(bounds[3]).to.be(20); }); }); diff --git a/test/spec/ol/geom/polygon.test.js b/test/spec/ol/geom/polygon.test.js index 4871a9536e..ea18f84339 100644 --- a/test/spec/ol/geom/polygon.test.js +++ b/test/spec/ol/geom/polygon.test.js @@ -64,10 +64,10 @@ describe('ol.geom.Polygon', function() { it('returns the bounding extent', function() { var poly = new ol.geom.Polygon([outer, inner1, inner2]); var bounds = poly.getBounds(); - expect(bounds.minX).to.be(0); - expect(bounds.minY).to.be(0); - expect(bounds.maxX).to.be(10); - expect(bounds.maxY).to.be(10); + expect(bounds[0]).to.be(0); + expect(bounds[1]).to.be(10); + expect(bounds[2]).to.be(0); + expect(bounds[3]).to.be(10); }); }); diff --git a/test/spec/ol/layer/vectorlayer.test.js b/test/spec/ol/layer/vectorlayer.test.js index 7e15b4c622..598213b2ed 100644 --- a/test/spec/ol/layer/vectorlayer.test.js +++ b/test/spec/ol/layer/vectorlayer.test.js @@ -51,7 +51,7 @@ describe('ol.layer.Vector', function() { }); var geomFilter = new ol.filter.Geometry(ol.geom.GeometryType.LINESTRING); - var extentFilter = new ol.filter.Extent(new ol.Extent(16, 48, 16.3, 48.3)); + var extentFilter = new ol.filter.Extent([16, 16.3, 48, 48.3]); it('can filter by geometry type using its GeometryType index', function() { sinon.spy(geomFilter, 'applies'); @@ -177,7 +177,6 @@ describe('ol.layer.Vector', function() { }); goog.require('ol.Expression'); -goog.require('ol.Extent'); goog.require('ol.Feature'); goog.require('ol.filter.Extent'); goog.require('ol.filter.Geometry'); diff --git a/test/spec/ol/parser/geojson.test.js b/test/spec/ol/parser/geojson.test.js index a601b9db0c..053370ad2d 100644 --- a/test/spec/ol/parser/geojson.test.js +++ b/test/spec/ol/parser/geojson.test.js @@ -153,8 +153,8 @@ describe('ol.parser.GeoJSON', function() { expect(first.get('name')).to.be('Afghanistan'); var firstGeom = first.getGeometry(); expect(firstGeom).to.be.a(ol.geom.Polygon); - expect(firstGeom.getBounds().equals( - new ol.Extent(60.52843, 29.318572, 75.158028, 38.486282))) + expect(ol.extent.equals(firstGeom.getBounds(), + [60.52843, 75.158028, 29.318572, 38.486282])) .to.be(true); var last = result[178]; @@ -162,8 +162,8 @@ describe('ol.parser.GeoJSON', function() { expect(last.get('name')).to.be('Zimbabwe'); var lastGeom = last.getGeometry(); expect(lastGeom).to.be.a(ol.geom.Polygon); - expect(lastGeom.getBounds().equals( - new ol.Extent(25.264226, -22.271612, 32.849861, -15.507787))) + expect(ol.extent.equals(lastGeom.getBounds(), + [25.264226, 32.849861, -22.271612, -15.507787])) .to.be(true); done(); }); @@ -200,8 +200,8 @@ describe('ol.parser.GeoJSON', function() { expect(first.get('name')).to.be('Afghanistan'); var firstGeom = first.getGeometry(); expect(firstGeom).to.be.a(ol.geom.Polygon); - expect(firstGeom.getBounds().equals( - new ol.Extent(60.52843, 29.318572, 75.158028, 38.486282))) + expect(ol.extent.equals(firstGeom.getBounds(), + [60.52843, 75.158028, 29.318572, 38.486282])) .to.be(true); var last = result[178]; @@ -209,8 +209,8 @@ describe('ol.parser.GeoJSON', function() { expect(last.get('name')).to.be('Zimbabwe'); var lastGeom = last.getGeometry(); expect(lastGeom).to.be.a(ol.geom.Polygon); - expect(lastGeom.getBounds().equals( - new ol.Extent(25.264226, -22.271612, 32.849861, -15.507787))) + expect(ol.extent.equals(lastGeom.getBounds(), + [25.264226, 32.849861, -22.271612, -15.507787])) .to.be(true); }); }); @@ -219,8 +219,8 @@ describe('ol.parser.GeoJSON', function() { }); -goog.require('ol.Extent'); goog.require('ol.Feature'); +goog.require('ol.extent'); goog.require('ol.geom.LinearRing'); goog.require('ol.geom.LineString'); goog.require('ol.geom.Point'); diff --git a/test/spec/ol/parser/ogc/wmtscapabilities_v1_0_0.test.js b/test/spec/ol/parser/ogc/wmtscapabilities_v1_0_0.test.js index 29b0159470..e18f1a5f54 100644 --- a/test/spec/ol/parser/ogc/wmtscapabilities_v1_0_0.test.js +++ b/test/spec/ol/parser/ogc/wmtscapabilities_v1_0_0.test.js @@ -99,11 +99,11 @@ describe('ol.parser.ogc.wmtscapabilities_v1_0_0', function() { expect(layer.styles[1].legend).to.be(undefined); expect(layer.tileMatrixSetLinks.length).to.eql(1); expect(layer.tileMatrixSetLinks[0].tileMatrixSet).to.eql('BigWorld'); - expect(wgs84Bbox instanceof ol.Extent).to.be.ok(); - expect(wgs84Bbox.minX).to.eql(-180.0); - expect(wgs84Bbox.maxX).to.eql(180.0); - expect(wgs84Bbox.minY).to.eql(-90.0); - expect(wgs84Bbox.maxY).to.eql(90.0); + expect(wgs84Bbox).to.be.an(Array); + expect(wgs84Bbox[0]).to.eql(-180.0); + expect(wgs84Bbox[1]).to.eql(180.0); + expect(wgs84Bbox[2]).to.eql(-90.0); + expect(wgs84Bbox[3]).to.eql(90.0); expect(layer.resourceUrls.hasOwnProperty('tile')).to.be.ok(); var format = 'image/png'; expect(layer.resourceUrls.tile.hasOwnProperty(format)).to.be.ok(); @@ -178,5 +178,4 @@ describe('ol.parser.ogc.wmtscapabilities_v1_0_0', function() { }); goog.require('goog.net.XhrIo'); -goog.require('ol.Extent'); goog.require('ol.parser.ogc.WMTSCapabilities'); diff --git a/test/spec/ol/projection/projection.test.js b/test/spec/ol/projection/projection.test.js index 1f45a8bcc7..c52ac5f684 100644 --- a/test/spec/ol/projection/projection.test.js +++ b/test/spec/ol/projection/projection.test.js @@ -297,7 +297,7 @@ describe('ol.projection', function() { describe('ol.projection.removeTransform()', function() { - var extent = new ol.Extent(-180, -90, 180, 90); + var extent = [180, 180, -90, 90]; var units = ol.ProjectionUnits.DEGREES; it('removes functions cached by addTransform', function() { @@ -340,8 +340,7 @@ describe('ol.projection', function() { }); it('returns a configured projection', function() { - var extent = new ol.Extent( - 485869.5728, 76443.1884, 837076.5648, 299941.7864); + var extent = [485869.5728, 837076.5648, 76443.1884, 299941.7864]; var epsg21781 = ol.projection.configureProj4jsProjection({ code: 'EPSG:21781', extent: extent @@ -358,7 +357,6 @@ describe('ol.projection', function() { goog.require('goog.array'); goog.require('goog.asserts.AssertionError'); -goog.require('ol.Extent'); goog.require('ol.Projection'); goog.require('ol.ProjectionUnits'); goog.require('ol.projection'); diff --git a/test/spec/ol/rectangle.test.js b/test/spec/ol/rectangle.test.js deleted file mode 100644 index 04bae55722..0000000000 --- a/test/spec/ol/rectangle.test.js +++ /dev/null @@ -1,125 +0,0 @@ -goog.provide('ol.test.Rectangle'); - -describe('ol.Rectangle', function() { - - describe('getCenter', function() { - it('returns the expected center', function() { - var rectangle = new ol.Rectangle(1, 2, 3, 4); - var center = rectangle.getCenter(); - expect(center[0]).to.eql(2); - expect(center[1]).to.eql(3); - }); - }); - - describe('intersect', function() { - - var rectangle1; - - beforeEach(function() { - rectangle1 = new ol.Rectangle(50, 50, 100, 100); - }); - - it('returns the expected value', function() { - expect(rectangle1).to.intersect(rectangle1); - expect(rectangle1).to.intersect(new ol.Rectangle(20, 20, 80, 80)); - expect(rectangle1).to.intersect(new ol.Rectangle(20, 50, 80, 100)); - expect(rectangle1).to.intersect(new ol.Rectangle(20, 80, 80, 120)); - expect(rectangle1).to.intersect(new ol.Rectangle(50, 20, 100, 80)); - expect(rectangle1).to.intersect(new ol.Rectangle(50, 80, 100, 120)); - expect(rectangle1).to.intersect(new ol.Rectangle(80, 20, 120, 80)); - expect(rectangle1).to.intersect(new ol.Rectangle(80, 50, 120, 100)); - expect(rectangle1).to.intersect(new ol.Rectangle(80, 80, 120, 120)); - expect(rectangle1).to.intersect(new ol.Rectangle(20, 20, 120, 120)); - expect(rectangle1).to.intersect(new ol.Rectangle(70, 70, 80, 80)); - expect(rectangle1).to.not.intersect( - new ol.Rectangle(10, 10, 30, 30)); - expect(rectangle1).to.not.intersect( - new ol.Rectangle(30, 10, 70, 30)); - expect(rectangle1).to.not.intersect( - new ol.Rectangle(50, 10, 100, 30)); - expect(rectangle1).to.not.intersect( - new ol.Rectangle(80, 10, 120, 30)); - expect(rectangle1).to.not.intersect( - new ol.Rectangle(120, 10, 140, 30)); - expect(rectangle1).to.not.intersect( - new ol.Rectangle(10, 30, 30, 70)); - expect(rectangle1).to.not.intersect( - new ol.Rectangle(120, 30, 140, 70)); - expect(rectangle1).to.not.intersect( - new ol.Rectangle(10, 50, 30, 100)); - expect(rectangle1).to.not.intersect( - new ol.Rectangle(120, 50, 140, 100)); - expect(rectangle1).to.not.intersect( - new ol.Rectangle(10, 80, 30, 120)); - expect(rectangle1).to.not.intersect( - new ol.Rectangle(120, 80, 140, 120)); - expect(rectangle1).to.not.intersect( - new ol.Rectangle(10, 120, 30, 140)); - expect(rectangle1).to.not.intersect( - new ol.Rectangle(30, 120, 70, 140)); - expect(rectangle1).to.not.intersect( - new ol.Rectangle(50, 120, 100, 140)); - expect(rectangle1).to.not.intersect( - new ol.Rectangle(80, 120, 120, 140)); - expect(rectangle1).to.not.intersect( - new ol.Rectangle(120, 120, 140, 140)); - }); - }); - - describe('getSize', function() { - it('returns the expected size', function() { - var rectangle = new ol.Rectangle(0, 1, 2, 4); - var size = rectangle.getSize(); - expect(size.width).to.eql(2); - expect(size.height).to.eql(3); - }); - }); - - describe('normalize', function() { - it('returns the expected coordinate', function() { - var rectangle = new ol.Rectangle(0, 1, 2, 3); - var coordinate; - - coordinate = rectangle.normalize([1, 2]); - expect(coordinate[0]).to.eql(0.5); - expect(coordinate[1]).to.eql(0.5); - - coordinate = rectangle.normalize([0, 3]); - expect(coordinate[0]).to.eql(0); - expect(coordinate[1]).to.eql(1); - - coordinate = rectangle.normalize([2, 1]); - expect(coordinate[0]).to.eql(1); - expect(coordinate[1]).to.eql(0); - - coordinate = rectangle.normalize([0, 0]); - expect(coordinate[0]).to.eql(0); - expect(coordinate[1]).to.eql(-0.5); - - coordinate = rectangle.normalize([-1, 1]); - expect(coordinate[0]).to.eql(-0.5); - expect(coordinate[1]).to.eql(0); - }); - }); - - describe('toString', function() { - it('returns the expected string', function() { - var rectangle = new ol.Rectangle(0, 1, 2, 3); - expect(rectangle.toString()).to.eql('(0, 1, 2, 3)'); - }); - }); - - describe('scaleFromCenter', function() { - it('scales the extent from its center', function() { - var rectangle = new ol.Rectangle(1, 1, 3, 3); - rectangle.scaleFromCenter(2); - expect(rectangle.minX).to.eql(0); - expect(rectangle.minY).to.eql(0); - expect(rectangle.maxX).to.eql(4); - expect(rectangle.maxY).to.eql(4); - }); - }); - -}); - -goog.require('ol.Rectangle'); diff --git a/test/spec/ol/renderer/webgl/webglimagelayerrenderer.test.js b/test/spec/ol/renderer/webgl/webglimagelayerrenderer.test.js index 7bc05e6a12..21bbafab9f 100644 --- a/test/spec/ol/renderer/webgl/webglimagelayerrenderer.test.js +++ b/test/spec/ol/renderer/webgl/webglimagelayerrenderer.test.js @@ -18,7 +18,7 @@ describe('ol.renderer.webgl.ImageLayer', function() { }); var layer = new ol.layer.ImageLayer({ source: new ol.source.ImageSource({ - extent: new ol.Extent(0, 0, 1, 1) + extent: [0, 1, 0, 1] }) }); renderer = new ol.renderer.webgl.ImageLayer(map.getRenderer(), layer); @@ -33,7 +33,7 @@ describe('ol.renderer.webgl.ImageLayer', function() { // image size is 1024, 768 // image resolution is 10 - imageExtent = new ol.Extent(0, 0, 10240, 7680); + imageExtent = [0, 10240, 0, 7680]; }); afterEach(function() { @@ -79,7 +79,6 @@ describe('ol.renderer.webgl.ImageLayer', function() { goog.require('goog.vec.Mat4'); goog.require('goog.vec.Vec4'); -goog.require('ol.Extent'); goog.require('ol.Map'); goog.require('ol.layer.ImageLayer'); goog.require('ol.source.ImageSource'); diff --git a/test/spec/ol/source/tilesource.test.js b/test/spec/ol/source/tilesource.test.js index e4a85af188..b351cc0760 100644 --- a/test/spec/ol/source/tilesource.test.js +++ b/test/spec/ol/source/tilesource.test.js @@ -192,7 +192,7 @@ describe('ol.source.TileSource', function() { * @param {Object.} loaded Lookup of already loaded tiles. */ ol.test.source.MockTileSource = function(loaded) { - var extent = new ol.Extent(-180, -180, 180, 180); + var extent = [-180, 180, -180, 180]; var tileGrid = new ol.tilegrid.TileGrid({ resolutions: [360 / 256, 180 / 256, 90 / 256, 45 / 256], extent: extent, @@ -265,7 +265,6 @@ describe('ol.test.source.MockTileSource', function() { }); goog.require('goog.object'); -goog.require('ol.Extent'); goog.require('ol.Size'); goog.require('ol.Tile'); goog.require('ol.TileCoord'); diff --git a/test/spec/ol/source/wmssource.test.js b/test/spec/ol/source/wmssource.test.js index 9c9f74d786..f9b0bac46e 100644 --- a/test/spec/ol/source/wmssource.test.js +++ b/test/spec/ol/source/wmssource.test.js @@ -5,8 +5,7 @@ describe('ol.source.wms', function() { describe('ol.source.wms.getUrl', function() { it('creates expected URL', function() { var epsg3857 = ol.projection.get('EPSG:3857'); - var extent = new ol.Extent( - -20037508.342789244, -20037508.342789244, 0, 0); + var extent = [-20037508.342789244, 0, -20037508.342789244, 0]; var expected = 'http://wms?SERVICE=WMS&VERSION=1.3.0&REQUEST=' + 'GetMap&FORMAT=image%2Fpng&TRANSPARENT=true&WIDTH=256&HEIGHT=256&' + 'foo=bar&STYLES=&CRS=EPSG%3A3857&BBOX=' + @@ -17,7 +16,7 @@ describe('ol.source.wms', function() { }); it('creates expected URL respecting axis orientation', function() { var epsg4326 = ol.projection.get('EPSG:4326'); - var extent = new ol.Extent(-180, -90, 0, 90); + var extent = [-180, 0, -90, 90]; var expected = 'http://wms?SERVICE=WMS&VERSION=1.3.0&REQUEST=' + 'GetMap&FORMAT=image%2Fpng&TRANSPARENT=true&WIDTH=256&HEIGHT=256&' + 'foo=bar&STYLES=&CRS=EPSG%3A4326&BBOX=-90%2C-180%2C90%2C0'; @@ -30,7 +29,6 @@ describe('ol.source.wms', function() { }); -goog.require('ol.Extent'); goog.require('ol.Size'); goog.require('ol.projection'); goog.require('ol.source.wms'); diff --git a/test/spec/ol/structs/rtree.test.js b/test/spec/ol/structs/rtree.test.js index e982a5de8d..b2e774fcd5 100644 --- a/test/spec/ol/structs/rtree.test.js +++ b/test/spec/ol/structs/rtree.test.js @@ -5,44 +5,44 @@ describe('ol.structs.RTree', function() { describe('put and find', function() { var rTree = new ol.structs.RTree(); - rTree.put(new ol.Rectangle(0, 0, 1, 1), 1); - rTree.put(new ol.Rectangle(1, 1, 4, 4), 2); - rTree.put(new ol.Rectangle(2, 2, 3, 3), 3); - rTree.put(new ol.Rectangle(-5, -5, -4, -4), 4); - rTree.put(new ol.Rectangle(-4, -4, -1, -1), 5); - rTree.put(new ol.Rectangle(-3, -3, -2, -2), 6); + rTree.put([0, 1, 0, 1], 1); + rTree.put([1, 4, 1, 4], 2); + rTree.put([2, 3, 2, 3], 3); + rTree.put([-5, -4, -5, -4], 4); + rTree.put([-4, -1, -4, -1], 5); + rTree.put([-3, -2, -3, -2], 6); it('stores items', function() { - expect(goog.object.getCount(rTree.find(new ol.Rectangle( - Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY, - Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY)))).to.be(6); + expect(goog.object.getCount(rTree.find([ + Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY, + Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY + ]))).to.be(6); }); it('filters by rectangle', function() { var result; - result = goog.object.getValues(rTree.find(new ol.Rectangle(2, 2, 3, 3))); + result = goog.object.getValues(rTree.find([2, 3, 2, 3])); expect(result).to.contain(2); expect(result).to.contain(3); expect(result.length).to.be(2); - result = goog.object.getValues( - rTree.find(new ol.Rectangle(-1, -1, 2, 2))); + result = goog.object.getValues(rTree.find([-1, 2, -1, 2])); expect(result).to.contain(1); expect(result).to.contain(2); expect(result).to.contain(3); expect(result).to.contain(5); expect(result.length).to.be(4); - expect(goog.object.getCount(rTree.find(new ol.Rectangle(5, 5, 6, 6)))) - .to.be(0); + expect(goog.object.getCount(rTree.find([5, 6, 5, 6]))).to.be(0); }); it('can store thousands of items and find fast', function() { for (var i = 7; i <= 10000; ++i) { - rTree.put(new ol.Rectangle(Math.random() * -10, Math.random() * -10, - Math.random() * 10, Math.random() * 10), i); + rTree.put([ + Math.random() * -10, Math.random() * 10, + Math.random() * -10, Math.random() * 10 + ], i); } - expect(goog.object.getCount( - rTree.find(new ol.Rectangle(-10, -10, 10, 10)))).to.be(10000); - var result = rTree.find(new ol.Rectangle(0, 0, 0, 0)); + expect(goog.object.getCount(rTree.find([-10, 10, -10, 10]))).to.be(10000); + var result = rTree.find([0, 0, 0, 0]); expect(goog.object.getCount(result)).to.be(9995); var values = goog.object.getValues(result); expect(values).to.contain(1); @@ -59,5 +59,4 @@ describe('ol.structs.RTree', function() { }); goog.require('goog.object'); -goog.require('ol.Rectangle'); goog.require('ol.structs.RTree'); diff --git a/test/spec/ol/tilegrid/tilegrid.test.js b/test/spec/ol/tilegrid/tilegrid.test.js index 4f9abc8951..8c26240147 100644 --- a/test/spec/ol/tilegrid/tilegrid.test.js +++ b/test/spec/ol/tilegrid/tilegrid.test.js @@ -9,7 +9,7 @@ describe('ol.tilegrid.TileGrid', function() { beforeEach(function() { resolutions = [1000, 500, 250, 100]; - extent = new ol.Extent(0, 0, 100000, 100000); + extent = [0, 100000, 0, 100000]; origin = [0, 0]; origins = []; tileSize = new ol.Size(100, 100); @@ -452,22 +452,22 @@ describe('ol.tilegrid.TileGrid', function() { var tileCoordExtent; tileCoordExtent = tileGrid.getTileCoordExtent(new ol.TileCoord(0, 0, 0)); - expect(tileCoordExtent.minX).to.eql(0); - expect(tileCoordExtent.minY).to.eql(0); - expect(tileCoordExtent.maxX).to.eql(100000); - expect(tileCoordExtent.maxY).to.eql(100000); + expect(tileCoordExtent[0]).to.eql(0); + expect(tileCoordExtent[1]).to.eql(100000); + expect(tileCoordExtent[2]).to.eql(0); + expect(tileCoordExtent[3]).to.eql(100000); tileCoordExtent = tileGrid.getTileCoordExtent(new ol.TileCoord(3, 9, 0)); - expect(tileCoordExtent.minX).to.eql(90000); - expect(tileCoordExtent.minY).to.eql(0); - expect(tileCoordExtent.maxX).to.eql(100000); - expect(tileCoordExtent.maxY).to.eql(10000); + expect(tileCoordExtent[0]).to.eql(90000); + expect(tileCoordExtent[1]).to.eql(100000); + expect(tileCoordExtent[2]).to.eql(0); + expect(tileCoordExtent[3]).to.eql(10000); tileCoordExtent = tileGrid.getTileCoordExtent(new ol.TileCoord(3, 0, 9)); - expect(tileCoordExtent.minX).to.eql(0); - expect(tileCoordExtent.minY).to.eql(90000); - expect(tileCoordExtent.maxX).to.eql(10000); - expect(tileCoordExtent.maxY).to.eql(100000); + expect(tileCoordExtent[0]).to.eql(0); + expect(tileCoordExtent[1]).to.eql(10000); + expect(tileCoordExtent[2]).to.eql(90000); + expect(tileCoordExtent[3]).to.eql(100000); }); }); @@ -519,7 +519,7 @@ describe('ol.tilegrid.TileGrid', function() { origin: origin, tileSize: tileSize }); - var e = new ol.Extent(45000, 5000, 55000, 15000); + var e = [45000, 55000, 5000, 15000]; var tileRange; tileRange = tileGrid.getTileRangeForExtentAndZ(e, 0); @@ -633,7 +633,6 @@ describe('ol.tilegrid.TileGrid', function() { }); goog.require('ol.Coordinate'); -goog.require('ol.Extent'); goog.require('ol.Size'); goog.require('ol.TileCoord'); goog.require('ol.projection'); diff --git a/test/spec/ol/tilegrid/xyztilegrid.test.js b/test/spec/ol/tilegrid/xyztilegrid.test.js index 952ea658ef..c4071f7cd8 100644 --- a/test/spec/ol/tilegrid/xyztilegrid.test.js +++ b/test/spec/ol/tilegrid/xyztilegrid.test.js @@ -21,8 +21,8 @@ describe('ol.tilegrid.XYZ', function() { function(z, tileRange) { zs.push(z); tileRanges.push(new ol.TileRange( - tileRange.minX, tileRange.minY, - tileRange.maxX, tileRange.maxY)); + tileRange.minX, tileRange.maxX, + tileRange.minY, tileRange.maxY)); return false; }); @@ -31,32 +31,32 @@ describe('ol.tilegrid.XYZ', function() { expect(zs[0]).to.eql(4); expect(tileRanges[0].minX).to.eql(5); - expect(tileRanges[0].minY).to.eql(10); expect(tileRanges[0].maxX).to.eql(5); + expect(tileRanges[0].minY).to.eql(10); expect(tileRanges[0].maxY).to.eql(10); expect(zs[1]).to.eql(3); expect(tileRanges[1].minX).to.eql(2); - expect(tileRanges[1].minY).to.eql(5); expect(tileRanges[1].maxX).to.eql(2); + expect(tileRanges[1].minY).to.eql(5); expect(tileRanges[1].maxY).to.eql(5); expect(zs[2]).to.eql(2); expect(tileRanges[2].minX).to.eql(1); - expect(tileRanges[2].minY).to.eql(2); expect(tileRanges[2].maxX).to.eql(1); + expect(tileRanges[2].minY).to.eql(2); expect(tileRanges[2].maxY).to.eql(2); expect(zs[3]).to.eql(1); expect(tileRanges[3].minX).to.eql(0); - expect(tileRanges[3].minY).to.eql(1); expect(tileRanges[3].maxX).to.eql(0); + expect(tileRanges[3].minY).to.eql(1); expect(tileRanges[3].maxY).to.eql(1); expect(zs[4]).to.eql(0); expect(tileRanges[4].minX).to.eql(0); - expect(tileRanges[4].minY).to.eql(0); expect(tileRanges[4].maxX).to.eql(0); + expect(tileRanges[4].minY).to.eql(0); expect(tileRanges[4].maxY).to.eql(0); }); diff --git a/test/spec/ol/tilerange.test.js b/test/spec/ol/tilerange.test.js index 182468c5d2..671d867df2 100644 --- a/test/spec/ol/tilerange.test.js +++ b/test/spec/ol/tilerange.test.js @@ -4,12 +4,12 @@ describe('ol.TileRange', function() { describe('constructor', function() { it('creates a range', function() { - var range = new ol.TileRange(1, 2, 3, 4); + var range = new ol.TileRange(1, 3, 2, 4); expect(range).to.be.a(ol.TileRange); }); it('can represent a range of one tile', function() { - var range = new ol.TileRange(2, 3, 2, 3); + var range = new ol.TileRange(2, 2, 3, 3); expect(range).to.be.a(ol.TileRange); expect(range.getHeight()).to.be(1); expect(range.getWidth()).to.be(1); @@ -18,7 +18,7 @@ describe('ol.TileRange', function() { describe('contains', function() { it('returns the expected value', function() { - var tileRange = new ol.TileRange(1, 1, 3, 3); + var tileRange = new ol.TileRange(1, 3, 1, 3); expect(tileRange.contains(new ol.TileCoord(0, 0, 0))).to.not.be(); expect(tileRange.contains(new ol.TileCoord(0, 0, 1))).to.not.be(); expect(tileRange.contains(new ol.TileCoord(0, 0, 2))).to.not.be(); @@ -53,8 +53,8 @@ describe('ol.TileRange', function() { new ol.TileCoord(3, 1, 3), new ol.TileCoord(3, 2, 0)); expect(tileRange.minX).to.eql(1); - expect(tileRange.minY).to.eql(0); expect(tileRange.maxX).to.eql(2); + expect(tileRange.minY).to.eql(0); expect(tileRange.maxY).to.eql(3); }); @@ -69,12 +69,12 @@ describe('ol.TileRange', function() { describe('equals', function() { it('determines equivalence of two ranges', function() { - var one = new ol.TileRange(0, 1, 2, 4); - var same = new ol.TileRange(0, 1, 2, 4); - var diff1 = new ol.TileRange(0, 1, 2, 5); - var diff2 = new ol.TileRange(0, 1, 3, 4); + var one = new ol.TileRange(0, 2, 1, 4); + var same = new ol.TileRange(0, 2, 1, 4); + var diff1 = new ol.TileRange(0, 2, 1, 5); + var diff2 = new ol.TileRange(0, 3, 1, 4); var diff3 = new ol.TileRange(0, 2, 2, 4); - var diff4 = new ol.TileRange(1, 1, 2, 4); + var diff4 = new ol.TileRange(1, 2, 1, 4); expect(one.equals(same)).to.be(true); expect(one.equals(diff1)).to.be(false); expect(one.equals(diff2)).to.be(false); @@ -85,13 +85,13 @@ describe('ol.TileRange', function() { describe('extent', function() { it('modifies range so it includes another', function() { - var one = new ol.TileRange(0, 1, 2, 4); - var other = new ol.TileRange(-1, 10, -3, 12); + var one = new ol.TileRange(0, 2, 1, 4); + var other = new ol.TileRange(-1, -3, 10, 12); one.extend(other); expect(one.minX).to.be(-1); - expect(one.minY).to.be(1); expect(one.maxX).to.be(2); + expect(one.minY).to.be(1); expect(one.maxY).to.be(12); }); @@ -99,7 +99,7 @@ describe('ol.TileRange', function() { describe('getSize', function() { it('returns the expected size', function() { - var tileRange = new ol.TileRange(0, 1, 2, 4); + var tileRange = new ol.TileRange(0, 2, 1, 4); var size = tileRange.getSize(); expect(size.width).to.eql(3); expect(size.height).to.eql(4); @@ -108,20 +108,20 @@ describe('ol.TileRange', function() { describe('intersects', function() { it('determines if two ranges overlap', function() { - var one = new ol.TileRange(0, 1, 2, 4); - var overlapsRight = new ol.TileRange(2, 1, 4, 4); - var overlapsLeft = new ol.TileRange(-3, 1, 0, 4); - var overlapsTop = new ol.TileRange(0, 4, 2, 5); - var overlapsBottom = new ol.TileRange(0, -3, 2, 1); + var one = new ol.TileRange(0, 2, 1, 4); + var overlapsRight = new ol.TileRange(2, 4, 1, 4); + var overlapsLeft = new ol.TileRange(-3, 0, 1, 4); + var overlapsTop = new ol.TileRange(0, 2, 4, 5); + var overlapsBottom = new ol.TileRange(0, 2, -3, 1); expect(one.intersects(overlapsLeft)).to.be(true); expect(one.intersects(overlapsRight)).to.be(true); expect(one.intersects(overlapsTop)).to.be(true); expect(one.intersects(overlapsBottom)).to.be(true); - var right = new ol.TileRange(3, 1, 5, 4); - var left = new ol.TileRange(-3, 1, -1, 4); - var above = new ol.TileRange(0, 5, 2, 6); - var below = new ol.TileRange(0, -3, 2, 0); + var right = new ol.TileRange(3, 5, 1, 4); + var left = new ol.TileRange(-3, -1, 1, 4); + var above = new ol.TileRange(0, 2, 5, 6); + var below = new ol.TileRange(0, 2, -3, 0); expect(one.intersects(right)).to.be(false); expect(one.intersects(left)).to.be(false); expect(one.intersects(above)).to.be(false);