Merge pull request #7117 from tschaub/vector-tilegrid
Sensible default tilegrid for vector tiles
This commit is contained in:
@@ -2,6 +2,27 @@
|
|||||||
|
|
||||||
### Next release
|
### Next release
|
||||||
|
|
||||||
|
#### `ol.source.VectorTile` no longer requires a `tileGrid` option
|
||||||
|
|
||||||
|
By default, the `ol.source.VectorTile` constructor creates an XYZ tile grid (in Web Mercator) for 512 pixel tiles and assumes a max zoom level of 22. If you were creating a vector tile source with an explicit `tileGrid` option, you can now remove this.
|
||||||
|
|
||||||
|
Before:
|
||||||
|
```js
|
||||||
|
var source = new ol.source.VectorTile({
|
||||||
|
tileGrid: ol.tilegrid.createXYZ({tileSize: 512, maxZoom: 22}),
|
||||||
|
url: url
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
After:
|
||||||
|
```js
|
||||||
|
var source = new ol.source.VectorTile({
|
||||||
|
url: url
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
If you need to change the max zoom level, you can pass the source a `maxZoom` option. If you need to change the tile size, you can pass the source a `tileSize` option. If you need a completely custom tile grid, you can still pass the source a `tileGrid` option.
|
||||||
|
|
||||||
#### `ol.interaction.Modify` deletes with `alt` key only
|
#### `ol.interaction.Modify` deletes with `alt` key only
|
||||||
|
|
||||||
To delete features with the modify interaction, press the `alt` key while clicking on an existing vertex. If you want to configure the modify interaction with a different delete condition, use the `deleteCondition` option. For example, to allow deletion on a single click with no modifier keys, configure the interaction like this:
|
To delete features with the modify interaction, press the `alt` key while clicking on an existing vertex. If you want to configure the modify interaction with a different delete condition, use the `deleteCondition` option. For example, to allow deletion on a single click with no modifier keys, configure the interaction like this:
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ goog.require('ol.source.OSM');
|
|||||||
goog.require('ol.source.VectorTile');
|
goog.require('ol.source.VectorTile');
|
||||||
goog.require('ol.layer.Tile');
|
goog.require('ol.layer.Tile');
|
||||||
goog.require('ol.layer.VectorTile');
|
goog.require('ol.layer.VectorTile');
|
||||||
goog.require('ol.tilegrid');
|
|
||||||
goog.require('ol.proj.Projection');
|
goog.require('ol.proj.Projection');
|
||||||
|
|
||||||
|
|
||||||
@@ -77,7 +76,6 @@ fetch(url).then(function(response) {
|
|||||||
});
|
});
|
||||||
var vectorSource = new ol.source.VectorTile({
|
var vectorSource = new ol.source.VectorTile({
|
||||||
format: new ol.format.GeoJSON(),
|
format: new ol.format.GeoJSON(),
|
||||||
tileGrid: ol.tilegrid.createXYZ(),
|
|
||||||
tileLoadFunction: function(tile) {
|
tileLoadFunction: function(tile) {
|
||||||
var format = tile.getFormat();
|
var format = tile.getFormat();
|
||||||
var tileCoord = tile.getTileCoord();
|
var tileCoord = tile.getTileCoord();
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ goog.require('ol.style.Icon');
|
|||||||
goog.require('ol.style.Stroke');
|
goog.require('ol.style.Stroke');
|
||||||
goog.require('ol.style.Style');
|
goog.require('ol.style.Style');
|
||||||
goog.require('ol.style.Text');
|
goog.require('ol.style.Text');
|
||||||
goog.require('ol.tilegrid');
|
|
||||||
|
|
||||||
|
|
||||||
var key = 'pk.eyJ1IjoiYWhvY2V2YXIiLCJhIjoiRk1kMWZaSSJ9.E5BkluenyWQMsBLsuByrmg';
|
var key = 'pk.eyJ1IjoiYWhvY2V2YXIiLCJhIjoiRk1kMWZaSSJ9.E5BkluenyWQMsBLsuByrmg';
|
||||||
@@ -23,7 +22,6 @@ var map = new ol.Map({
|
|||||||
'© <a href="https://www.openstreetmap.org/copyright">' +
|
'© <a href="https://www.openstreetmap.org/copyright">' +
|
||||||
'OpenStreetMap contributors</a>',
|
'OpenStreetMap contributors</a>',
|
||||||
format: new ol.format.MVT(),
|
format: new ol.format.MVT(),
|
||||||
tileGrid: ol.tilegrid.createXYZ({tileSize: 512, maxZoom: 22}),
|
|
||||||
url: 'https://{a-d}.tiles.mapbox.com/v4/mapbox.mapbox-streets-v6/' +
|
url: 'https://{a-d}.tiles.mapbox.com/v4/mapbox.mapbox-streets-v6/' +
|
||||||
'{z}/{x}/{y}.vector.pbf?access_token=' + key
|
'{z}/{x}/{y}.vector.pbf?access_token=' + key
|
||||||
}),
|
}),
|
||||||
|
|||||||
@@ -7,8 +7,6 @@ goog.require('ol.source.VectorTile');
|
|||||||
goog.require('ol.style.Fill');
|
goog.require('ol.style.Fill');
|
||||||
goog.require('ol.style.Stroke');
|
goog.require('ol.style.Stroke');
|
||||||
goog.require('ol.style.Style');
|
goog.require('ol.style.Style');
|
||||||
goog.require('ol.tilegrid');
|
|
||||||
|
|
||||||
|
|
||||||
var key = 'vector-tiles-5eJz6JX';
|
var key = 'vector-tiles-5eJz6JX';
|
||||||
|
|
||||||
@@ -70,7 +68,7 @@ var map = new ol.Map({
|
|||||||
layerName: 'layer',
|
layerName: 'layer',
|
||||||
layers: ['water', 'roads', 'buildings']
|
layers: ['water', 'roads', 'buildings']
|
||||||
}),
|
}),
|
||||||
tileGrid: ol.tilegrid.createXYZ({tileSize: 512, maxZoom: 19}),
|
maxZoom: 19,
|
||||||
url: 'https://tile.mapzen.com/mapzen/vector/v1/all/{z}/{x}/{y}.topojson?api_key=' + key
|
url: 'https://tile.mapzen.com/mapzen/vector/v1/all/{z}/{x}/{y}.topojson?api_key=' + key
|
||||||
}),
|
}),
|
||||||
style: function(feature, resolution) {
|
style: function(feature, resolution) {
|
||||||
|
|||||||
@@ -27,16 +27,26 @@ goog.require('ol.source.UrlTile');
|
|||||||
* @api
|
* @api
|
||||||
*/
|
*/
|
||||||
ol.source.VectorTile = function(options) {
|
ol.source.VectorTile = function(options) {
|
||||||
|
var projection = options.projection || 'EPSG:3857';
|
||||||
|
|
||||||
|
var extent = options.extent || ol.tilegrid.extentFromProjection(projection);
|
||||||
|
|
||||||
|
var tileGrid = options.tileGrid || ol.tilegrid.createXYZ({
|
||||||
|
extent: extent,
|
||||||
|
maxZoom: options.maxZoom || 22,
|
||||||
|
minZoom: options.minZoom,
|
||||||
|
tileSize: options.tileSize || 512
|
||||||
|
});
|
||||||
|
|
||||||
ol.source.UrlTile.call(this, {
|
ol.source.UrlTile.call(this, {
|
||||||
attributions: options.attributions,
|
attributions: options.attributions,
|
||||||
cacheSize: options.cacheSize !== undefined ? options.cacheSize : 128,
|
cacheSize: options.cacheSize !== undefined ? options.cacheSize : 128,
|
||||||
extent: options.extent,
|
extent: extent,
|
||||||
logo: options.logo,
|
logo: options.logo,
|
||||||
opaque: false,
|
opaque: false,
|
||||||
projection: options.projection,
|
projection: projection,
|
||||||
state: options.state,
|
state: options.state,
|
||||||
tileGrid: options.tileGrid,
|
tileGrid: tileGrid,
|
||||||
tileLoadFunction: options.tileLoadFunction ?
|
tileLoadFunction: options.tileLoadFunction ?
|
||||||
options.tileLoadFunction : ol.VectorImageTile.defaultLoadFunction,
|
options.tileLoadFunction : ol.VectorImageTile.defaultLoadFunction,
|
||||||
tileUrlFunction: options.tileUrlFunction,
|
tileUrlFunction: options.tileUrlFunction,
|
||||||
|
|||||||
@@ -6,13 +6,11 @@ goog.require('ol.proj');
|
|||||||
goog.require('ol.source.VectorTile');
|
goog.require('ol.source.VectorTile');
|
||||||
goog.require('ol.tilegrid');
|
goog.require('ol.tilegrid');
|
||||||
|
|
||||||
|
|
||||||
describe('ol.source.VectorTile', function() {
|
describe('ol.source.VectorTile', function() {
|
||||||
|
|
||||||
var format = new ol.format.MVT();
|
var format = new ol.format.MVT();
|
||||||
var source = new ol.source.VectorTile({
|
var source = new ol.source.VectorTile({
|
||||||
format: format,
|
format: format,
|
||||||
tileGrid: ol.tilegrid.createXYZ({tileSize: 512}),
|
|
||||||
tilePixelRatio: 8,
|
tilePixelRatio: 8,
|
||||||
url: 'spec/ol/data/{z}-{x}-{y}.vector.pbf'
|
url: 'spec/ol/data/{z}-{x}-{y}.vector.pbf'
|
||||||
});
|
});
|
||||||
@@ -22,9 +20,16 @@ describe('ol.source.VectorTile', function() {
|
|||||||
it('sets the format on the instance', function() {
|
it('sets the format on the instance', function() {
|
||||||
expect(source.format_).to.equal(format);
|
expect(source.format_).to.equal(format);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('uses ol.VectorTile as default tileClass', function() {
|
it('uses ol.VectorTile as default tileClass', function() {
|
||||||
expect(source.tileClass).to.equal(ol.VectorTile);
|
expect(source.tileClass).to.equal(ol.VectorTile);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('creates a 512 XYZ tilegrid by default', function() {
|
||||||
|
var tileGrid = ol.tilegrid.createXYZ({tileSize: 512});
|
||||||
|
expect(source.tileGrid.tileSize_).to.equal(tileGrid.tileSize_);
|
||||||
|
expect(source.tileGrid.extent_).to.equal(tileGrid.extent_);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('#getTile()', function() {
|
describe('#getTile()', function() {
|
||||||
|
|||||||
Reference in New Issue
Block a user