maplibre-gl
Version:
BSD licensed community fork of mapbox-gl, a WebGL interactive maps library
42 lines (35 loc) • 1.59 kB
text/typescript
import {pick, extend} from '../util/util';
import {getJSON, ResourceType} from '../util/ajax';
import browser from '../util/browser';
import type {RequestManager} from '../util/request_manager';
import type {Callback} from '../types/callback';
import type {TileJSON} from '../types/tilejson';
import type {Cancelable} from '../types/cancelable';
import type {RasterDEMSourceSpecification, RasterSourceSpecification, VectorSourceSpecification} from '../style-spec/types.g';
export default function loadTileJson(
options: RasterSourceSpecification | RasterDEMSourceSpecification | VectorSourceSpecification,
requestManager: RequestManager,
callback: Callback<TileJSON>
): Cancelable {
const loaded = function(err: Error, tileJSON: any) {
if (err) {
return callback(err);
} else if (tileJSON) {
const result: any = pick(
// explicit source options take precedence over TileJSON
extend(tileJSON, options),
['tiles', 'minzoom', 'maxzoom', 'attribution', 'bounds', 'scheme', 'tileSize', 'encoding']
);
if (tileJSON.vector_layers) {
result.vectorLayers = tileJSON.vector_layers;
result.vectorLayerIds = result.vectorLayers.map((layer) => { return layer.id; });
}
callback(null, result);
}
};
if (options.url) {
return getJSON(requestManager.transformRequest(options.url, ResourceType.Source), loaded);
} else {
return browser.frame(() => loaded(null, options));
}
}