|  |  |  | @ -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 } | 
		
	
	
		
			
				
					|  |  |  | 
 |