diff --git a/examples/mapguide-untiled.js b/examples/mapguide-untiled.js
index d3908b1ed9..007848e9eb 100644
--- a/examples/mapguide-untiled.js
+++ b/examples/mapguide-untiled.js
@@ -15,6 +15,7 @@ var bounds = [
var map = new ol.Map({
layers: [
new ol.layer.Image({
+ extent: bounds,
source: new ol.source.MapGuide({
projection: 'EPSG:4326',
url: agentUrl,
@@ -24,8 +25,7 @@ var map = new ol.Map({
MAPDEFINITION: mdf,
FORMAT: 'PNG'
},
- ratio: 2,
- extent: bounds
+ ratio: 2
})
})
],
diff --git a/examples/wms-custom-proj.js b/examples/wms-custom-proj.js
index e3b5f2920b..1a34e76ed1 100644
--- a/examples/wms-custom-proj.js
+++ b/examples/wms-custom-proj.js
@@ -44,6 +44,7 @@ ol.proj.addCoordinateTransforms('EPSG:4326', projection,
var extent = [420000, 30000, 900000, 350000];
var layers = [
new ol.layer.Tile({
+ extent: extent,
source: new ol.source.TileWMS({
url: 'http://wms.geo.admin.ch/',
crossOrigin: 'anonymous',
@@ -57,11 +58,11 @@ var layers = [
'LAYERS': 'ch.swisstopo.pixelkarte-farbe-pk1000.noscale',
'FORMAT': 'image/jpeg'
},
- extent: extent,
serverType: 'mapserver'
})
}),
new ol.layer.Tile({
+ extent: extent,
source: new ol.source.TileWMS({
url: 'http://wms.geo.admin.ch/',
crossOrigin: 'anonymous',
@@ -72,7 +73,6 @@ var layers = [
'National parks / geo.admin.ch'
})],
params: {'LAYERS': 'ch.bafu.schutzgebiete-paerke_nationaler_bedeutung'},
- extent: extent,
serverType: 'mapserver'
})
})
diff --git a/examples/wms-image-custom-proj.js b/examples/wms-image-custom-proj.js
index b12037033d..f48c9c256a 100644
--- a/examples/wms-image-custom-proj.js
+++ b/examples/wms-image-custom-proj.js
@@ -24,6 +24,7 @@ projection.setExtent([485869.5728, 76443.1884, 837076.5648, 299941.7864]);
var extent = [420000, 30000, 900000, 350000];
var layers = [
new ol.layer.Image({
+ extent: extent,
source: new ol.source.ImageWMS({
url: 'http://wms.geo.admin.ch/',
crossOrigin: 'anonymous',
@@ -37,11 +38,11 @@ var layers = [
'LAYERS': 'ch.swisstopo.pixelkarte-farbe-pk1000.noscale',
'FORMAT': 'image/jpeg'
},
- serverType: /** @type {ol.source.wms.ServerType} */ ('mapserver'),
- extent: extent
+ serverType: /** @type {ol.source.wms.ServerType} */ ('mapserver')
})
}),
new ol.layer.Image({
+ extent: extent,
source: new ol.source.ImageWMS({
url: 'http://wms.geo.admin.ch/',
crossOrigin: 'anonymous',
@@ -52,8 +53,7 @@ var layers = [
'National parks / geo.admin.ch'
})],
params: {'LAYERS': 'ch.bafu.schutzgebiete-paerke_nationaler_bedeutung'},
- serverType: /** @type {ol.source.wms.ServerType} */ ('mapserver'),
- extent: extent
+ serverType: /** @type {ol.source.wms.ServerType} */ ('mapserver')
})
})
];
diff --git a/examples/wms-image.js b/examples/wms-image.js
index fbc573ab8c..adcb74dcf9 100644
--- a/examples/wms-image.js
+++ b/examples/wms-image.js
@@ -11,11 +11,11 @@ var layers = [
source: new ol.source.MapQuest({layer: 'sat'})
}),
new ol.layer.Image({
+ extent: [-13884991, 2870341, -7455066, 6338219],
source: new ol.source.ImageWMS({
url: 'http://demo.opengeo.org/geoserver/wms',
params: {'LAYERS': 'topp:states'},
- serverType: 'geoserver',
- extent: [-13884991, 2870341, -7455066, 6338219]
+ serverType: 'geoserver'
})
})
];
diff --git a/examples/wms-tiled.js b/examples/wms-tiled.js
index 86f5503f62..9815eb8d17 100644
--- a/examples/wms-tiled.js
+++ b/examples/wms-tiled.js
@@ -10,10 +10,10 @@ var layers = [
source: new ol.source.MapQuest({layer: 'sat'})
}),
new ol.layer.Tile({
+ extent: [-13884991, 2870341, -7455066, 6338219],
source: new ol.source.TileWMS(/** @type {olx.source.TileWMSOptions} */ ({
url: 'http://demo.opengeo.org/geoserver/wms',
params: {'LAYERS': 'topp:states', 'TILED': true},
- extent: [-13884991, 2870341, -7455066, 6338219],
serverType: 'geoserver'
}))
})
diff --git a/examples/wmts-hidpi.html b/examples/wmts-hidpi.html
index 71f31e5648..e6f4e3d824 100644
--- a/examples/wmts-hidpi.html
+++ b/examples/wmts-hidpi.html
@@ -9,6 +9,11 @@
WMTS HiDPI example
+
diff --git a/examples/wmts-hidpi.js b/examples/wmts-hidpi.js
index c0633601e1..e84d2ec529 100644
--- a/examples/wmts-hidpi.js
+++ b/examples/wmts-hidpi.js
@@ -23,7 +23,6 @@ var urls = [
var hiDPI = ol.BrowserFeature.DEVICE_PIXEL_RATIO > 1;
var source = new ol.source.WMTS({
- extent: [977844.377599999, 5837774.6617, 1915609.8654, 6295560.8122],
projection: 'EPSG:3857',
layer: hiDPI ? 'bmaphidpi' : 'geolandbasemap',
tilePixelRatio: hiDPI ? 2 : 1,
@@ -64,6 +63,7 @@ var source = new ol.source.WMTS({
var map = new ol.Map({
layers: [
new ol.layer.Tile({
+ extent: [977844.377599999, 5837774.6617, 1915609.8654, 6295560.8122],
source: source
})
],
diff --git a/examples/wmts.js b/examples/wmts.js
index 6c64105f18..b8daeb176a 100644
--- a/examples/wmts.js
+++ b/examples/wmts.js
@@ -35,6 +35,7 @@ var map = new ol.Map({
}),
new ol.layer.Tile({
opacity: 0.7,
+ extent: projectionExtent,
source: new ol.source.WMTS({
attributions: [attribution],
url: 'http://services.arcgisonline.com/arcgis/rest/' +
@@ -48,7 +49,6 @@ var map = new ol.Map({
resolutions: resolutions,
matrixIds: matrixIds
}),
- extent: projectionExtent,
style: 'default'
})
})
diff --git a/externs/olx.js b/externs/olx.js
index ad1c275762..44d7f0afee 100644
--- a/externs/olx.js
+++ b/externs/olx.js
@@ -1969,6 +1969,7 @@ olx.interaction.SelectOptions.prototype.toggleCondition;
* opacity: (number|undefined),
* saturation: (number|undefined),
* visible: (boolean|undefined),
+ * extent: (ol.Extent|undefined),
* minResolution: (number|undefined),
* maxResolution: (number|undefined)}}
* @api
@@ -2018,6 +2019,14 @@ olx.layer.BaseOptions.prototype.saturation;
olx.layer.BaseOptions.prototype.visible;
+/**
+ * The bounding extent for layer rendering. The layer will not be rendered
+ * outside of this extent.
+ * @type {ol.Extent|undefined}
+ */
+olx.layer.BaseOptions.prototype.extent;
+
+
/**
* The minimum resolution (inclusive) at which this layer will be visible.
* @type {number|undefined}
@@ -2040,6 +2049,7 @@ olx.layer.BaseOptions.prototype.maxResolution;
* saturation: (number|undefined),
* source: ol.source.Source,
* visible: (boolean|undefined),
+ * extent: (ol.Extent|undefined),
* minResolution: (number|undefined),
* maxResolution: (number|undefined)}}
* @api
@@ -2096,6 +2106,14 @@ olx.layer.LayerOptions.prototype.source;
olx.layer.LayerOptions.prototype.visible;
+/**
+ * The bounding extent for layer rendering. The layer will not be rendered
+ * outside of this extent.
+ * @type {ol.Extent|undefined}
+ */
+olx.layer.LayerOptions.prototype.extent;
+
+
/**
* The minimum resolution (inclusive) at which this layer will be visible.
* @type {number|undefined}
@@ -2117,6 +2135,7 @@ olx.layer.LayerOptions.prototype.maxResolution;
* opacity: (number|undefined),
* saturation: (number|undefined),
* visible: (boolean|undefined),
+ * extent: (ol.Extent|undefined),
* minResolution: (number|undefined),
* maxResolution: (number|undefined),
* layers: (Array.|ol.Collection|undefined)}}
@@ -2167,6 +2186,14 @@ olx.layer.GroupOptions.prototype.saturation;
olx.layer.GroupOptions.prototype.visible;
+/**
+ * The bounding extent for layer rendering. The layer will not be rendered
+ * outside of this extent.
+ * @type {ol.Extent|undefined}
+ */
+olx.layer.GroupOptions.prototype.extent;
+
+
/**
* The minimum resolution (inclusive) at which this layer will be visible.
* @type {number|undefined}
@@ -2197,6 +2224,7 @@ olx.layer.GroupOptions.prototype.layers;
* blur: (number|undefined),
* shadow: (number|undefined),
* weight: (string|function(ol.Feature):number|undefined),
+ * extent: (ol.Extent|undefined),
* minResolution: (number|undefined),
* maxResolution: (number|undefined),
* opacity: (number|undefined),
@@ -2267,6 +2295,14 @@ olx.layer.HeatmapOptions.prototype.shadow;
olx.layer.HeatmapOptions.prototype.weight;
+/**
+ * The bounding extent for layer rendering. The layer will not be rendered
+ * outside of this extent.
+ * @type {ol.Extent|undefined}
+ */
+olx.layer.HeatmapOptions.prototype.extent;
+
+
/**
* The minimum resolution (inclusive) at which this layer will be visible.
* @type {number|undefined}
@@ -2318,6 +2354,7 @@ olx.layer.HeatmapOptions.prototype.visible;
* saturation: (number|undefined),
* source: ol.source.Source,
* visible: (boolean|undefined),
+ * extent: (ol.Extent|undefined),
* minResolution: (number|undefined),
* maxResolution: (number|undefined),
* useInterimTilesOnError: (boolean|undefined)}}
@@ -2382,6 +2419,14 @@ olx.layer.TileOptions.prototype.source;
olx.layer.TileOptions.prototype.visible;
+/**
+ * The bounding extent for layer rendering. The layer will not be rendered
+ * outside of this extent.
+ * @type {ol.Extent|undefined}
+ */
+olx.layer.TileOptions.prototype.extent;
+
+
/**
* The minimum resolution (inclusive) at which this layer will be visible.
* @type {number|undefined}
@@ -2450,6 +2495,14 @@ olx.layer.VectorOptions.prototype.renderOrder;
olx.layer.VectorOptions.prototype.hue;
+/**
+ * The bounding extent for layer rendering. The layer will not be rendered
+ * outside of this extent.
+ * @type {ol.Extent|undefined}
+ */
+olx.layer.VectorOptions.prototype.extent;
+
+
/**
* The minimum resolution (inclusive) at which this layer will be visible.
* @type {number|undefined}
@@ -2569,7 +2622,6 @@ olx.source.BingMapsOptions.prototype.tileLoadFunction;
/**
* @typedef {{attributions: (Array.|undefined),
- * extent: (ol.Extent|undefined),
* format: ol.format.Feature,
* logo: (string|olx.LogoOptions|undefined),
* projection: ol.proj.ProjectionLike}}
@@ -2585,13 +2637,6 @@ olx.source.FormatVectorOptions;
olx.source.FormatVectorOptions.prototype.attributions;
-/**
- * Extent.
- * @type {ol.Extent|undefined}
- */
-olx.source.FormatVectorOptions.prototype.extent;
-
-
/**
* Format.
* @type {ol.format.Feature}
@@ -2616,7 +2661,6 @@ olx.source.FormatVectorOptions.prototype.projection;
/**
* @typedef {{attributions: (Array.|undefined),
* defaultProjection: ol.proj.ProjectionLike,
- * extent: (ol.Extent|undefined),
* logo: (string|olx.LogoOptions|undefined),
* object: (GeoJSONObject|undefined),
* projection: ol.proj.ProjectionLike,
@@ -2642,13 +2686,6 @@ olx.source.GeoJSONOptions.prototype.attributions;
olx.source.GeoJSONOptions.prototype.defaultProjection;
-/**
- * Extent.
- * @type {ol.Extent|undefined}
- */
-olx.source.GeoJSONOptions.prototype.extent;
-
-
/**
* Logo.
* @type{string|olx.LogoOptions|undefined}
@@ -2695,7 +2732,6 @@ olx.source.GeoJSONOptions.prototype.urls;
/**
* @typedef {{attributions: (Array.|undefined),
* doc: (Document|undefined),
- * extent: (ol.Extent|undefined),
* logo: (string|olx.LogoOptions|undefined),
* node: (Node|undefined),
* projection: ol.proj.ProjectionLike,
@@ -2721,13 +2757,6 @@ olx.source.GPXOptions.prototype.attributions;
olx.source.GPXOptions.prototype.doc;
-/**
- * Extent.
- * @type {ol.Extent|undefined}
- */
-olx.source.GPXOptions.prototype.extent;
-
-
/**
* Logo.
* @type{string|olx.LogoOptions|undefined}
@@ -2774,7 +2803,6 @@ olx.source.GPXOptions.prototype.urls;
/**
* @typedef {{attributions: (Array.|undefined),
* crossOrigin: (null|string|undefined),
- * extent: (ol.Extent|undefined),
* logo: (string|olx.LogoOptions|undefined),
* opaque: (boolean|undefined),
* projection: ol.proj.ProjectionLike,
@@ -2804,13 +2832,6 @@ olx.source.TileImageOptions.prototype.attributions;
olx.source.TileImageOptions.prototype.crossOrigin;
-/**
- * Extent.
- * @type {ol.Extent|undefined}
- */
-olx.source.TileImageOptions.prototype.extent;
-
-
/**
* Logo.
* @type{string|olx.LogoOptions|undefined}
@@ -2875,7 +2896,6 @@ olx.source.TileImageOptions.prototype.tileUrlFunction;
/**
* @typedef {{attributions: (Array.|undefined),
* defaultProjection: ol.proj.ProjectionLike,
- * extent: (ol.Extent|undefined),
* format: ol.format.Feature,
* logo: (string|olx.LogoOptions|undefined),
* object: (GeoJSONObject|undefined),
@@ -2903,13 +2923,6 @@ olx.source.TileVectorOptions.prototype.attributions;
olx.source.TileVectorOptions.prototype.defaultProjection;
-/**
- * Extent.
- * @type {ol.Extent|undefined}
- */
-olx.source.TileVectorOptions.prototype.extent;
-
-
/**
* Format.
* @type {ol.format.Feature}
@@ -2971,7 +2984,6 @@ olx.source.TileVectorOptions.prototype.urls;
/**
* @typedef {{attributions: (Array.|undefined),
* defaultProjection: ol.proj.ProjectionLike,
- * extent: (ol.Extent|undefined),
* logo: (string|olx.LogoOptions|undefined),
* object: (GeoJSONObject|undefined),
* projection: ol.proj.ProjectionLike,
@@ -2996,13 +3008,6 @@ olx.source.TopoJSONOptions.prototype.attributions;
olx.source.TopoJSONOptions.prototype.defaultProjection;
-/**
- * Extent.
- * @type {ol.Extent|undefined}
- */
-olx.source.TopoJSONOptions.prototype.extent;
-
-
/**
* Logo.
* @type{string|olx.LogoOptions|undefined}
@@ -3091,7 +3096,6 @@ olx.source.IGCOptions.prototype.urls;
* @typedef {{url: (string|undefined),
* displayDpi: (number|undefined),
* metersPerUnit: (number|undefined),
- * extent: (ol.Extent|undefined),
* hidpi: (boolean|undefined),
* useOverlay: (boolean|undefined),
* projection: ol.proj.ProjectionLike,
@@ -3124,13 +3128,6 @@ olx.source.MapGuideOptions.prototype.displayDpi;
olx.source.MapGuideOptions.prototype.metersPerUnit;
-/**
- * Extent.
- * @type {ol.Extent|undefined}
- */
-olx.source.MapGuideOptions.prototype.extent;
-
-
/**
* Use the `ol.Map#pixelRatio` value when requesting the image from the remote
* server. Default is `true`.
@@ -3179,7 +3176,6 @@ olx.source.MapGuideOptions.prototype.params;
* @typedef {{attributions: (Array.|undefined),
* defaultStyle: (Array.|undefined),
* doc: (Document|undefined),
- * extent: (ol.Extent|undefined),
* logo: (string|olx.LogoOptions|undefined),
* node: (Node|undefined),
* projection: ol.proj.ProjectionLike,
@@ -3212,13 +3208,6 @@ olx.source.KMLOptions.prototype.defaultStyle;
olx.source.KMLOptions.prototype.doc;
-/**
- * Extent.
- * @type {ol.Extent|undefined}
- */
-olx.source.KMLOptions.prototype.extent;
-
-
/**
* Logo.
* @type{string|olx.LogoOptions|undefined}
@@ -3285,21 +3274,13 @@ olx.source.MapQuestOptions.prototype.tileLoadFunction;
/**
- * @typedef {{extent: (ol.Extent|undefined),
- * projection: ol.proj.ProjectionLike,
+ * @typedef {{projection: ol.proj.ProjectionLike,
* tileGrid: (ol.tilegrid.TileGrid|undefined)}}
* @api
*/
olx.source.TileDebugOptions;
-/**
- * Extent.
- * @type {ol.Extent|undefined}
- */
-olx.source.TileDebugOptions.prototype.extent;
-
-
/**
* Projection.
* @type {ol.proj.ProjectionLike}
@@ -3365,7 +3346,6 @@ olx.source.OSMOptions.prototype.url;
* @typedef {{attributions: (Array.|undefined),
* defaultStyle: (Array.|undefined),
* doc: (Document|undefined),
- * extent: (ol.Extent|undefined),
* logo: (string|olx.LogoOptions|undefined),
* node: (Node|undefined),
* projection: ol.proj.ProjectionLike,
@@ -3399,13 +3379,6 @@ olx.source.OSMXMLOptions.prototype.defaultStyle;
olx.source.OSMXMLOptions.prototype.doc;
-/**
- * Extent.
- * @type {ol.Extent|undefined}
- */
-olx.source.OSMXMLOptions.prototype.extent;
-
-
/**
* Logo.
* @type{string|olx.LogoOptions|undefined}
@@ -3458,7 +3431,6 @@ olx.source.OSMXMLOptions.prototype.urls;
/**
* @typedef {{attributions: (Array.|undefined),
* canvasFunction: ol.CanvasFunctionType,
- * extent: (ol.Extent|undefined),
* logo: (string|olx.LogoOptions|undefined),
* projection: ol.proj.ProjectionLike,
* ratio: (number|undefined),
@@ -3490,13 +3462,6 @@ olx.source.ImageCanvasOptions.prototype.attributions;
olx.source.ImageCanvasOptions.prototype.canvasFunction;
-/**
- * Extent.
- * @type {ol.Extent|undefined}
- */
-olx.source.ImageCanvasOptions.prototype.extent;
-
-
/**
* Logo.
* @type{string|olx.LogoOptions|undefined}
@@ -3536,7 +3501,6 @@ olx.source.ImageCanvasOptions.prototype.state;
/**
* @typedef {{attributions: (Array.|undefined),
- * extent: (ol.Extent|undefined),
* logo: (string|olx.LogoOptions|undefined),
* projection: ol.proj.ProjectionLike,
* ratio: (number|undefined),
@@ -3555,13 +3519,6 @@ olx.source.ImageVectorOptions;
olx.source.ImageVectorOptions.prototype.attributions;
-/**
- * Extent.
- * @type {ol.Extent|undefined}
- */
-olx.source.ImageVectorOptions.prototype.extent;
-
-
/**
* Logo.
* @type{string|olx.LogoOptions|undefined}
@@ -3610,7 +3567,6 @@ olx.source.ImageVectorOptions.prototype.style;
/**
* @typedef {{attributions: (Array.|undefined),
* crossOrigin: (null|string|undefined),
- * extent: (ol.Extent|undefined),
* hidpi: (boolean|undefined),
* serverType: (ol.source.wms.ServerType|string|undefined),
* logo: (string|olx.LogoOptions|undefined),
@@ -3638,13 +3594,6 @@ olx.source.ImageWMSOptions.prototype.attributions;
olx.source.ImageWMSOptions.prototype.crossOrigin;
-/**
- * Extent.
- * @type {ol.Extent|undefined}
- */
-olx.source.ImageWMSOptions.prototype.extent;
-
-
/**
* Use the `ol.Map#pixelRatio` value when requesting the image from the remote
* server. Default is `true`.
@@ -3763,7 +3712,6 @@ olx.source.StamenOptions.prototype.url;
/**
* @typedef {{attributions: (Array.|undefined),
* crossOrigin: (null|string|undefined),
- * extent: (ol.Extent|undefined),
* imageExtent: (ol.Extent|undefined),
* imageSize: (ol.Size|undefined),
* logo: (string|olx.LogoOptions|undefined),
@@ -3788,13 +3736,6 @@ olx.source.ImageStaticOptions.prototype.attributions;
olx.source.ImageStaticOptions.prototype.crossOrigin;
-/**
- * Extent.
- * @type {ol.Extent|undefined}
- */
-olx.source.ImageStaticOptions.prototype.extent;
-
-
/**
* Extent of the image.
* @type {ol.Extent|undefined}
@@ -3832,7 +3773,6 @@ olx.source.ImageStaticOptions.prototype.url;
/**
* @typedef {{attributions: (Array.|undefined),
- * extent: (ol.Extent|undefined),
* format: ol.format.Feature,
* loader: function(this: ol.source.ServerVector, ol.Extent, number, ol.proj.Projection),
* strategy: (function(ol.Extent, number): Array.|undefined),
@@ -3850,13 +3790,6 @@ olx.source.ServerVectorOptions;
olx.source.ServerVectorOptions.prototype.attributions;
-/**
- * Extent.
- * @type {ol.Extent|undefined}
- */
-olx.source.ServerVectorOptions.prototype.extent;
-
-
/**
* Format.
* @type {ol.format.Feature}
@@ -3927,7 +3860,6 @@ olx.source.TileJSONOptions.prototype.url;
* @typedef {{attributions: (Array.|undefined),
* params: Object.,
* crossOrigin: (null|string|undefined),
- * extent: (ol.Extent|undefined),
* gutter: (number|undefined),
* hidpi: (boolean|undefined),
* logo: (string|olx.LogoOptions|undefined),
@@ -3966,13 +3898,6 @@ olx.source.TileWMSOptions.prototype.params;
olx.source.TileWMSOptions.prototype.crossOrigin;
-/**
- * Extent.
- * @type {ol.Extent|undefined}
- */
-olx.source.TileWMSOptions.prototype.extent;
-
-
/**
* The size in pixels of the gutter around image tiles to ignore. By setting
* this property to a non-zero value, images will be requested that are wider
@@ -4059,7 +3984,6 @@ olx.source.TileWMSOptions.prototype.urls;
/**
* @typedef {{attributions: (Array.|undefined),
- * extent: (ol.Extent|undefined),
* features: (Array.|undefined),
* logo: (string|olx.LogoOptions|undefined),
* projection: ol.proj.ProjectionLike,
@@ -4076,13 +4000,6 @@ olx.source.VectorOptions;
olx.source.VectorOptions.prototype.attributions;
-/**
- * Extent.
- * @type {ol.Extent|undefined}
- */
-olx.source.VectorOptions.prototype.extent;
-
-
/**
* Features.
* @type {Array.|undefined}
@@ -4115,7 +4032,6 @@ olx.source.VectorOptions.prototype.state;
* @typedef {{arrayBuffer: (ArrayBuffer|undefined),
* attributions: (Array.|undefined),
* doc: (Document|undefined),
- * extent: (ol.Extent|undefined),
* format: ol.format.Feature,
* logo: (string|olx.LogoOptions|undefined),
* node: (Node|undefined),
@@ -4150,13 +4066,6 @@ olx.source.StaticVectorOptions.prototype.attributions;
olx.source.StaticVectorOptions.prototype.doc;
-/**
- * Extent.
- * @type {ol.Extent|undefined}
- */
-olx.source.StaticVectorOptions.prototype.extent;
-
-
/**
* Format.
* @type {ol.format.Feature}
@@ -4216,7 +4125,6 @@ olx.source.StaticVectorOptions.prototype.urls;
/**
* @typedef {{attributions: (Array.|undefined),
* crossOrigin: (string|null|undefined),
- * extent: (ol.Extent|undefined),
* logo: (string|olx.LogoOptions|undefined),
* tileGrid: ol.tilegrid.WMTS,
* projection: ol.proj.ProjectionLike,
@@ -4251,13 +4159,6 @@ olx.source.WMTSOptions.prototype.attributions;
olx.source.WMTSOptions.prototype.crossOrigin;
-/**
- * Extent.
- * @type {ol.Extent|undefined}
- */
-olx.source.WMTSOptions.prototype.extent;
-
-
/**
* Logo.
* @type{string|olx.LogoOptions|undefined}
@@ -4369,7 +4270,6 @@ olx.source.WMTSOptions.prototype.urls;
/**
* @typedef {{attributions: (Array.|undefined),
* crossOrigin: (null|string|undefined),
- * extent: (ol.Extent|undefined),
* logo: (string|olx.LogoOptions|undefined),
* projection: ol.proj.ProjectionLike,
* maxZoom: (number|undefined),
@@ -4399,13 +4299,6 @@ olx.source.XYZOptions.prototype.attributions;
olx.source.XYZOptions.prototype.crossOrigin;
-/**
- * Extent.
- * @type {ol.Extent|undefined}
- */
-olx.source.XYZOptions.prototype.extent;
-
-
/**
* Logo.
* @type{string|olx.LogoOptions|undefined}
diff --git a/src/ol/extent.js b/src/ol/extent.js
index f6fbdfb21c..1f7d84bfdb 100644
--- a/src/ol/extent.js
+++ b/src/ol/extent.js
@@ -418,7 +418,11 @@ ol.extent.extendXY = function(extent, x, y) {
* @return {number} Area.
*/
ol.extent.getArea = function(extent) {
- return ol.extent.getWidth(extent) * ol.extent.getHeight(extent);
+ var area = 0;
+ if (!ol.extent.isEmpty(extent)) {
+ area = ol.extent.getWidth(extent) * ol.extent.getHeight(extent);
+ }
+ return area;
};
@@ -511,11 +515,44 @@ ol.extent.getHeight = function(extent) {
* @return {number} Intersection area.
*/
ol.extent.getIntersectionArea = function(extent1, extent2) {
- var minX = Math.max(extent1[0], extent2[0]);
- var minY = Math.max(extent1[1], extent2[1]);
- var maxX = Math.min(extent1[2], extent2[2]);
- var maxY = Math.min(extent1[3], extent2[3]);
- return Math.max(0, maxX - minX) * Math.max(0, maxY - minY);
+ var intersection = ol.extent.getIntersection(extent1, extent2);
+ return ol.extent.getArea(intersection);
+};
+
+
+/**
+ * Get the intersection of two extents.
+ * @param {ol.Extent} extent1 Extent 1.
+ * @param {ol.Extent} extent2 Extent 2.
+ * @param {ol.Extent=} opt_extent Optional extent to populate with intersection.
+ * @return {ol.Extent} Intersecting extent.
+ */
+ol.extent.getIntersection = function(extent1, extent2, opt_extent) {
+ var intersection = goog.isDef(opt_extent) ?
+ opt_extent : ol.extent.createEmpty();
+ if (ol.extent.intersects(extent1, extent2)) {
+ if (extent1[0] > extent2[0]) {
+ intersection[0] = extent1[0];
+ } else {
+ intersection[0] = extent2[0];
+ }
+ if (extent1[1] > extent2[1]) {
+ intersection[1] = extent1[1];
+ } else {
+ intersection[1] = extent2[1];
+ }
+ if (extent1[2] < extent2[2]) {
+ intersection[2] = extent1[2];
+ } else {
+ intersection[2] = extent2[2];
+ }
+ if (extent1[3] < extent2[3]) {
+ intersection[3] = extent1[3];
+ } else {
+ intersection[3] = extent2[3];
+ }
+ }
+ return intersection;
};
diff --git a/src/ol/layer/layerbase.js b/src/ol/layer/layerbase.js
index f2c9c1b6b6..51652f0cde 100644
--- a/src/ol/layer/layerbase.js
+++ b/src/ol/layer/layerbase.js
@@ -19,6 +19,7 @@ ol.layer.LayerProperty = {
OPACITY: 'opacity',
SATURATION: 'saturation',
VISIBLE: 'visible',
+ EXTENT: 'extent',
MAX_RESOLUTION: 'maxResolution',
MIN_RESOLUTION: 'minResolution'
};
@@ -33,6 +34,7 @@ ol.layer.LayerProperty = {
* saturation: number,
* sourceState: ol.source.State,
* visible: boolean,
+ * extent: (ol.Extent|undefined),
* maxResolution: number,
* minResolution: number}}
*/
@@ -141,6 +143,7 @@ ol.layer.Base.prototype.getLayerState = function() {
var saturation = this.getSaturation();
var sourceState = this.getSourceState();
var visible = this.getVisible();
+ var extent = this.getExtent();
var maxResolution = this.getMaxResolution();
var minResolution = this.getMinResolution();
return {
@@ -152,6 +155,7 @@ ol.layer.Base.prototype.getLayerState = function() {
saturation: goog.isDef(saturation) ? Math.max(saturation, 0) : 1,
sourceState: sourceState,
visible: goog.isDef(visible) ? !!visible : true,
+ extent: extent,
maxResolution: goog.isDef(maxResolution) ? maxResolution : Infinity,
minResolution: goog.isDef(minResolution) ? Math.max(minResolution, 0) : 0
};
@@ -174,6 +178,21 @@ ol.layer.Base.prototype.getLayersArray = goog.abstractMethod;
ol.layer.Base.prototype.getLayerStatesArray = goog.abstractMethod;
+/**
+ * @return {ol.Extent|undefined} The layer extent.
+ * @observable
+ * @api
+ */
+ol.layer.Base.prototype.getExtent = function() {
+ return /** @type {ol.Extent|undefined} */ (
+ this.get(ol.layer.LayerProperty.EXTENT));
+};
+goog.exportProperty(
+ ol.layer.Base.prototype,
+ 'getExtent',
+ ol.layer.Base.prototype.getExtent);
+
+
/**
* @return {number|undefined} The maximum resolution of the layer.
* @observable
@@ -320,6 +339,22 @@ goog.exportProperty(
ol.layer.Base.prototype.setHue);
+/**
+ * Set the extent at which the layer is visible. If `undefined`, the layer
+ * will be visible at all extents.
+ * @param {ol.Extent|undefined} extent The extent of the layer.
+ * @observable
+ * @api
+ */
+ol.layer.Base.prototype.setExtent = function(extent) {
+ this.set(ol.layer.LayerProperty.EXTENT, extent);
+};
+goog.exportProperty(
+ ol.layer.Base.prototype,
+ 'setExtent',
+ ol.layer.Base.prototype.setExtent);
+
+
/**
* @param {number|undefined} maxResolution The maximum resolution of the layer.
* @observable
diff --git a/src/ol/layer/layergroup.js b/src/ol/layer/layergroup.js
index daf4b8e099..fc6edd8579 100644
--- a/src/ol/layer/layergroup.js
+++ b/src/ol/layer/layergroup.js
@@ -11,6 +11,7 @@ goog.require('ol.CollectionEvent');
goog.require('ol.CollectionEventType');
goog.require('ol.Object');
goog.require('ol.ObjectEventType');
+goog.require('ol.extent');
goog.require('ol.layer.Base');
goog.require('ol.source.State');
@@ -211,6 +212,10 @@ ol.layer.Group.prototype.getLayerStatesArray = function(opt_states) {
layerState.maxResolution, ownLayerState.maxResolution);
layerState.minResolution = Math.max(
layerState.minResolution, ownLayerState.minResolution);
+ if (goog.isDef(ownLayerState.extent) && goog.isDef(layerState.extent)) {
+ layerState.extent = ol.extent.getIntersection(
+ layerState.extent, ownLayerState.extent);
+ }
}
return states;
diff --git a/src/ol/renderer/canvas/canvasimagelayerrenderer.js b/src/ol/renderer/canvas/canvasimagelayerrenderer.js
index 706a64b3eb..b03f771ec5 100644
--- a/src/ol/renderer/canvas/canvasimagelayerrenderer.js
+++ b/src/ol/renderer/canvas/canvasimagelayerrenderer.js
@@ -7,6 +7,7 @@ goog.require('goog.vec.Mat4');
goog.require('ol.ImageBase');
goog.require('ol.ImageState');
goog.require('ol.ViewHint');
+goog.require('ol.extent');
goog.require('ol.layer.Image');
goog.require('ol.renderer.Map');
goog.require('ol.renderer.canvas.Layer');
@@ -102,9 +103,16 @@ ol.renderer.canvas.ImageLayer.prototype.prepareFrame =
var hints = frameState.viewHints;
- if (!hints[ol.ViewHint.ANIMATING] && !hints[ol.ViewHint.INTERACTING]) {
+ var renderedExtent = frameState.extent;
+ if (goog.isDef(layerState.extent)) {
+ renderedExtent = ol.extent.getIntersection(
+ renderedExtent, layerState.extent);
+ }
+
+ if (!hints[ol.ViewHint.ANIMATING] && !hints[ol.ViewHint.INTERACTING] &&
+ !ol.extent.isEmpty(renderedExtent)) {
image = imageSource.getImage(
- frameState.extent, viewResolution, pixelRatio, viewState.projection);
+ renderedExtent, viewResolution, pixelRatio, viewState.projection);
if (!goog.isNull(image)) {
var imageState = image.getState();
if (imageState == ol.ImageState.IDLE) {
diff --git a/src/ol/renderer/canvas/canvastilelayerrenderer.js b/src/ol/renderer/canvas/canvastilelayerrenderer.js
index fce4840011..6fd8025e35 100644
--- a/src/ol/renderer/canvas/canvastilelayerrenderer.js
+++ b/src/ol/renderer/canvas/canvastilelayerrenderer.js
@@ -193,6 +193,11 @@ ol.renderer.canvas.TileLayer.prototype.prepareFrame =
} else {
extent = frameState.extent;
}
+
+ if (goog.isDef(layerState.extent)) {
+ extent = ol.extent.getIntersection(extent, layerState.extent);
+ }
+
var tileRange = tileGrid.getTileRangeForExtentAndResolution(
extent, tileResolution);
@@ -233,6 +238,11 @@ ol.renderer.canvas.TileLayer.prototype.prepareFrame =
if (z != this.renderedCanvasZ_ ||
!this.renderedCanvasTileRange_.containsTileRange(tileRange)) {
this.renderedCanvasTileRange_ = null;
+ // Due to limited layer extent, we may be rendering tiles on a small
+ // portion of the canvas.
+ if (z < this.renderedCanvasZ_) {
+ this.context_.clearRect(0, 0, canvasWidth, canvasHeight);
+ }
}
}
}
diff --git a/src/ol/renderer/dom/domimagelayerrenderer.js b/src/ol/renderer/dom/domimagelayerrenderer.js
index dca23f358e..5300e5e361 100644
--- a/src/ol/renderer/dom/domimagelayerrenderer.js
+++ b/src/ol/renderer/dom/domimagelayerrenderer.js
@@ -10,6 +10,7 @@ goog.require('ol.ImageBase');
goog.require('ol.ImageState');
goog.require('ol.ViewHint');
goog.require('ol.dom');
+goog.require('ol.extent');
goog.require('ol.layer.Image');
goog.require('ol.renderer.dom.Layer');
goog.require('ol.source.Image');
@@ -89,8 +90,15 @@ ol.renderer.dom.ImageLayer.prototype.prepareFrame =
var hints = frameState.viewHints;
- if (!hints[ol.ViewHint.ANIMATING] && !hints[ol.ViewHint.INTERACTING]) {
- var image_ = imageSource.getImage(frameState.extent, viewResolution,
+ var renderedExtent = frameState.extent;
+ if (goog.isDef(layerState.extent)) {
+ renderedExtent = ol.extent.getIntersection(
+ renderedExtent, layerState.extent);
+ }
+
+ if (!hints[ol.ViewHint.ANIMATING] && !hints[ol.ViewHint.INTERACTING] &&
+ !ol.extent.isEmpty(renderedExtent)) {
+ var image_ = imageSource.getImage(renderedExtent, viewResolution,
frameState.pixelRatio, viewState.projection);
if (!goog.isNull(image_)) {
var imageState = image_.getState();
diff --git a/src/ol/renderer/dom/domtilelayerrenderer.js b/src/ol/renderer/dom/domtilelayerrenderer.js
index a41ac5837a..cb6c14dda9 100644
--- a/src/ol/renderer/dom/domtilelayerrenderer.js
+++ b/src/ol/renderer/dom/domtilelayerrenderer.js
@@ -109,6 +109,11 @@ ol.renderer.dom.TileLayer.prototype.prepareFrame =
} else {
extent = frameState.extent;
}
+
+ if (goog.isDef(layerState.extent)) {
+ extent = ol.extent.getIntersection(extent, layerState.extent);
+ }
+
var tileRange = tileGrid.getTileRangeForExtentAndResolution(
extent, tileResolution);
diff --git a/src/ol/renderer/webgl/webglimagelayerrenderer.js b/src/ol/renderer/webgl/webglimagelayerrenderer.js
index b9187754ed..37976f8d3b 100644
--- a/src/ol/renderer/webgl/webglimagelayerrenderer.js
+++ b/src/ol/renderer/webgl/webglimagelayerrenderer.js
@@ -10,6 +10,7 @@ goog.require('ol.Extent');
goog.require('ol.ImageBase');
goog.require('ol.ImageState');
goog.require('ol.ViewHint');
+goog.require('ol.extent');
goog.require('ol.layer.Image');
goog.require('ol.renderer.webgl.Layer');
goog.require('ol.source.Image');
@@ -119,8 +120,14 @@ ol.renderer.webgl.ImageLayer.prototype.prepareFrame =
var hints = frameState.viewHints;
- if (!hints[ol.ViewHint.ANIMATING] && !hints[ol.ViewHint.INTERACTING]) {
- var image_ = imageSource.getImage(frameState.extent, viewResolution,
+ var renderedExtent = frameState.extent;
+ if (goog.isDef(layerState.extent)) {
+ renderedExtent = ol.extent.getIntersection(
+ renderedExtent, layerState.extent);
+ }
+ if (!hints[ol.ViewHint.ANIMATING] && !hints[ol.ViewHint.INTERACTING] &&
+ !ol.extent.isEmpty(renderedExtent)) {
+ var image_ = imageSource.getImage(renderedExtent, viewResolution,
frameState.pixelRatio, viewState.projection);
if (!goog.isNull(image_)) {
var imageState = image_.getState();
diff --git a/src/ol/renderer/webgl/webgltilelayerrenderer.js b/src/ol/renderer/webgl/webgltilelayerrenderer.js
index e6269184a0..bfbae29cf8 100644
--- a/src/ol/renderer/webgl/webgltilelayerrenderer.js
+++ b/src/ol/renderer/webgl/webgltilelayerrenderer.js
@@ -207,11 +207,18 @@ ol.renderer.webgl.TileLayer.prototype.prepareFrame =
var allTilesLoaded = true;
var tmpExtent = ol.extent.createEmpty();
var tmpTileRange = new ol.TileRange(0, 0, 0, 0);
- var childTileRange, fullyLoaded, tile, tileState, x, y;
+ var childTileRange, fullyLoaded, tile, tileState, x, y, tileExtent;
for (x = tileRange.minX; x <= tileRange.maxX; ++x) {
for (y = tileRange.minY; y <= tileRange.maxY; ++y) {
tile = tileSource.getTile(z, x, y, pixelRatio, projection);
+ if (goog.isDef(layerState.extent)) {
+ // ignore tiles outside layer extent
+ tileExtent = tileGrid.getTileCoordExtent(tile.tileCoord, tmpExtent);
+ if (!ol.extent.intersects(tileExtent, layerState.extent)) {
+ continue;
+ }
+ }
tileState = tile.getState();
if (tileState == ol.TileState.LOADED) {
if (mapRenderer.isTileTextureLoaded(tile)) {
@@ -243,7 +250,7 @@ ol.renderer.webgl.TileLayer.prototype.prepareFrame =
var zs = goog.array.map(goog.object.getKeys(tilesToDrawByZ), Number);
goog.array.sort(zs);
var u_tileOffset = goog.vec.Vec4.createFloat32();
- var i, ii, sx, sy, tileExtent, tileKey, tilesToDraw, tx, ty;
+ var i, ii, sx, sy, tileKey, tilesToDraw, tx, ty;
for (i = 0, ii = zs.length; i < ii; ++i) {
tilesToDraw = tilesToDrawByZ[zs[i]];
for (tileKey in tilesToDraw) {
diff --git a/src/ol/source/debugtilesource.js b/src/ol/source/debugtilesource.js
index 999bd81b69..de6c580655 100644
--- a/src/ol/source/debugtilesource.js
+++ b/src/ol/source/debugtilesource.js
@@ -89,7 +89,6 @@ ol.DebugTile_.prototype.getImage = function(opt_context) {
ol.source.TileDebug = function(options) {
goog.base(this, {
- extent: options.extent,
opaque: false,
projection: options.projection,
tileGrid: options.tileGrid
diff --git a/src/ol/source/formatvectorsource.js b/src/ol/source/formatvectorsource.js
index 2a5e383145..3911da274f 100644
--- a/src/ol/source/formatvectorsource.js
+++ b/src/ol/source/formatvectorsource.js
@@ -33,7 +33,6 @@ ol.source.FormatVector = function(options) {
goog.base(this, {
attributions: options.attributions,
- extent: options.extent,
logo: options.logo,
projection: options.projection
});
diff --git a/src/ol/source/imagecanvassource.js b/src/ol/source/imagecanvassource.js
index 99fe1365a7..d76e7c7adc 100644
--- a/src/ol/source/imagecanvassource.js
+++ b/src/ol/source/imagecanvassource.js
@@ -20,7 +20,6 @@ ol.source.ImageCanvas = function(options) {
goog.base(this, {
attributions: options.attributions,
- extent: options.extent,
logo: options.logo,
projection: options.projection,
resolutions: options.resolutions,
diff --git a/src/ol/source/imagestaticsource.js b/src/ol/source/imagestaticsource.js
index d6d721013d..5eda133275 100644
--- a/src/ol/source/imagestaticsource.js
+++ b/src/ol/source/imagestaticsource.js
@@ -31,7 +31,6 @@ ol.source.ImageStatic = function(options) {
goog.base(this, {
attributions: attributions,
- extent: options.extent,
logo: options.logo,
projection: projection,
resolutions: [imageResolution]
diff --git a/src/ol/source/imagevectorsource.js b/src/ol/source/imagevectorsource.js
index d444c51762..4ce73c04cf 100644
--- a/src/ol/source/imagevectorsource.js
+++ b/src/ol/source/imagevectorsource.js
@@ -75,7 +75,6 @@ ol.source.ImageVector = function(options) {
goog.base(this, {
attributions: options.attributions,
canvasFunction: goog.bind(this.canvasFunctionInternal_, this),
- extent: options.extent,
logo: options.logo,
projection: options.projection,
ratio: options.ratio,
diff --git a/src/ol/source/imagewmssource.js b/src/ol/source/imagewmssource.js
index e7663c90bb..95b9980219 100644
--- a/src/ol/source/imagewmssource.js
+++ b/src/ol/source/imagewmssource.js
@@ -31,7 +31,6 @@ ol.source.ImageWMS = function(opt_options) {
goog.base(this, {
attributions: options.attributions,
- extent: options.extent,
logo: options.logo,
projection: options.projection,
resolutions: options.resolutions
diff --git a/src/ol/source/kmlsource.js b/src/ol/source/kmlsource.js
index 8cdfb8f621..27c6e0bd83 100644
--- a/src/ol/source/kmlsource.js
+++ b/src/ol/source/kmlsource.js
@@ -22,7 +22,6 @@ ol.source.KML = function(opt_options) {
goog.base(this, {
attributions: options.attributions,
doc: options.doc,
- extent: options.extent,
format: new ol.format.KML({
defaultStyle: options.defaultStyle
}),
diff --git a/src/ol/source/mapguidesource.js b/src/ol/source/mapguidesource.js
index fdd1ce664f..283d4cff71 100644
--- a/src/ol/source/mapguidesource.js
+++ b/src/ol/source/mapguidesource.js
@@ -21,7 +21,6 @@ goog.require('ol.source.Image');
ol.source.MapGuide = function(options) {
goog.base(this, {
- extent: options.extent,
projection: options.projection,
resolutions: options.resolutions
});
diff --git a/src/ol/source/osmxmlsource.js b/src/ol/source/osmxmlsource.js
index 989786e6f7..dc6dff6c62 100644
--- a/src/ol/source/osmxmlsource.js
+++ b/src/ol/source/osmxmlsource.js
@@ -22,7 +22,6 @@ ol.source.OSMXML = function(opt_options) {
goog.base(this, {
attributions: options.attributions,
doc: options.doc,
- extent: options.extent,
format: new ol.format.OSMXML(),
logo: options.logo,
node: options.node,
diff --git a/src/ol/source/servervectorsource.js b/src/ol/source/servervectorsource.js
index ac5add8dcc..b2b4f6e873 100644
--- a/src/ol/source/servervectorsource.js
+++ b/src/ol/source/servervectorsource.js
@@ -23,7 +23,6 @@ ol.source.ServerVector = function(options) {
goog.base(this, {
attributions: options.attributions,
- extent: options.extent,
format: options.format,
logo: options.logo,
projection: options.projection
diff --git a/src/ol/source/source.js b/src/ol/source/source.js
index a7633ecd9f..b02f016cb0 100644
--- a/src/ol/source/source.js
+++ b/src/ol/source/source.js
@@ -22,7 +22,6 @@ ol.source.State = {
/**
* @typedef {{attributions: (Array.|undefined),
- * extent: (ol.Extent|undefined),
* logo: (string|olx.LogoOptions|undefined),
* projection: ol.proj.ProjectionLike,
* state: (ol.source.State|string|undefined)}}
@@ -52,14 +51,6 @@ ol.source.Source = function(options) {
*/
this.projection_ = ol.proj.get(options.projection);
- /**
- * @private
- * @type {ol.Extent}
- */
- this.extent_ = goog.isDef(options.extent) ?
- options.extent : goog.isDef(options.projection) ?
- this.projection_.getExtent() : null;
-
/**
* @private
* @type {Array.}
@@ -106,14 +97,6 @@ ol.source.Source.prototype.getAttributions = function() {
};
-/**
- * @return {ol.Extent} Extent.
- */
-ol.source.Source.prototype.getExtent = function() {
- return this.extent_;
-};
-
-
/**
* @return {string|olx.LogoOptions|undefined} Logo.
*/
@@ -153,14 +136,6 @@ ol.source.Source.prototype.setAttributions = function(attributions) {
};
-/**
- * @param {ol.Extent} extent Extent.
- */
-ol.source.Source.prototype.setExtent = function(extent) {
- this.extent_ = extent;
-};
-
-
/**
* @param {string|olx.LogoOptions|undefined} logo Logo.
*/
diff --git a/src/ol/source/staticvectorsource.js b/src/ol/source/staticvectorsource.js
index 6f5beffa97..24c2aa7393 100644
--- a/src/ol/source/staticvectorsource.js
+++ b/src/ol/source/staticvectorsource.js
@@ -22,7 +22,6 @@ ol.source.StaticVector = function(options) {
goog.base(this, {
attributions: options.attributions,
- extent: options.extent,
format: options.format,
logo: options.logo,
projection: options.projection
diff --git a/src/ol/source/tilejsonsource.js b/src/ol/source/tilejsonsource.js
index 13df6d5989..24c1ba8402 100644
--- a/src/ol/source/tilejsonsource.js
+++ b/src/ol/source/tilejsonsource.js
@@ -59,7 +59,6 @@ ol.source.TileJSON.prototype.handleTileJSONResponse = function(tileJSON) {
var transform = ol.proj.getTransformFromProjections(
epsg4326Projection, this.getProjection());
extent = ol.extent.applyTransform(tileJSON.bounds, transform);
- this.setExtent(extent);
}
if (goog.isDef(tileJSON.scheme)) {
diff --git a/src/ol/source/tilevectorsource.js b/src/ol/source/tilevectorsource.js
index 4637e8a8c4..6b8fb5fd2f 100644
--- a/src/ol/source/tilevectorsource.js
+++ b/src/ol/source/tilevectorsource.js
@@ -24,7 +24,6 @@ ol.source.TileVector = function(options) {
goog.base(this, {
attributions: options.attributions,
- extent: options.extent,
format: options.format,
logo: options.logo,
projection: options.projection
@@ -48,9 +47,7 @@ ol.source.TileVector = function(options) {
* @private
* @type {ol.TileCoordTransformType}
*/
- this.tileCoordTransform_ = tileGrid.createTileCoordTransform({
- extent: options.extent
- });
+ this.tileCoordTransform_ = tileGrid.createTileCoordTransform();
/**
* @private
diff --git a/src/ol/source/tilewmssource.js b/src/ol/source/tilewmssource.js
index 46ea249a5c..d0d4c5c5f6 100644
--- a/src/ol/source/tilewmssource.js
+++ b/src/ol/source/tilewmssource.js
@@ -40,7 +40,6 @@ ol.source.TileWMS = function(opt_options) {
goog.base(this, {
attributions: options.attributions,
crossOrigin: options.crossOrigin,
- extent: options.extent,
logo: options.logo,
opaque: !transparent,
projection: options.projection,
@@ -394,12 +393,6 @@ ol.source.TileWMS.prototype.tileUrlFunction_ =
tileResolution * gutter, tileExtent);
}
- var extent = this.getExtent();
- if (!goog.isNull(extent) && (!ol.extent.intersects(tileExtent, extent) ||
- ol.extent.touches(tileExtent, extent))) {
- return undefined;
- }
-
if (pixelRatio != 1) {
tileSize = (tileSize * pixelRatio + 0.5) | 0;
}
diff --git a/src/ol/source/vectorsource.js b/src/ol/source/vectorsource.js
index e368b5c00a..7353292b24 100644
--- a/src/ol/source/vectorsource.js
+++ b/src/ol/source/vectorsource.js
@@ -54,7 +54,6 @@ ol.source.Vector = function(opt_options) {
goog.base(this, {
attributions: options.attributions,
- extent: options.extent,
logo: options.logo,
projection: options.projection,
state: options.state
@@ -332,6 +331,7 @@ ol.source.Vector.prototype.getClosestFeatureToCoordinate =
/**
+ * Get the extent of the features currently in the source.
* @return {ol.Extent} Extent.
* @api
*/
diff --git a/src/ol/source/wmtssource.js b/src/ol/source/wmtssource.js
index ec14dc39b3..a9ed21da7f 100644
--- a/src/ol/source/wmtssource.js
+++ b/src/ol/source/wmtssource.js
@@ -154,13 +154,9 @@ ol.source.WMTS = function(options) {
var x = tileCoord.x;
var y = -tileCoord.y - 1;
var tileExtent = tileGrid.getTileCoordExtent(tileCoord);
- var projectionExtent = projection.getExtent();
- var extent = goog.isDef(options.extent) ?
- options.extent : projectionExtent;
+ var extent = projection.getExtent();
- if (!goog.isNull(extent) && projection.isGlobal() &&
- extent[0] === projectionExtent[0] &&
- extent[2] === projectionExtent[2]) {
+ if (!goog.isNull(extent) && projection.isGlobal()) {
var numCols = Math.ceil(
ol.extent.getWidth(extent) /
ol.extent.getWidth(tileExtent));
@@ -181,7 +177,6 @@ ol.source.WMTS = function(options) {
goog.base(this, {
attributions: options.attributions,
crossOrigin: options.crossOrigin,
- extent: options.extent,
logo: options.logo,
projection: options.projection,
tileGrid: tileGrid,
diff --git a/src/ol/source/xyzsource.js b/src/ol/source/xyzsource.js
index faca7ae717..5ccf3bec14 100644
--- a/src/ol/source/xyzsource.js
+++ b/src/ol/source/xyzsource.js
@@ -30,7 +30,6 @@ ol.source.XYZ = function(options) {
goog.base(this, {
attributions: options.attributions,
crossOrigin: options.crossOrigin,
- extent: options.extent,
logo: options.logo,
projection: projection,
tileGrid: tileGrid,
@@ -44,7 +43,6 @@ ol.source.XYZ = function(options) {
* @type {ol.TileCoordTransformType}
*/
this.tileCoordTransform_ = tileGrid.createTileCoordTransform({
- extent: options.extent,
wrapX: options.wrapX
});
diff --git a/test/spec/ol/extent.test.js b/test/spec/ol/extent.test.js
index a8dfcc5e37..4a884b64ab 100644
--- a/test/spec/ol/extent.test.js
+++ b/test/spec/ol/extent.test.js
@@ -24,6 +24,30 @@ describe('ol.extent', function() {
});
+ describe('getIntersection()', function() {
+ it('returns the intersection of two extents', function() {
+ var world = [-180, -90, 180, 90];
+ var north = [-180, 0, 180, 90];
+ var farNorth = [-180, 45, 180, 90];
+ var east = [0, -90, 180, 90];
+ var farEast = [90, -90, 180, 90];
+ var south = [-180, -90, 180, 0];
+ var farSouth = [-180, -90, 180, -45];
+ var west = [-180, -90, 0, 90];
+ var farWest = [-180, -90, -90, 90];
+ var none = ol.extent.createEmpty();
+ expect(ol.extent.getIntersection(world, none)).to.eql(none);
+ expect(ol.extent.getIntersection(world, north)).to.eql(north);
+ expect(ol.extent.getIntersection(world, east)).to.eql(east);
+ expect(ol.extent.getIntersection(world, south)).to.eql(south);
+ expect(ol.extent.getIntersection(world, west)).to.eql(west);
+ expect(ol.extent.getIntersection(farEast, farWest)).to.eql(none);
+ expect(ol.extent.getIntersection(farNorth, farSouth)).to.eql(none);
+ expect(ol.extent.getIntersection(north, west)).to.eql([-180, 0, 0, 90]);
+ expect(ol.extent.getIntersection(east, south)).to.eql([0, -90, 180, 0]);
+ });
+ });
+
describe('containsCoordinate', function() {
describe('positive', function() {
diff --git a/test/spec/ol/layer/layer.test.js b/test/spec/ol/layer/layer.test.js
index be6297f268..71bea3b08d 100644
--- a/test/spec/ol/layer/layer.test.js
+++ b/test/spec/ol/layer/layer.test.js
@@ -56,6 +56,7 @@ describe('ol.layer.Layer', function() {
saturation: 1,
visible: true,
sourceState: ol.source.State.READY,
+ extent: undefined,
maxResolution: Infinity,
minResolution: 0
});
@@ -99,6 +100,7 @@ describe('ol.layer.Layer', function() {
saturation: 5,
visible: false,
sourceState: ol.source.State.READY,
+ extent: undefined,
maxResolution: 500,
minResolution: 0.25
});
@@ -191,6 +193,7 @@ describe('ol.layer.Layer', function() {
saturation: 0.3,
visible: false,
sourceState: ol.source.State.READY,
+ extent: undefined,
maxResolution: 500,
minResolution: 0.25
});
@@ -212,6 +215,7 @@ describe('ol.layer.Layer', function() {
saturation: 0,
visible: false,
sourceState: ol.source.State.READY,
+ extent: undefined,
maxResolution: Infinity,
minResolution: 0
});
@@ -231,6 +235,7 @@ describe('ol.layer.Layer', function() {
saturation: 42,
visible: true,
sourceState: ol.source.State.READY,
+ extent: undefined,
maxResolution: Infinity,
minResolution: 0
});
diff --git a/test/spec/ol/layer/layergroup.test.js b/test/spec/ol/layer/layergroup.test.js
index d26885f25f..b9c6918842 100644
--- a/test/spec/ol/layer/layergroup.test.js
+++ b/test/spec/ol/layer/layergroup.test.js
@@ -52,6 +52,7 @@ describe('ol.layer.Group', function() {
saturation: 1,
visible: true,
sourceState: ol.source.State.READY,
+ extent: undefined,
maxResolution: Infinity,
minResolution: 0
});
@@ -179,6 +180,7 @@ describe('ol.layer.Group', function() {
saturation: 5,
visible: false,
sourceState: ol.source.State.READY,
+ extent: undefined,
maxResolution: 500,
minResolution: 0.25
});
@@ -190,6 +192,56 @@ describe('ol.layer.Group', function() {
goog.dispose(layerGroup);
});
+ it('accepts an extent option', function() {
+ var layer = new ol.layer.Layer({
+ source: new ol.source.Source({
+ projection: 'EPSG:4326'
+ })
+ });
+
+ var groupExtent = [-10, -5, 10, 5];
+ var layerGroup = new ol.layer.Group({
+ layers: [layer],
+ brightness: 0.5,
+ contrast: 10,
+ hue: 180,
+ opacity: 0.5,
+ saturation: 5,
+ visible: false,
+ extent: groupExtent,
+ maxResolution: 500,
+ minResolution: 0.25
+ });
+
+ expect(layerGroup.getBrightness()).to.be(0.5);
+ expect(layerGroup.getContrast()).to.be(10);
+ expect(layerGroup.getHue()).to.be(180);
+ expect(layerGroup.getOpacity()).to.be(0.5);
+ expect(layerGroup.getSaturation()).to.be(5);
+ expect(layerGroup.getVisible()).to.be(false);
+ expect(layerGroup.getExtent()).to.eql(groupExtent);
+ expect(layerGroup.getMaxResolution()).to.be(500);
+ expect(layerGroup.getMinResolution()).to.be(0.25);
+ expect(layerGroup.getLayerState()).to.eql({
+ layer: layerGroup,
+ brightness: 0.5,
+ contrast: 10,
+ hue: 180,
+ opacity: 0.5,
+ saturation: 5,
+ visible: false,
+ sourceState: ol.source.State.READY,
+ extent: groupExtent,
+ maxResolution: 500,
+ minResolution: 0.25
+ });
+ expect(layerGroup.getLayers()).to.be.a(ol.Collection);
+ expect(layerGroup.getLayers().getLength()).to.be(1);
+ expect(layerGroup.getLayers().item(0)).to.be(layer);
+
+ goog.dispose(layer);
+ goog.dispose(layerGroup);
+ });
});
describe('#getLayerState', function() {
@@ -211,6 +263,8 @@ describe('ol.layer.Group', function() {
layerGroup.setOpacity(0.3);
layerGroup.setSaturation(0.3);
layerGroup.setVisible(false);
+ var groupExtent = [-100, 50, 100, 50];
+ layerGroup.setExtent(groupExtent);
layerGroup.setMaxResolution(500);
layerGroup.setMinResolution(0.25);
expect(layerGroup.getLayerState()).to.eql({
@@ -222,6 +276,7 @@ describe('ol.layer.Group', function() {
saturation: 0.3,
visible: false,
sourceState: ol.source.State.READY,
+ extent: groupExtent,
maxResolution: 500,
minResolution: 0.25
});
@@ -243,6 +298,7 @@ describe('ol.layer.Group', function() {
saturation: 0,
visible: false,
sourceState: ol.source.State.READY,
+ extent: undefined,
maxResolution: Infinity,
minResolution: 0
});
@@ -262,6 +318,7 @@ describe('ol.layer.Group', function() {
saturation: 42,
visible: true,
sourceState: ol.source.State.READY,
+ extent: undefined,
maxResolution: Infinity,
minResolution: 0
});
@@ -384,6 +441,7 @@ describe('ol.layer.Group', function() {
saturation: 25,
visible: false,
sourceState: ol.source.State.READY,
+ extent: undefined,
maxResolution: 150,
minResolution: 0.25
});
diff --git a/test/spec/ol/source/tilesource.test.js b/test/spec/ol/source/tilesource.test.js
index bb668d6b2b..f893e8d61e 100644
--- a/test/spec/ol/source/tilesource.test.js
+++ b/test/spec/ol/source/tilesource.test.js
@@ -20,7 +20,8 @@ describe('ol.source.Tile', function() {
var loadedTilesByZ = {};
var grid = source.getTileGrid();
- var range = grid.getTileRangeForExtentAndZ(source.getExtent(), 3);
+ var extent = [-180, -180, 180, 180];
+ var range = grid.getTileRangeForExtentAndZ(extent, 3);
function getTileIfLoaded(z, x, y) {
var tile = source.getTile(z, x, y);
@@ -42,7 +43,8 @@ describe('ol.source.Tile', function() {
var loadedTilesByZ = {};
var grid = source.getTileGrid();
- var range = grid.getTileRangeForExtentAndZ(source.getExtent(), 0);
+ var extent = [-180, -180, 180, 180];
+ var range = grid.getTileRangeForExtentAndZ(extent, 0);
function getTileIfLoaded(z, x, y) {
var tile = source.getTile(z, x, y);
@@ -66,7 +68,8 @@ describe('ol.source.Tile', function() {
var loadedTilesByZ = {};
var grid = source.getTileGrid();
- var range = grid.getTileRangeForExtentAndZ(source.getExtent(), 1);
+ var extent = [-180, -180, 180, 180];
+ var range = grid.getTileRangeForExtentAndZ(extent, 1);
function getTileIfLoaded(z, x, y) {
var tile = source.getTile(z, x, y);
@@ -92,7 +95,8 @@ describe('ol.source.Tile', function() {
var loadedTilesByZ = {};
var grid = source.getTileGrid();
- var range = grid.getTileRangeForExtentAndZ(source.getExtent(), 1);
+ var extent = [-180, -180, 180, 180];
+ var range = grid.getTileRangeForExtentAndZ(extent, 1);
function getTileIfLoaded(z, x, y) {
var tile = source.getTile(z, x, y);
return (!goog.isNull(tile) && tile.getState() === ol.TileState.LOADED) ?
@@ -117,7 +121,8 @@ describe('ol.source.Tile', function() {
}
};
var grid = source.getTileGrid();
- var range = grid.getTileRangeForExtentAndZ(source.getExtent(), 1);
+ var extent = [-180, -180, 180, 180];
+ var range = grid.getTileRangeForExtentAndZ(extent, 1);
function getTileIfLoaded(z, x, y) {
var tile = source.getTile(z, x, y);
@@ -140,7 +145,8 @@ describe('ol.source.Tile', function() {
var loadedTilesByZ = {};
var grid = source.getTileGrid();
- var range = grid.getTileRangeForExtentAndZ(source.getExtent(), 1);
+ var extent = [-180, -180, 180, 180];
+ var range = grid.getTileRangeForExtentAndZ(extent, 1);
function getTileIfLoaded(z, x, y) {
var tile = source.getTile(z, x, y);
@@ -165,7 +171,8 @@ describe('ol.source.Tile', function() {
}
};
var grid = source.getTileGrid();
- var range = grid.getTileRangeForExtentAndZ(source.getExtent(), 1);
+ var extent = [-180, -180, 180, 180];
+ var range = grid.getTileRangeForExtentAndZ(extent, 1);
function getTileIfLoaded(z, x, y) {
var tile = source.getTile(z, x, y);
@@ -192,16 +199,13 @@ describe('ol.source.Tile', function() {
* @param {Object.} loaded Lookup of already loaded tiles.
*/
ol.test.source.TileMock = function(loaded) {
- var extent = [-180, -180, 180, 180];
var tileGrid = new ol.tilegrid.TileGrid({
resolutions: [360 / 256, 180 / 256, 90 / 256, 45 / 256],
- extent: extent,
origin: [-180, -180],
tileSize: 256
});
goog.base(this, {
- extent: extent,
projection: ol.proj.get('EPSG:4326'),
tileGrid: tileGrid
});
diff --git a/test/spec/ol/source/tilewmssource.test.js b/test/spec/ol/source/tilewmssource.test.js
index c64247d3fb..d62dee4f46 100644
--- a/test/spec/ol/source/tilewmssource.test.js
+++ b/test/spec/ol/source/tilewmssource.test.js
@@ -126,22 +126,6 @@ describe('ol.source.TileWMS', function() {
expect(queryData.get('BBOX')).to.be('-45,-45,0,0');
});
- it('does not return a tile if it touches layers extent', function() {
- options.extent = [-80, -40, -45, -10];
- var source = new ol.source.TileWMS(options);
- var tileCoord = new ol.TileCoord(3, 3, 1);
- var url = source.tileUrlFunction(tileCoord, 1, ol.proj.get('EPSG:4326'));
- expect(url).to.be(undefined);
- });
-
- it('does not return a tile outside of layers extent', function() {
- options.extent = [-80, -40, -45, -10];
- var source = new ol.source.TileWMS(options);
- var tileCoord = new ol.TileCoord(3, 4, 2);
- var url = source.tileUrlFunction(tileCoord, 1, ol.proj.get('EPSG:4326'));
- expect(url).to.be(undefined);
- });
-
});
describe('#getGetFeatureInfo', function() {