| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 | import Credit from "../Core/Credit.js";import defaultValue from "../Core/defaultValue.js";import defined from "../Core/defined.js";import DeveloperError from "../Core/DeveloperError.js";import Rectangle from "../Core/Rectangle.js";import Resource from "../Core/Resource.js";import WebMercatorTilingScheme from "../Core/WebMercatorTilingScheme.js";import UrlTemplateImageryProvider from "./UrlTemplateImageryProvider.js";const defaultCredit = new Credit(  "MapQuest, Open Street Map and contributors, CC-BY-SA");/** * @typedef {Object} OpenStreetMapImageryProvider.ConstructorOptions * * Initialization options for the OpenStreetMapImageryProvider constructor * * @property {String} [url='https://a.tile.openstreetmap.org'] The OpenStreetMap server url. * @property {String} [fileExtension='png'] The file extension for images on the server. * @property {Rectangle} [rectangle=Rectangle.MAX_VALUE] The rectangle of the layer. * @property {Number} [minimumLevel=0] The minimum level-of-detail supported by the imagery provider. * @property {Number} [maximumLevel] The maximum level-of-detail supported by the imagery provider, or undefined if there is no limit. * @property {Ellipsoid} [ellipsoid] The ellipsoid.  If not specified, the WGS84 ellipsoid is used. * @property {Credit|String} [credit='MapQuest, Open Street Map and contributors, CC-BY-SA'] A credit for the data source, which is displayed on the canvas. *//** * An imagery provider that provides tiled imagery hosted by OpenStreetMap * or another provider of Slippy tiles.  The default url connects to OpenStreetMap's volunteer-run * servers, so you must conform to their * {@link http://wiki.openstreetmap.org/wiki/Tile_usage_policy|Tile Usage Policy}. * * @alias OpenStreetMapImageryProvider * @constructor * @extends UrlTemplateImageryProvider * * @param {OpenStreetMapImageryProvider.ConstructorOptions} options Object describing initialization options * @exception {DeveloperError} The rectangle and minimumLevel indicate that there are more than four tiles at the minimum level. Imagery providers with more than four tiles at the minimum level are not supported. * * @see ArcGisMapServerImageryProvider * @see BingMapsImageryProvider * @see GoogleEarthEnterpriseMapsProvider * @see SingleTileImageryProvider * @see TileMapServiceImageryProvider * @see WebMapServiceImageryProvider * @see WebMapTileServiceImageryProvider * @see UrlTemplateImageryProvider * * @example * const osm = new Cesium.OpenStreetMapImageryProvider({ *     url : 'https://a.tile.openstreetmap.org/' * }); * * @see {@link http://wiki.openstreetmap.org/wiki/Main_Page|OpenStreetMap Wiki} * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing} */function OpenStreetMapImageryProvider(options) {  options = defaultValue(options, defaultValue.EMPTY_OBJECT);  const resource = Resource.createIfNeeded(    defaultValue(options.url, "https://a.tile.openstreetmap.org/")  );  resource.appendForwardSlash();  resource.url += `{z}/{x}/{y}.${defaultValue(options.fileExtension, "png")}`;  const tilingScheme = new WebMercatorTilingScheme({    ellipsoid: options.ellipsoid,  });  const tileWidth = 256;  const tileHeight = 256;  const minimumLevel = defaultValue(options.minimumLevel, 0);  const maximumLevel = options.maximumLevel;  const rectangle = defaultValue(options.rectangle, tilingScheme.rectangle);  // Check the number of tiles at the minimum level.  If it's more than four,  // throw an exception, because starting at the higher minimum  // level will cause too many tiles to be downloaded and rendered.  const swTile = tilingScheme.positionToTileXY(    Rectangle.southwest(rectangle),    minimumLevel  );  const neTile = tilingScheme.positionToTileXY(    Rectangle.northeast(rectangle),    minimumLevel  );  const tileCount =    (Math.abs(neTile.x - swTile.x) + 1) * (Math.abs(neTile.y - swTile.y) + 1);  //>>includeStart('debug', pragmas.debug);  if (tileCount > 4) {    throw new DeveloperError(      `The rectangle and minimumLevel indicate that there are ${tileCount} tiles at the minimum level. Imagery providers with more than four tiles at the minimum level are not supported.`    );  }  //>>includeEnd('debug');  let credit = defaultValue(options.credit, defaultCredit);  if (typeof credit === "string") {    credit = new Credit(credit);  }  UrlTemplateImageryProvider.call(this, {    url: resource,    credit: credit,    tilingScheme: tilingScheme,    tileWidth: tileWidth,    tileHeight: tileHeight,    minimumLevel: minimumLevel,    maximumLevel: maximumLevel,    rectangle: rectangle,  });}if (defined(Object.create)) {  OpenStreetMapImageryProvider.prototype = Object.create(    UrlTemplateImageryProvider.prototype  );  OpenStreetMapImageryProvider.prototype.constructor = OpenStreetMapImageryProvider;}export default OpenStreetMapImageryProvider;
 |