ol-mbtiles
Version:
MBTiles format reader for Openlayers
56 lines (53 loc) • 1.88 kB
text/typescript
import Map from 'ol/Map.js';
import TileLayer from 'ol/layer/Tile.js';
import View from 'ol/View.js';
import VectorTileLayer from 'ol/layer/VectorTile';
import TileDebug from 'ol/source/TileDebug';
import { fromLonLat } from 'ol/proj';
import Style from 'ol/style/Style';
import { FeatureLike } from 'ol/Feature';
import { importMBTiles, MBTilesVectorSource } from 'ol-mbtiles';
import { waterStyle, roadStyle, buildingStyle, boundaryStyle, placeStyle } from '../style';
// MBTiles from
// https://data.maptiler.com/downloads/dataset/osm/europe/
// 34.4 GB original file
// down to 19.2GB after vacuum (MapTiler, wtf?)
export default async function () {
return new Map({
target: 'map',
layers: [
new TileLayer({
source: new TileDebug()
}),
new VectorTileLayer({
source: new MBTilesVectorSource(await importMBTiles({
url: 'https://velivole.b-cdn.net/maptiler-osm-2017-07-03-v3.6.1-europe.mbtiles',
layers: ['transportation', 'water', 'waterway', 'landuse', 'place', 'boundary'],
// All properties from the MBTiles data can be overridden
attributions: ['MapTiler', 'OSM', 'https://data.maptiler.com/downloads/dataset/osm/europe/'],
})),
style: function (feature: FeatureLike): Style {
switch (feature.get('layer')) {
case 'water':
case 'waterway':
return waterStyle;
case 'transportation':
return roadStyle(feature);
case 'landuse':
return buildingStyle;
case 'boundary':
return boundaryStyle;
case 'place':
return placeStyle(feature);
default:
return null as unknown as Style;
}
}
})
],
view: new View({
center: fromLonLat([12, 50]),
zoom: 6
}),
});
}