@@ -60,6 +60,10 @@ const metersPerUnit = {
6060 M : 1 ,
6161 USFEET : 1200 / 3937
6262} ;
63+ const dpiConfig = {
64+ default : 96 , // 常用dpi
65+ iServerWMTS : 90.7142857142857 // iserver使用的wmts图层dpi
66+ }
6367/**
6468 * @class ol.supermap.WebMap
6569 * @category iPortal/Online
@@ -509,8 +513,9 @@ export class WebMap extends Observable {
509513 */
510514 addMVTBaseMap ( mapInfo ) {
511515 // 获取地图详细信息
512- return this . getMBStyle ( mapInfo ) . then ( baseLayerInfo => {
516+ return this . getMBStyle ( mapInfo ) . then ( ( ) => {
513517 // 创建图层
518+ let baseLayerInfo = mapInfo . baseLayer ;
514519 return this . createMVTLayer ( baseLayerInfo ) . then ( layer => {
515520 let layerID = Util . newGuid ( 8 ) ;
516521 if ( baseLayerInfo . name ) {
@@ -565,7 +570,7 @@ export class WebMap extends Observable {
565570 if ( ( baseLayer . visibleScales && baseLayer . visibleScales . length > 0 ) || ( baseLayer . scales && baseLayer . scales . length > 0 ) ) {
566571 //底图有固定比例尺,就直接获取。不用view计算
567572 this . getScales ( baseLayer ) ;
568- } else if ( options . baseLayer && [ 'TILE' , 'MAPBOXSTYLE ' ] . includes ( options . baseLayer . layerType ) && extent && extent . length === 4 ) {
573+ } else if ( options . baseLayer && [ 'TILE' , 'VECTOR_TILE ' ] . includes ( options . baseLayer . layerType ) && extent && extent . length === 4 ) {
569574 let width = extent [ 2 ] - extent [ 0 ] ;
570575 let height = extent [ 3 ] - extent [ 1 ] ;
571576 let maxResolution1 = width / 512 ;
@@ -1159,6 +1164,8 @@ export class WebMap extends Observable {
11591164 } else {
11601165 extent = olProj . get ( that . baseProjection ) . getExtent ( )
11611166 }
1167+ const isKvp = layerInfo . requestEncoding === 'KVP' ;
1168+ layerInfo . tileUrl = that . getTileUrl ( capabilities . OperationsMetadata . GetTile . DCP . HTTP . Get , isKvp , layerInfo . layer , layerInfo . tileMatrixSet ) ;
11621169 //将需要的参数补上
11631170 layerInfo . dpi = 90.7 ;
11641171 layerInfo . extent = extent ;
@@ -1167,8 +1174,6 @@ export class WebMap extends Observable {
11671174 layerInfo . name = name ;
11681175 layerInfo . orginEpsgCode = layerInfo . projection ;
11691176 layerInfo . overLayer = true ;
1170- //只有这种,Dataviz里面不应该选择
1171- layerInfo . requestEncoding = 'KVP' ;
11721177 layerInfo . scales = scales ;
11731178 layerInfo . style = "default" ;
11741179 layerInfo . title = name ;
@@ -1185,6 +1190,30 @@ export class WebMap extends Observable {
11851190 that . errorCallback && that . errorCallback ( error , 'getWmtsFaild' , that . map )
11861191 } ) ;
11871192 }
1193+ /**
1194+ * @private
1195+ * @function ol.supermap.WebMap.prototype.getTileUrl
1196+ * @description 获取wmts的图层参数。
1197+ * @param {array } getTileArray - 图层信息。
1198+ * @param {boolean } isKvp - 是否是kvp方式
1199+ * @param {string } layer - 选择的图层
1200+ * @param {string } matrixSet -选择比例尺
1201+ */
1202+ getTileUrl ( getTileArray , isKvp , layer , matrixSet ) {
1203+ let url , type = isKvp ? 'KVP' : 'RESTful' ;
1204+ getTileArray . forEach ( data => {
1205+ if ( data . Constraint [ 0 ] . AllowedValues . Value [ 0 ] . toUpperCase ( ) === type . toUpperCase ( ) ) {
1206+ url = data . href ;
1207+ }
1208+ } )
1209+ if ( ! isKvp ) {
1210+ //Restful格式
1211+ url = `${ url } ${ layer } /default/${ matrixSet } /{TileMatrix}/{TileRow}/{TileCol}.png` ;
1212+ //supermap iserver发布的restful会有一个?
1213+ url = url . replace ( '?' , '/' ) ;
1214+ }
1215+ return url ;
1216+ }
11881217
11891218 /**
11901219 * @private
@@ -1199,7 +1228,7 @@ export class WebMap extends Observable {
11991228 // 单位通过坐标系获取 (PS: 以前代码非4326 都默认是米)
12001229 let unit = olProj . get ( this . baseProjection ) . getUnits ( ) ;
12011230 return new olSource . WMTS ( {
1202- url : layerInfo . url ,
1231+ url : layerInfo . tileUrl || layerInfo . url ,
12031232 layer : layerInfo . layer ,
12041233 format : layerInfo . layerFormat ,
12051234 matrixSet : layerInfo . tileMatrixSet ,
@@ -1244,8 +1273,8 @@ export class WebMap extends Observable {
12441273 */
12451274 getReslutionsFromScales ( scales , dpi , unit , datumAxis ) {
12461275 unit = ( unit && unit . toLowerCase ( ) ) || 'degrees' ;
1247- dpi = dpi > 0 ? dpi : 96 ;
1248- datumAxis = datumAxis || 6378137 ;
1276+ dpi = dpi || dpiConfig . iServerWMTS ;
1277+ datumAxis = datumAxis || 6370997 ;
12491278 let res = [ ] ,
12501279 matrixIds = [ ] ;
12511280 //给个默认的
@@ -3762,7 +3791,6 @@ export class WebMap extends Observable {
37623791 baseLayer = mapInfo . baseLayer ,
37633792 dataSource = baseLayer . dataSource || { } ,
37643793 { url, serverId } = dataSource ,
3765- layerInfo = { } ,
37663794 styleUrl ;
37673795 styleUrl = serverId !== undefined ? `${ this . server } web/datas/${ serverId } /download` : url ;
37683796 return FetchRequest . get ( this . getRequestUrl ( styleUrl ) , null , {
@@ -3778,24 +3806,21 @@ export class WebMap extends Observable {
37783806 let extent = styles . metadata . mapbounds ;
37793807 baseLayer . extent = extent ; // 这里把extent保存一下
37803808
3781- layerInfo . projection = mapInfo . projection ;
3782- layerInfo . epsgCode = mapInfo . projection ;
3783- layerInfo . visible = baseLayer . visible ;
3784- layerInfo . name = baseLayer . name ;
3785- layerInfo . url = url ;
3786- layerInfo . sourceType = 'VECTOR_TILE' ;
3787- layerInfo . layerType = 'VECTOR_TILE' ;
3788- layerInfo . styles = styles ;
3789- layerInfo . extent = extent ;
3790- layerInfo . bounds = {
3809+ baseLayer . projection = mapInfo . projection ;
3810+ baseLayer . epsgCode = mapInfo . projection ;
3811+ baseLayer . url = url ;
3812+ baseLayer . sourceType = 'VECTOR_TILE' ;
3813+ baseLayer . layerType = 'VECTOR_TILE' ;
3814+ baseLayer . styles = styles ;
3815+ baseLayer . extent = extent ;
3816+ baseLayer . bounds = {
37913817 bottom : extent [ 1 ] ,
37923818 left : extent [ 0 ] ,
37933819 leftBottom : { x : extent [ 0 ] , y : extent [ 1 ] } ,
37943820 right : extent [ 2 ] ,
37953821 rightTop : { x : extent [ 2 ] , y : extent [ 3 ] } ,
37963822 top : extent [ 3 ]
37973823 }
3798- return layerInfo ;
37993824 } )
38003825 }
38013826
0 commit comments