UNPKG

openlayers

Version:

Build tools and sources for developing OpenLayers based mapping applications

98 lines (87 loc) 2.47 kB
goog.provide('ol.Attribution'); goog.require('ol.TileRange'); goog.require('ol.math'); goog.require('ol.tilegrid'); /** * @classdesc * An attribution for a layer source. * * Example: * * source: new ol.source.OSM({ * attributions: [ * new ol.Attribution({ * html: 'All maps &copy; ' + * '<a href="https://www.opencyclemap.org/">OpenCycleMap</a>' * }), * ol.source.OSM.ATTRIBUTION * ], * .. * * @constructor * @param {olx.AttributionOptions} options Attribution options. * @struct * @api stable */ ol.Attribution = function(options) { /** * @private * @type {string} */ this.html_ = options.html; /** * @private * @type {Object.<string, Array.<ol.TileRange>>} */ this.tileRanges_ = options.tileRanges ? options.tileRanges : null; }; /** * Get the attribution markup. * @return {string} The attribution HTML. * @api stable */ ol.Attribution.prototype.getHTML = function() { return this.html_; }; /** * @param {Object.<string, ol.TileRange>} tileRanges Tile ranges. * @param {!ol.tilegrid.TileGrid} tileGrid Tile grid. * @param {!ol.proj.Projection} projection Projection. * @return {boolean} Intersects any tile range. */ ol.Attribution.prototype.intersectsAnyTileRange = function(tileRanges, tileGrid, projection) { if (!this.tileRanges_) { return true; } var i, ii, tileRange, zKey; for (zKey in tileRanges) { if (!(zKey in this.tileRanges_)) { continue; } tileRange = tileRanges[zKey]; var testTileRange; for (i = 0, ii = this.tileRanges_[zKey].length; i < ii; ++i) { testTileRange = this.tileRanges_[zKey][i]; if (testTileRange.intersects(tileRange)) { return true; } var extentTileRange = tileGrid.getTileRangeForExtentAndZ( ol.tilegrid.extentFromProjection(projection), parseInt(zKey, 10)); var width = extentTileRange.getWidth(); if (tileRange.minX < extentTileRange.minX || tileRange.maxX > extentTileRange.maxX) { if (testTileRange.intersects(new ol.TileRange( ol.math.modulo(tileRange.minX, width), ol.math.modulo(tileRange.maxX, width), tileRange.minY, tileRange.maxY))) { return true; } if (tileRange.getWidth() > width && testTileRange.intersects(extentTileRange)) { return true; } } } } return false; };