@@ -882,7 +882,7 @@ export class WebMap extends Observable {
882882 */
883883 createDynamicTiledSource ( layerInfo , isBaseLayer ) {
884884 let serverType = "IPORTAL" ,
885- credential = layerInfo . credential ,
885+ credential = layerInfo . credential ? layerInfo . credential . token : undefined ,
886886 keyfix = 'Token' ,
887887 keyParams = layerInfo . url ;
888888
@@ -902,7 +902,8 @@ export class WebMap extends Observable {
902902 serverType : serverType ,
903903 crossOrigin : 'anonymous' ,
904904 // 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
906907 } ;
907908 if ( layerInfo . visibleScales && layerInfo . visibleScales . length > 0 ) {
908909 let visibleResolutions = [ ] ;
@@ -1069,6 +1070,9 @@ export class WebMap extends Observable {
10691070 }
10701071 // bug IE11 不会自动编码
10711072 url += '.json?prjCoordSys=' + encodeURI ( JSON . stringify ( projection ) ) ;
1073+ if ( layerInfo . credential ) {
1074+ url = `${ url } &token=${ encodeURI ( layerInfo . credential . token ) } ` ;
1075+ }
10721076
10731077 } else {
10741078 url += ( url . indexOf ( '?' ) > - 1 ? '&SERVICE=WMS&REQUEST=GetCapabilities' : '?SERVICE=WMS&REQUEST=GetCapabilities' ) ;
@@ -1079,10 +1083,13 @@ export class WebMap extends Observable {
10791083 } ;
10801084 FetchRequest . get ( that . getRequestUrl ( url ) , null , options ) . then ( function ( response ) {
10811085 return layerInfo . layerType === "TILE" ? response . json ( ) : response . text ( ) ;
1082- } ) . then ( function ( result ) {
1086+ } ) . then ( async function ( result ) {
10831087 if ( layerInfo . layerType === "TILE" ) {
10841088 layerInfo . extent = [ result . bounds . left , result . bounds . bottom , result . bounds . right , result . bounds . top ] ;
10851089 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' ;
10861093 callback ( layerInfo ) ;
10871094 } else {
10881095 layerInfo . projection = that . baseProjection ;
@@ -1111,7 +1118,7 @@ export class WebMap extends Observable {
11111118 }
11121119 return FetchRequest . get ( that . getRequestUrl ( `${ layerInfo . url } .json` ) , null , options ) . then ( function ( response ) {
11131120 return response . json ( ) ;
1114- } ) . then ( function ( result ) {
1121+ } ) . then ( async function ( result ) {
11151122 // layerInfo.projection = mapInfo.projection;
11161123 // layerInfo.extent = [mapInfo.extent.leftBottom.x, mapInfo.extent.leftBottom.y, mapInfo.extent.rightTop.x, mapInfo.extent.rightTop.y];
11171124 // 比例尺 单位
@@ -1121,8 +1128,12 @@ export class WebMap extends Observable {
11211128 }
11221129 layerInfo . maxZoom = result . maxZoom ;
11231130 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' ;
11241134 // 请求结果完成 继续添加图层
11251135 if ( mapInfo ) {
1136+ //todo 这个貌似没有用到,下次优化
11261137 callback && callback ( mapInfo , null , true , that ) ;
11271138 } else {
11281139 callback && callback ( layerInfo ) ;
@@ -4170,7 +4181,9 @@ export class WebMap extends Observable {
41704181 return resolutions ;
41714182 }
41724183 /**
4173- * 判断是否同域名(如果是域名,只判断后门两级域名是否相同,第一级忽略),如果是ip地址则需要完全相同。
4184+ * @private
4185+ * @function ol.supermap.WebMap.prototype.isSameDomain
4186+ * @description 判断是否同域名(如果是域名,只判断后门两级域名是否相同,第一级忽略),如果是ip地址则需要完全相同。
41744187 * @param {* } url
41754188 */
41764189 isSameDomain ( url ) {
@@ -4189,4 +4202,92 @@ export class WebMap extends Observable {
41894202 return domainArray [ 1 ] === docDomainArray [ 1 ] && domainArray [ 2 ] === docDomainArray [ 2 ] ;
41904203 }
41914204 }
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+ }
41924293}
0 commit comments