You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
GCSGUI/src/utils/map/TDTProvider.ts

84 lines
2.5 KiB
TypeScript

// 天地图影像服务
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 }