| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 | 
							- /**
 -  * @Author: Caven
 -  * @Date: 2020-01-15 20:27:27
 -  */
 - 
 - import { Cesium } from '@dc-modules/namespace'
 - import ImageryType from '../ImageryType'
 - import BaiduMercatorTilingScheme from '../tiling-scheme/BaiduMercatorTilingScheme'
 - 
 - const IMG_URL =
 -   'http://shangetu{s}.map.bdimg.com/it/u=x={x};y={y};z={z};v=009;type=sate&fm=46'
 - 
 - const VEC_URL =
 -   'http://online{s}.map.bdimg.com/tile/?qt=tile&x={x}&y={y}&z={z}&styles=sl&v=020'
 - 
 - const CUSTOM_URL =
 -   'http://api{s}.map.bdimg.com/customimage/tile?&x={x}&y={y}&z={z}&scale=1&customid={style}'
 - 
 - const TRAFFIC_URL =
 -   'http://its.map.baidu.com:8002/traffic/TrafficTileService?time={time}&label={labelStyle}&v=016&level={z}&x={x}&y={y}&scaler=2'
 - 
 - class BaiduImageryProvider {
 -   constructor(options = {}) {
 -     this._url =
 -       options.style === 'img'
 -         ? IMG_URL
 -         : options.style === 'vec'
 -         ? VEC_URL
 -         : options.style === 'traffic'
 -         ? TRAFFIC_URL
 -         : CUSTOM_URL
 -     this._labelStyle = options.labelStyle || 'web2D'
 -     this._tileWidth = 256
 -     this._tileHeight = 256
 -     this._maximumLevel = 18
 -     this._crs = options.crs || 'BD09'
 -     if (options.crs === 'WGS84') {
 -       let resolutions = []
 -       for (let i = 0; i < 19; i++) {
 -         resolutions[i] = 256 * Math.pow(2, 18 - i)
 -       }
 -       this._tilingScheme = new BaiduMercatorTilingScheme({
 -         resolutions,
 -         rectangleSouthwestInMeters: new Cesium.Cartesian2(
 -           -20037726.37,
 -           -12474104.17
 -         ),
 -         rectangleNortheastInMeters: new Cesium.Cartesian2(
 -           20037726.37,
 -           12474104.17
 -         )
 -       })
 -     } else {
 -       this._tilingScheme = new Cesium.WebMercatorTilingScheme({
 -         rectangleSouthwestInMeters: new Cesium.Cartesian2(-33554054, -33746824),
 -         rectangleNortheastInMeters: new Cesium.Cartesian2(33554054, 33746824)
 -       })
 -     }
 -     this._rectangle = this._tilingScheme.rectangle
 -     this._credit = undefined
 -     this._token = undefined
 -     this._style = options.style || 'normal'
 -   }
 - 
 -   get url() {
 -     return this._url
 -   }
 - 
 -   get token() {
 -     return this._token
 -   }
 - 
 -   get tileWidth() {
 -     if (!this.ready) {
 -       throw new Cesium.DeveloperError(
 -         'tileWidth must not be called before the imagery provider is ready.'
 -       )
 -     }
 -     return this._tileWidth
 -   }
 - 
 -   get tileHeight() {
 -     if (!this.ready) {
 -       throw new Cesium.DeveloperError(
 -         'tileHeight must not be called before the imagery provider is ready.'
 -       )
 -     }
 -     return this._tileHeight
 -   }
 - 
 -   get maximumLevel() {
 -     if (!this.ready) {
 -       throw new Cesium.DeveloperError(
 -         'maximumLevel must not be called before the imagery provider is ready.'
 -       )
 -     }
 -     return this._maximumLevel
 -   }
 - 
 -   get minimumLevel() {
 -     if (!this.ready) {
 -       throw new Cesium.DeveloperError(
 -         'minimumLevel must not be called before the imagery provider is ready.'
 -       )
 -     }
 -     return 0
 -   }
 - 
 -   get tilingScheme() {
 -     if (!this.ready) {
 -       throw new Cesium.DeveloperError(
 -         'tilingScheme must not be called before the imagery provider is ready.'
 -       )
 -     }
 -     return this._tilingScheme
 -   }
 - 
 -   get rectangle() {
 -     if (!this.ready) {
 -       throw new Cesium.DeveloperError(
 -         'rectangle must not be called before the imagery provider is ready.'
 -       )
 -     }
 -     return this._rectangle
 -   }
 - 
 -   get ready() {
 -     return !!this._url
 -   }
 - 
 -   get credit() {
 -     return this._credit
 -   }
 - 
 -   get hasAlphaChannel() {
 -     return true
 -   }
 - 
 -   getTileCredits(x, y, level) {}
 - 
 -   /**
 -    * Request Image
 -    * @param x
 -    * @param y
 -    * @param level
 -    * @returns {Promise<HTMLImageElement | HTMLCanvasElement>}
 -    */
 -   requestImage(x, y, level) {
 -     if (!this.ready) {
 -       throw new Cesium.DeveloperError(
 -         'requestImage must not be called before the imagery provider is ready.'
 -       )
 -     }
 -     let xTiles = this._tilingScheme.getNumberOfXTilesAtLevel(level)
 -     let yTiles = this._tilingScheme.getNumberOfYTilesAtLevel(level)
 -     let url = this._url
 -       .replace('{z}', level)
 -       .replace('{s}', String(1))
 -       .replace('{style}', this._style)
 -       .replace('{labelStyle}', this._labelStyle)
 -       .replace('{time}', String(new Date().getTime()))
 - 
 -     if (this._crs === 'WGS84') {
 -       url = url.replace('{x}', String(x)).replace('{y}', String(-y))
 -     } else {
 -       url = url
 -         .replace('{x}', String(x - xTiles / 2))
 -         .replace('{y}', String(yTiles / 2 - y - 1))
 -     }
 -     return Cesium.ImageryProvider.loadImage(this, url)
 -   }
 - }
 - 
 - ImageryType.BAIDU = 'baidu'
 - 
 - export default BaiduImageryProvider
 
 
  |