|
|
|
@ -1 +1,83 @@
|
|
|
|
|
// 天地图影像服务
|
|
|
|
|
import { WebMapTileServiceImageryProvider } from 'cesium'
|
|
|
|
|
//地图服务枚举类型:_c为墨卡托投影,_w为经纬度投影
|
|
|
|
|
enum TDTLayerType {
|
|
|
|
|
Vec = 'vec', //矢量底图
|
|
|
|
|
Cva = 'cva', //矢量注记
|
|
|
|
|
Img = 'img', //影像底图
|
|
|
|
|
Cia = 'cia', //影像注记
|
|
|
|
|
Ter = 'ter', //地形晕渲
|
|
|
|
|
Cta = 'cta', //地形注记
|
|
|
|
|
Ibo = 'ibo', //全球境界
|
|
|
|
|
}
|
|
|
|
|
enum TDTProjectionType {
|
|
|
|
|
WebMercator = 'w',
|
|
|
|
|
WGS84 = 'c',
|
|
|
|
|
}
|
|
|
|
|
//天地图token
|
|
|
|
|
const TDT_tk = '1c5b7cbf9da7d33b221f68c32b6a1791'
|
|
|
|
|
// 服务域名
|
|
|
|
|
const tdtUrl = 'https://t{s}.tianditu.gov.cn'
|
|
|
|
|
// 服务负载子域
|
|
|
|
|
const subdomains = ['0', '1', '2', '3', '4', '5', '6', '7']
|
|
|
|
|
/**
|
|
|
|
|
* 获取天地图影像服务
|
|
|
|
|
* @param layerType :影像类型
|
|
|
|
|
* @param projectionType :投影类型,注WGS84下有问题
|
|
|
|
|
* @param minimumLevel :最小缩放级别
|
|
|
|
|
* @param maximumLevel :最大缩放级别
|
|
|
|
|
* @returns :ImageryProvider
|
|
|
|
|
*/
|
|
|
|
|
export function getTDTProvider(
|
|
|
|
|
layerType: string,
|
|
|
|
|
projectionType: string,
|
|
|
|
|
minimumLevel: number = 0,
|
|
|
|
|
maximumLevel: number = 18,
|
|
|
|
|
) {
|
|
|
|
|
// 切片方式
|
|
|
|
|
const tilingScheme =
|
|
|
|
|
projectionType == TDTProjectionType.WGS84
|
|
|
|
|
? new Cesium.GeographicTilingScheme()
|
|
|
|
|
: new Cesium.WebMercatorTilingScheme()
|
|
|
|
|
const tileMatrixLabels =
|
|
|
|
|
projectionType == TDTProjectionType.WGS84
|
|
|
|
|
? new Array(19).fill(1).map((v, i) => `${i}`)
|
|
|
|
|
: undefined
|
|
|
|
|
const imageryProvider = new WebMapTileServiceImageryProvider({
|
|
|
|
|
//影像底图
|
|
|
|
|
url:
|
|
|
|
|
`${tdtUrl}/DataServer?T=${layerType}_${projectionType}&x={TileCol}&y={TileRow}&l={TileMatrix}&tk=` +
|
|
|
|
|
TDT_tk,
|
|
|
|
|
subdomains: subdomains, //天地图8个服务器
|
|
|
|
|
minimumLevel: minimumLevel, //定义最小缩放级别
|
|
|
|
|
maximumLevel: maximumLevel, //定义最大缩放级别
|
|
|
|
|
layer: layerType,
|
|
|
|
|
style: 'default',
|
|
|
|
|
format: 'tiles',
|
|
|
|
|
tileMatrixSetID: projectionType, //'GoogleMapsCompatible', //使用谷歌的瓦片切片方式
|
|
|
|
|
tilingScheme: tilingScheme,
|
|
|
|
|
tileMatrixLabels: tileMatrixLabels,
|
|
|
|
|
})
|
|
|
|
|
return imageryProvider
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* 获取天地图三维地形服务
|
|
|
|
|
* @returns ImageryProvider
|
|
|
|
|
*/
|
|
|
|
|
export function getTDTTerrainProvider() {
|
|
|
|
|
const terrainUrls: string[] = []
|
|
|
|
|
|
|
|
|
|
for (let i = 0; i < subdomains.length; i++) {
|
|
|
|
|
const url =
|
|
|
|
|
tdtUrl.replace('{s}', subdomains[i]) +
|
|
|
|
|
'/mapservice/swdx?T=elv_c&tk=' +
|
|
|
|
|
TDT_tk
|
|
|
|
|
terrainUrls.push(url)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const provider = new Cesium.GeoTerrainProvider({
|
|
|
|
|
urls: terrainUrls,
|
|
|
|
|
})
|
|
|
|
|
return provider
|
|
|
|
|
}
|
|
|
|
|
export { TDTLayerType, TDTProjectionType }
|
|
|
|
|