/**
|
* @Author: Caven
|
* @Date: 2020-01-15 20:27:27
|
*/
|
|
import baseLayerImgUrl from '@/assets/baseUrl'
|
|
const viewerHeight = 700
|
|
class SingleTileImageryProviderMe {
|
// eslint-disable-next-line space-before-function-paren
|
constructor(viewer, options) {
|
this._url = options.url
|
this._viewer = viewer
|
|
this._tilingScheme = new global.DC.Namespace.Cesium.WebMercatorTilingScheme({
|
rectangleSouthwestInMeters: new global.DC.Namespace.Cesium.Cartesian2(-33554054, -33746824),
|
rectangleNortheastInMeters: new global.DC.Namespace.Cesium.Cartesian2(33554054, 33746824)
|
})
|
|
console.log(this._tilingScheme)
|
|
this.realChange()
|
}
|
|
get url () {
|
return this._url
|
}
|
|
get viewer () {
|
return this._viewer
|
}
|
|
get rectangle () {
|
if (!this.ready) {
|
throw new global.DC.Namespace.Cesium.DeveloperError(
|
'rectangle must not be called before the imagery provider is ready.'
|
)
|
}
|
return this._rectangle
|
}
|
|
realChange () {
|
const self = this
|
this._viewer.on(global.DC.SceneEventType.CAMERA_CHANGED, function () {
|
const params = {}
|
|
const extend = self._viewer.camera.computeViewRectangle()
|
if (typeof extend === 'undefined') {
|
// 2D下会可能拾取不到坐标,extend返回undefined,所以做以下转换
|
const canvas = self._viewer.scene.canvas
|
const upperLeft = new global.DC.Namespace.Cesium.Cartesian2(0, 0)// canvas左上角坐标转2d坐标
|
const lowerRight = new global.DC.Namespace.Cesium.Cartesian2(
|
canvas.clientWidth,
|
canvas.clientHeight
|
)// canvas右下角坐标转2d坐标
|
|
const ellipsoid = self._viewer.scene.globe.ellipsoid
|
const upperLeft3 = self._viewer.camera.pickEllipsoid(
|
upperLeft,
|
ellipsoid
|
)// 2D转3D世界坐标
|
|
const lowerRight3 = self._viewer.camera.pickEllipsoid(
|
lowerRight,
|
ellipsoid
|
)// 2D转3D世界坐标
|
|
const upperLeftCartographic = self._viewer.scene.globe.ellipsoid.cartesianToCartographic(
|
upperLeft3
|
)// 3D世界坐标转弧度
|
const lowerRightCartographic = self._viewer.scene.globe.ellipsoid.cartesianToCartographic(
|
lowerRight3
|
)// 3D世界坐标转弧度
|
|
const minx = global.DC.Namespace.Cesium.Math.toDegrees(upperLeftCartographic.longitude)// 弧度转经纬度
|
const maxx = global.DC.Namespace.Cesium.Math.toDegrees(lowerRightCartographic.longitude)// 弧度转经纬度
|
|
const miny = global.DC.Namespace.Cesium.Math.toDegrees(lowerRightCartographic.latitude)// 弧度转经纬度
|
const maxy = global.DC.Namespace.Cesium.Math.toDegrees(upperLeftCartographic.latitude)// 弧度转经纬度
|
|
console.log('经度:' + minx + '----' + maxx)
|
console.log('纬度:' + miny + '----' + maxy)
|
|
params.minx = minx
|
params.maxx = maxx
|
params.miny = miny
|
params.maxy = maxy
|
} else {
|
// 3D获取方式
|
params.maxx = global.DC.Namespace.Cesium.Math.toDegrees(extend.east)
|
params.maxy = global.DC.Namespace.Cesium.Math.toDegrees(extend.north)
|
|
params.minx = global.DC.Namespace.Cesium.Math.toDegrees(extend.west)
|
params.miny = global.DC.Namespace.Cesium.Math.toDegrees(extend.south)
|
}
|
|
const extent = params
|
baseLayerImgUrl[3][viewerHeight].forEach(sm => {
|
if (
|
(
|
sm.rectangle[0] > extent.minx &&
|
sm.rectangle[1] > extent.miny &&
|
sm.rectangle[2] < extent.maxx &&
|
sm.rectangle[3] < extent.maxy
|
) ||
|
(
|
sm.rectangle[0] < extent.minx &&
|
sm.rectangle[1] < extent.maxy &&
|
sm.rectangle[2] > extent.minx &&
|
sm.rectangle[3] > extent.maxy
|
) ||
|
(
|
sm.rectangle[0] < extent.maxx &&
|
sm.rectangle[1] < extent.maxy &&
|
sm.rectangle[2] > extent.maxx &&
|
sm.rectangle[3] > extent.maxy
|
) ||
|
(
|
sm.rectangle[0] < extent.maxx &&
|
sm.rectangle[1] < extent.miny &&
|
sm.rectangle[2] > extent.maxx &&
|
sm.rectangle[3] > extent.miny
|
) ||
|
(
|
sm.rectangle[0] < extent.minx &&
|
sm.rectangle[1] < extent.miny &&
|
sm.rectangle[2] > extent.minx &&
|
sm.rectangle[3] > extent.miny
|
) ||
|
(
|
sm.rectangle[0] > extent.minx &&
|
sm.rectangle[1] < extent.maxy &&
|
sm.rectangle[2] < extent.maxx &&
|
sm.rectangle[3] > extent.maxy
|
) ||
|
(
|
sm.rectangle[0] > extent.minx &&
|
sm.rectangle[1] > extent.miny &&
|
sm.rectangle[2] > extent.maxx &&
|
sm.rectangle[3] < extent.maxy
|
) ||
|
(
|
sm.rectangle[0] > extent.minx &&
|
sm.rectangle[1] < extent.miny &&
|
sm.rectangle[2] < extent.maxx &&
|
sm.rectangle[3] > extent.miny
|
) ||
|
(
|
sm.rectangle[0] < extent.minx &&
|
sm.rectangle[1] > extent.miny &&
|
sm.rectangle[2] > extent.minx &&
|
sm.rectangle[3] < extent.maxy
|
)
|
) {
|
var min = global.DC.Namespace.Cesium.Cartesian3.fromDegrees(sm.rectangle[0], sm.rectangle[1])
|
var max = global.DC.Namespace.Cesium.Cartesian3.fromDegrees(sm.rectangle[2], sm.rectangle[3])
|
|
self._rectangle = {
|
west: min.x,
|
south: min.y,
|
east: max.x,
|
north: max.y
|
}
|
|
console.log(self)
|
|
return global.DC.Namespace.Cesium.ImageryProvider.loadImage(self, sm.url)
|
}
|
})
|
})
|
}
|
|
mapCameraEvent () {
|
|
// return global.DC.Namespace.Cesium.ImageryProvider.loadImage(this, url)
|
}
|
}
|
|
export default SingleTileImageryProviderMe
|