@@ -882,7 +882,7 @@ export class WebMap extends Observable {
882
882
*/
883
883
createDynamicTiledSource ( layerInfo , isBaseLayer ) {
884
884
let serverType = "IPORTAL" ,
885
- credential = layerInfo . credential ,
885
+ credential = layerInfo . credential ? layerInfo . credential . token : undefined ,
886
886
keyfix = 'Token' ,
887
887
keyParams = layerInfo . url ;
888
888
@@ -902,7 +902,8 @@ export class WebMap extends Observable {
902
902
serverType : serverType ,
903
903
crossOrigin : 'anonymous' ,
904
904
// extent: this.baseLayerExtent,
905
- prjCoordSys :{ epsgCode : isBaseLayer ? layerInfo . projection . split ( ':' ) [ 1 ] : this . baseProjection . split ( ':' ) [ 1 ] }
905
+ prjCoordSys :{ epsgCode : isBaseLayer ? layerInfo . projection . split ( ':' ) [ 1 ] : this . baseProjection . split ( ':' ) [ 1 ] } ,
906
+ format : layerInfo . format
906
907
} ;
907
908
if ( layerInfo . visibleScales && layerInfo . visibleScales . length > 0 ) {
908
909
let visibleResolutions = [ ] ;
@@ -1069,6 +1070,9 @@ export class WebMap extends Observable {
1069
1070
}
1070
1071
// bug IE11 不会自动编码
1071
1072
url += '.json?prjCoordSys=' + encodeURI ( JSON . stringify ( projection ) ) ;
1073
+ if ( layerInfo . credential ) {
1074
+ url = `${ url } &token=${ encodeURI ( layerInfo . credential . token ) } ` ;
1075
+ }
1072
1076
1073
1077
} else {
1074
1078
url += ( url . indexOf ( '?' ) > - 1 ? '&SERVICE=WMS&REQUEST=GetCapabilities' : '?SERVICE=WMS&REQUEST=GetCapabilities' ) ;
@@ -1079,10 +1083,13 @@ export class WebMap extends Observable {
1079
1083
} ;
1080
1084
FetchRequest . get ( that . getRequestUrl ( url ) , null , options ) . then ( function ( response ) {
1081
1085
return layerInfo . layerType === "TILE" ? response . json ( ) : response . text ( ) ;
1082
- } ) . then ( function ( result ) {
1086
+ } ) . then ( async function ( result ) {
1083
1087
if ( layerInfo . layerType === "TILE" ) {
1084
1088
layerInfo . extent = [ result . bounds . left , result . bounds . bottom , result . bounds . right , result . bounds . top ] ;
1085
1089
layerInfo . projection = `EPSG:${ result . prjCoordSys . epsgCode } ` ;
1090
+ let token = layerInfo . credential ? layerInfo . credential . token : undefined ;
1091
+ let isSupprtWebp = await that . isSupportWebp ( layerInfo . url , token ) ;
1092
+ layerInfo . format = isSupprtWebp ? 'webp' : 'png' ;
1086
1093
callback ( layerInfo ) ;
1087
1094
} else {
1088
1095
layerInfo . projection = that . baseProjection ;
@@ -1111,7 +1118,7 @@ export class WebMap extends Observable {
1111
1118
}
1112
1119
return FetchRequest . get ( that . getRequestUrl ( `${ layerInfo . url } .json` ) , null , options ) . then ( function ( response ) {
1113
1120
return response . json ( ) ;
1114
- } ) . then ( function ( result ) {
1121
+ } ) . then ( async function ( result ) {
1115
1122
// layerInfo.projection = mapInfo.projection;
1116
1123
// layerInfo.extent = [mapInfo.extent.leftBottom.x, mapInfo.extent.leftBottom.y, mapInfo.extent.rightTop.x, mapInfo.extent.rightTop.y];
1117
1124
// 比例尺 单位
@@ -1121,8 +1128,12 @@ export class WebMap extends Observable {
1121
1128
}
1122
1129
layerInfo . maxZoom = result . maxZoom ;
1123
1130
layerInfo . maxZoom = result . minZoom ;
1131
+ let token = layerInfo . credential ? layerInfo . credential . token : undefined ;
1132
+ let isSupprtWebp = await that . isSupportWebp ( layerInfo . url , token ) ;
1133
+ layerInfo . format = isSupprtWebp ? 'webp' : 'png' ;
1124
1134
// 请求结果完成 继续添加图层
1125
1135
if ( mapInfo ) {
1136
+ //todo 这个貌似没有用到,下次优化
1126
1137
callback && callback ( mapInfo , null , true , that ) ;
1127
1138
} else {
1128
1139
callback && callback ( layerInfo ) ;
@@ -4170,7 +4181,9 @@ export class WebMap extends Observable {
4170
4181
return resolutions ;
4171
4182
}
4172
4183
/**
4173
- * 判断是否同域名(如果是域名,只判断后门两级域名是否相同,第一级忽略),如果是ip地址则需要完全相同。
4184
+ * @private
4185
+ * @function ol.supermap.WebMap.prototype.isSameDomain
4186
+ * @description 判断是否同域名(如果是域名,只判断后门两级域名是否相同,第一级忽略),如果是ip地址则需要完全相同。
4174
4187
* @param {* } url
4175
4188
*/
4176
4189
isSameDomain ( url ) {
@@ -4189,4 +4202,92 @@ export class WebMap extends Observable {
4189
4202
return domainArray [ 1 ] === docDomainArray [ 1 ] && domainArray [ 2 ] === docDomainArray [ 2 ] ;
4190
4203
}
4191
4204
}
4205
+ /**
4206
+ * @private
4207
+ * @function ol.supermap.WebMap.prototype.isSupportWebp
4208
+ * @description 判断是否支持webP
4209
+ * @param {* } url 服务地址
4210
+ * @param {* } token 服务token
4211
+ * @returns {boolean }
4212
+ */
4213
+ isSupportWebp ( url , token ) {
4214
+ // 还需要判断浏览器
4215
+ let isIE = this . isIE ( ) ;
4216
+ if ( isIE || ( this . isFirefox ( ) && this . getFirefoxVersion ( ) < 65 ) ||
4217
+ ( this . isChrome ( ) && this . getChromeVersion ( ) < 32 ) ) {
4218
+ return false ;
4219
+ }
4220
+ url = token ? `${ url } /tileImage.webp?token=${ token } ` : `${ url } /tileImage.webp` ;
4221
+ url = this . getRequestUrl ( url ) ;
4222
+ return FetchRequest . get ( url , null , {
4223
+ withCredentials : this . withCredentials
4224
+ } ) . then ( function ( response ) {
4225
+ if ( response . status !== 200 ) {
4226
+ throw response . status ;
4227
+ }
4228
+ return response ;
4229
+ } ) . then ( ( ) => {
4230
+ return true ;
4231
+ } ) . catch ( ( ) => {
4232
+ return false ;
4233
+ } )
4234
+ }
4235
+ /**
4236
+ * @private
4237
+ * @function ol.supermap.WebMap.prototype.isIE
4238
+ * @description 判断当前浏览器是否为IE
4239
+ * @returns {boolean }
4240
+ */
4241
+ isIE ( ) {
4242
+ if ( ! ! window . ActiveXObject || "ActiveXObject" in window ) {
4243
+ return true ;
4244
+ }
4245
+ return false ;
4246
+ }
4247
+
4248
+ /**
4249
+ * @private
4250
+ * @function ol.supermap.WebMap.prototype.isFirefox
4251
+ * @description 判断当前浏览器是否为 firefox
4252
+ * @returns {boolean }
4253
+ */
4254
+ isFirefox ( ) {
4255
+ let userAgent = navigator . userAgent ;
4256
+ return userAgent . indexOf ( "Firefox" ) > - 1 ;
4257
+ }
4258
+
4259
+ /**
4260
+ * @private
4261
+ * @function ol.supermap.WebMap.prototype.isChrome
4262
+ * @description 判断当前浏览器是否为谷歌
4263
+ * @returns {boolean }
4264
+ */
4265
+ isChrome ( ) {
4266
+ let userAgent = navigator . userAgent ;
4267
+ return userAgent . indexOf ( "Chrome" ) > - 1 ;
4268
+ }
4269
+
4270
+ /**
4271
+ * @private
4272
+ * @function ol.supermap.WebMap.prototype.getFirefoxVersion
4273
+ * @description 获取火狐浏览器的版本号
4274
+ * @returns {Number }
4275
+ */
4276
+ getFirefoxVersion ( ) {
4277
+ let userAgent = navigator . userAgent . toLowerCase ( ) ,
4278
+ version = userAgent . match ( / f i r e f o x \/ ( [ \d . ] + ) / ) ;
4279
+ return + version [ 1 ] ;
4280
+ }
4281
+
4282
+ /**
4283
+ * @private
4284
+ * @function ol.supermap.WebMap.prototype.getChromeVersion
4285
+ * @description 获取谷歌浏览器版本号
4286
+ * @returns {Number }
4287
+ */
4288
+ getChromeVersion ( ) {
4289
+ let userAgent = navigator . userAgent . toLowerCase ( ) ,
4290
+ version = userAgent . match ( / c h r o m e \/ ( [ \d . ] + ) / ) ;
4291
+ return + version [ 1 ] ;
4292
+ }
4192
4293
}
0 commit comments