@@ -60,6 +60,10 @@ const metersPerUnit = {
60
60
M : 1 ,
61
61
USFEET : 1200 / 3937
62
62
} ;
63
+ const dpiConfig = {
64
+ default : 96 , // 常用dpi
65
+ iServerWMTS : 90.7142857142857 // iserver使用的wmts图层dpi
66
+ }
63
67
/**
64
68
* @class ol.supermap.WebMap
65
69
* @category iPortal/Online
@@ -509,8 +513,9 @@ export class WebMap extends Observable {
509
513
*/
510
514
addMVTBaseMap ( mapInfo ) {
511
515
// 获取地图详细信息
512
- return this . getMBStyle ( mapInfo ) . then ( baseLayerInfo => {
516
+ return this . getMBStyle ( mapInfo ) . then ( ( ) => {
513
517
// 创建图层
518
+ let baseLayerInfo = mapInfo . baseLayer ;
514
519
return this . createMVTLayer ( baseLayerInfo ) . then ( layer => {
515
520
let layerID = Util . newGuid ( 8 ) ;
516
521
if ( baseLayerInfo . name ) {
@@ -565,7 +570,7 @@ export class WebMap extends Observable {
565
570
if ( ( baseLayer . visibleScales && baseLayer . visibleScales . length > 0 ) || ( baseLayer . scales && baseLayer . scales . length > 0 ) ) {
566
571
//底图有固定比例尺,就直接获取。不用view计算
567
572
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 ) {
569
574
let width = extent [ 2 ] - extent [ 0 ] ;
570
575
let height = extent [ 3 ] - extent [ 1 ] ;
571
576
let maxResolution1 = width / 512 ;
@@ -1159,6 +1164,8 @@ export class WebMap extends Observable {
1159
1164
} else {
1160
1165
extent = olProj . get ( that . baseProjection ) . getExtent ( )
1161
1166
}
1167
+ const isKvp = layerInfo . requestEncoding === 'KVP' ;
1168
+ layerInfo . tileUrl = that . getTileUrl ( capabilities . OperationsMetadata . GetTile . DCP . HTTP . Get , isKvp , layerInfo . layer , layerInfo . tileMatrixSet ) ;
1162
1169
//将需要的参数补上
1163
1170
layerInfo . dpi = 90.7 ;
1164
1171
layerInfo . extent = extent ;
@@ -1167,8 +1174,6 @@ export class WebMap extends Observable {
1167
1174
layerInfo . name = name ;
1168
1175
layerInfo . orginEpsgCode = layerInfo . projection ;
1169
1176
layerInfo . overLayer = true ;
1170
- //只有这种,Dataviz里面不应该选择
1171
- layerInfo . requestEncoding = 'KVP' ;
1172
1177
layerInfo . scales = scales ;
1173
1178
layerInfo . style = "default" ;
1174
1179
layerInfo . title = name ;
@@ -1185,6 +1190,30 @@ export class WebMap extends Observable {
1185
1190
that . errorCallback && that . errorCallback ( error , 'getWmtsFaild' , that . map )
1186
1191
} ) ;
1187
1192
}
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
+ }
1188
1217
1189
1218
/**
1190
1219
* @private
@@ -1199,7 +1228,7 @@ export class WebMap extends Observable {
1199
1228
// 单位通过坐标系获取 (PS: 以前代码非4326 都默认是米)
1200
1229
let unit = olProj . get ( this . baseProjection ) . getUnits ( ) ;
1201
1230
return new olSource . WMTS ( {
1202
- url : layerInfo . url ,
1231
+ url : layerInfo . tileUrl || layerInfo . url ,
1203
1232
layer : layerInfo . layer ,
1204
1233
format : layerInfo . layerFormat ,
1205
1234
matrixSet : layerInfo . tileMatrixSet ,
@@ -1244,8 +1273,8 @@ export class WebMap extends Observable {
1244
1273
*/
1245
1274
getReslutionsFromScales ( scales , dpi , unit , datumAxis ) {
1246
1275
unit = ( unit && unit . toLowerCase ( ) ) || 'degrees' ;
1247
- dpi = dpi > 0 ? dpi : 96 ;
1248
- datumAxis = datumAxis || 6378137 ;
1276
+ dpi = dpi || dpiConfig . iServerWMTS ;
1277
+ datumAxis = datumAxis || 6370997 ;
1249
1278
let res = [ ] ,
1250
1279
matrixIds = [ ] ;
1251
1280
//给个默认的
@@ -3762,7 +3791,6 @@ export class WebMap extends Observable {
3762
3791
baseLayer = mapInfo . baseLayer ,
3763
3792
dataSource = baseLayer . dataSource || { } ,
3764
3793
{ url, serverId } = dataSource ,
3765
- layerInfo = { } ,
3766
3794
styleUrl ;
3767
3795
styleUrl = serverId !== undefined ? `${ this . server } web/datas/${ serverId } /download` : url ;
3768
3796
return FetchRequest . get ( this . getRequestUrl ( styleUrl ) , null , {
@@ -3778,24 +3806,21 @@ export class WebMap extends Observable {
3778
3806
let extent = styles . metadata . mapbounds ;
3779
3807
baseLayer . extent = extent ; // 这里把extent保存一下
3780
3808
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 = {
3791
3817
bottom : extent [ 1 ] ,
3792
3818
left : extent [ 0 ] ,
3793
3819
leftBottom : { x : extent [ 0 ] , y : extent [ 1 ] } ,
3794
3820
right : extent [ 2 ] ,
3795
3821
rightTop : { x : extent [ 2 ] , y : extent [ 3 ] } ,
3796
3822
top : extent [ 3 ]
3797
3823
}
3798
- return layerInfo ;
3799
3824
} )
3800
3825
}
3801
3826
0 commit comments