| 
                        123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 | 
                        - /**
 -  * @Author: Caven
 -  * @Date: 2021-01-31 19:22:04
 -  */
 - 
 - import { Cesium } from '@dc-modules/namespace'
 - import { CoordTransform } from '@dc-modules/transform'
 - import BaiduMercatorProjection from '../projection/BaiduMercatorProjection'
 - 
 - class BaiduMercatorTilingScheme extends Cesium.WebMercatorTilingScheme {
 -   constructor(options) {
 -     super(options)
 -     let projection = new BaiduMercatorProjection()
 -     this._projection.project = function(cartographic, result) {
 -       result = result || {}
 -       result = CoordTransform.WGS84ToGCJ02(
 -         Cesium.Math.toDegrees(cartographic.longitude),
 -         Cesium.Math.toDegrees(cartographic.latitude)
 -       )
 -       result = CoordTransform.GCJ02ToBD09(result[0], result[1])
 -       result[0] = Math.min(result[0], 180)
 -       result[0] = Math.max(result[0], -180)
 -       result[1] = Math.min(result[1], 74.000022)
 -       result[1] = Math.max(result[1], -71.988531)
 -       result = projection.lngLatToPoint({
 -         lng: result[0],
 -         lat: result[1]
 -       })
 -       return new Cesium.Cartesian2(result.x, result.y)
 -     }
 -     this._projection.unproject = function(cartesian, result) {
 -       result = result || {}
 -       result = projection.mercatorToLngLat({
 -         lng: cartesian.x,
 -         lat: cartesian.y
 -       })
 -       result = CoordTransform.BD09ToGCJ02(result.lng, result.lat)
 -       result = CoordTransform.GCJ02ToWGS84(result[0], result[1])
 -       return new Cesium.Cartographic(
 -         Cesium.Math.toRadians(result[0]),
 -         Cesium.Math.toRadians(result[1])
 -       )
 -     }
 -     this.resolutions = options.resolutions || []
 -   }
 - 
 -   /**
 -    *
 -    * @param x
 -    * @param y
 -    * @param level
 -    * @param result
 -    * @returns {module:cesium.Rectangle|*}
 -    */
 -   tileXYToNativeRectangle(x, y, level, result) {
 -     const tileWidth = this.resolutions[level]
 -     const west = x * tileWidth
 -     const east = (x + 1) * tileWidth
 -     const north = ((y = -y) + 1) * tileWidth
 -     const south = y * tileWidth
 - 
 -     if (!Cesium.defined(result)) {
 -       return new Cesium.Rectangle(west, south, east, north)
 -     }
 - 
 -     result.west = west
 -     result.south = south
 -     result.east = east
 -     result.north = north
 -     return result
 -   }
 - 
 -   /**
 -    *
 -    * @param position
 -    * @param level
 -    * @param result
 -    * @returns {undefined|*}
 -    */
 -   positionToTileXY(position, level, result) {
 -     const rectangle = this._rectangle
 -     if (!Cesium.Rectangle.contains(rectangle, position)) {
 -       return undefined
 -     }
 -     const projection = this._projection
 -     const webMercatorPosition = projection.project(position)
 -     if (!Cesium.defined(webMercatorPosition)) {
 -       return undefined
 -     }
 -     const tileWidth = this.resolutions[level]
 -     const xTileCoordinate = Math.floor(webMercatorPosition.x / tileWidth)
 -     const yTileCoordinate = -Math.floor(webMercatorPosition.y / tileWidth)
 -     if (!Cesium.defined(result)) {
 -       return new Cesium.Cartesian2(xTileCoordinate, yTileCoordinate)
 -     }
 -     result.x = xTileCoordinate
 -     result.y = yTileCoordinate
 -     return result
 -   }
 - }
 - 
 - export default BaiduMercatorTilingScheme
 
 
  |