@@ -322,7 +322,11 @@ export class WebMap extends ol.Observable {
322
322
*/
323
323
addBaseMap ( mapInfo ) {
324
324
let layer = this . createBaseLayer ( mapInfo , null , false ) ;
325
- this . map . addLayer ( layer ) ;
325
+ // 部分图层是异步的 早期异步没有设计好,所以将就将就吧
326
+ if ( layer ) {
327
+ this . map . addLayer ( layer ) ;
328
+ }
329
+
326
330
if ( mapInfo . baseLayer && mapInfo . baseLayer . labelLayerVisible ) {
327
331
let layerInfo = mapInfo . baseLayer ;
328
332
//存在天地图路网
@@ -373,6 +377,7 @@ export class WebMap extends ol.Observable {
373
377
createView ( options ) {
374
378
let oldcenter = options . center ,
375
379
zoom = options . level !== undefined ? options . level : 1 ,
380
+ maxZoom = options . maxZoom || 22 ,
376
381
extent ,
377
382
projection = this . baseProjection ;
378
383
let center = [ ] ;
@@ -400,13 +405,11 @@ export class WebMap extends ol.Observable {
400
405
maxResolution = Math . max ( maxResolution1 , maxResolution2 ) ;
401
406
}
402
407
403
- this . map . setView ( new ol . View ( {
404
- zoom,
405
- center,
406
- projection,
407
- extent,
408
- maxResolution
409
- } ) ) ;
408
+ if ( options . baseLayer . visibleScales ) {
409
+ maxZoom = options . baseLayer . visibleScales . length ;
410
+ }
411
+
412
+ this . map . setView ( new ol . View ( { zoom, center, projection, extent, maxResolution, maxZoom} ) ) ;
410
413
}
411
414
/**
412
415
* @private
@@ -434,9 +437,11 @@ export class WebMap extends ol.Observable {
434
437
this . getInternetMapInfo ( mapInfo . baseLayer ) ;
435
438
} else if ( mapInfo . baseLayer . layerType === 'WMTS' && ! isCallBack ) {
436
439
// 通过请求完善信息
437
- //todo 之后需要优化
438
440
this . getWmtsInfo ( mapInfo . baseLayer , this . createBaseLayer , mapInfo ) ;
439
441
return ;
442
+ } else if ( mapInfo . baseLayer . layerType === 'TILE' && ! isCallBack ) {
443
+ this . getTileInfo ( mapInfo . baseLayer , this . createBaseLayer , mapInfo ) ;
444
+ return ;
440
445
} else {
441
446
mapInfo . baseLayer . projection = mapInfo . projection ;
442
447
mapInfo . baseLayer . extent = [ mapInfo . extent . leftBottom . x , mapInfo . extent . leftBottom . y , mapInfo . extent . rightTop . x , mapInfo . extent . rightTop . y ] ;
@@ -473,7 +478,7 @@ export class WebMap extends ol.Observable {
473
478
break ;
474
479
case 'TILE' :
475
480
case 'SUPERMAP_REST' :
476
- source = this . createDynamicTiledSource ( layerInfo , isBaseLayer ) ;
481
+ source = that . createDynamicTiledSource ( layerInfo , isBaseLayer ) ;
477
482
break ;
478
483
case 'CLOUD' :
479
484
case 'CLOUD_BLACK' :
@@ -546,7 +551,7 @@ export class WebMap extends ol.Observable {
546
551
baseLayerInfo . iServerUrl = 'https://map.baidu.com/' ;
547
552
baseLayerInfo . epsgCode = 'EPSG:3857' ;
548
553
baseLayerInfo . minZoom = 1 ;
549
- baseLayerInfo . maxZoom = 18 ;
554
+ baseLayerInfo . maxZoom = 19 ;
550
555
baseLayerInfo . level = 1 ;
551
556
baseLayerInfo . extent = baiduBounds ;
552
557
// thumbnail: this.getImagePath('bmap.png') 暂时不用到缩略图
@@ -555,7 +560,7 @@ export class WebMap extends ol.Observable {
555
560
baseLayerInfo . url = 'http://t2.supermapcloud.com/FileService/image?map=quanguo&type=web&x={x}&y={y}&z={z}' ;
556
561
baseLayerInfo . epsgCode = 'EPSG:3857' ;
557
562
baseLayerInfo . minZoom = 1 ;
558
- baseLayerInfo . maxZoom = 18 ;
563
+ baseLayerInfo . maxZoom = 19 ;
559
564
baseLayerInfo . level = 1 ;
560
565
baseLayerInfo . extent = baiduBounds ;
561
566
break ;
@@ -580,19 +585,25 @@ export class WebMap extends ol.Observable {
580
585
baseLayerInfo . iserverUrl = 'http://map.tianditu.gov.cn/' ;
581
586
baseLayerInfo . epsgCode = 'EPSG:3857' ;
582
587
baseLayerInfo . minZoom = 0 ;
583
- baseLayerInfo . maxZoom = 18 ;
588
+ baseLayerInfo . maxZoom = 19 ;
584
589
baseLayerInfo . level = 1 ;
585
590
baseLayerInfo . extent = baiduBounds ;
591
+ if ( baseLayerInfo . layerType === "TIANDITU_TER_3857" ) {
592
+ baseLayerInfo . maxZoom = 14 ;
593
+ }
586
594
break ;
587
595
case ( 'TIANDITU_VEC_4326' ) :
588
596
case ( 'TIANDITU_IMG_4326' ) :
589
597
case ( 'TIANDITU_TER_4326' ) :
590
598
baseLayerInfo . iserverUrl = 'http://map.tianditu.gov.cn/' ;
591
599
baseLayerInfo . epsgCode = 'EPSG:4326' ;
592
600
baseLayerInfo . minZoom = 0 ;
593
- baseLayerInfo . maxZoom = 18 ;
601
+ baseLayerInfo . maxZoom = 19 ;
594
602
baseLayerInfo . level = 1 ;
595
603
baseLayerInfo . extent = bounds_4326 ;
604
+ if ( baseLayerInfo . layerType === "TIANDITU_TER_4326" ) {
605
+ baseLayerInfo . maxZoom = 14 ;
606
+ }
596
607
break ;
597
608
case ( 'OSM' ) :
598
609
baseLayerInfo . url = 'http://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png' ;
@@ -607,29 +618,11 @@ export class WebMap extends ol.Observable {
607
618
baseLayerInfo . url = 'http://www.google.cn/maps/vt/pb=!1m4!1m3!1i{z}!2i{x}!3i{y}!2m3!1e0!2sm!3i380072576!3m8!2szh-CN!3scn!5e1105!12m4!1e68!2m2!1sset!2sRoadmap!4e0!5m1!1e0' ;
608
619
baseLayerInfo . epsgCode = 'EPSG:3857' ;
609
620
baseLayerInfo . minZoom = 1 ;
610
- baseLayerInfo . maxZoom = 20 ;
611
- baseLayerInfo . level = 1 ;
612
- baseLayerInfo . extent = osmBounds ;
613
- baseLayerInfo . iserverUrl = 'http://www.google.cn/maps' ;
614
- break ;
615
- case ( 'GOOGLE_CN' ) :
616
- baseLayerInfo . url = 'https://mt{0-3}.google.cn/vt/lyrs=m&hl=zh-CN&gl=cn&x={x}&y={y}&z={z}' ;
617
- baseLayerInfo . epsgCode = 'EPSG:3857' ;
618
- baseLayerInfo . minZoom = 1 ;
619
- baseLayerInfo . maxZoom = 20 ;
621
+ baseLayerInfo . maxZoom = 22 ;
620
622
baseLayerInfo . level = 1 ;
621
623
baseLayerInfo . extent = osmBounds ;
622
624
baseLayerInfo . iserverUrl = 'http://www.google.cn/maps' ;
623
625
break ;
624
- case ( 'BING' ) :
625
- baseLayerInfo . url = 'http://dynamic.t0.tiles.ditu.live.com/comp/ch/{quadKey}?it=G,TW,L,LA&mkt=zh-cn&og=109&cstl=w4c&ur=CN&n=z' ;
626
- baseLayerInfo . epsgCode = 'EPSG:3857' ;
627
- baseLayerInfo . minZoom = 1 ;
628
- baseLayerInfo . maxZoom = 18 ;
629
- baseLayerInfo . level = 1 ;
630
- baseLayerInfo . extent = osmBounds ;
631
- baseLayerInfo . iserverUrl = 'https://cn.bing.com/maps' ;
632
- break ;
633
626
case ( 'JAPAN_STD' ) :
634
627
baseLayerInfo . url = 'http://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png' ;
635
628
baseLayerInfo . epsgCode = 'EPSG:3857' ;
@@ -686,19 +679,29 @@ export class WebMap extends ol.Observable {
686
679
SecurityManager [ `register${ keyfix } ` ] ( keyParams , credential ) ;
687
680
}
688
681
// extent: isBaseLayer ? layerInfo.extent : ol.proj.transformExtent(layerInfo.extent, layerInfo.projection, this.baseProjection),
689
- let source = new ol . source . TileSuperMapRest ( {
682
+ let options = {
690
683
transparent : true ,
691
684
url : layerInfo . url ,
692
685
wrapX : false ,
693
686
serverType : serverType ,
694
- extent : this . baseLayerExtent ,
687
+ // extent: this.baseLayerExtent,
695
688
prjCoordSys :{ epsgCode : isBaseLayer ? layerInfo . projection . split ( ':' ) [ 1 ] : this . baseProjection . split ( ':' ) [ 1 ] } ,
696
-
697
689
tileProxy : this . tileProxy
698
- } ) ;
690
+ } ;
691
+ if ( layerInfo . visibleScales ) {
692
+ let result = this . getReslutionsFromScales ( layerInfo . visibleScales , 96 , layerInfo . coordUnit ) ;
693
+ let tileGrid = new ol . tilegrid . TileGrid ( {
694
+ extent : layerInfo . extent ,
695
+ resolutions : result . res
696
+ } ) ;
697
+ layerInfo . visibleResolutions = result . res ;
698
+ options . tileGrid = tileGrid ;
699
+ } else {
700
+ options . extent = this . baseLayerExtent ;
701
+ }
702
+ let source = new ol . source . TileSuperMapRest ( options ) ;
699
703
SecurityManager [ `register${ keyfix } ` ] ( layerInfo . url ) ;
700
704
return source ;
701
-
702
705
}
703
706
/**
704
707
* @private
@@ -837,6 +840,42 @@ export class WebMap extends ol.Observable {
837
840
}
838
841
} ) ;
839
842
}
843
+
844
+ /**
845
+ * @private
846
+ * @function ol.supermap.WebMap.prototype.getTileInfo
847
+ * @description 获取rest map的图层参数。
848
+ * @param {Object } layerInfo - 图层信息。
849
+ * @param {function } callback - 获得wmts图层参数执行的回调函数
850
+ */
851
+ getTileInfo ( layerInfo , callback , mapInfo ) {
852
+ let that = this ;
853
+ let url = layerInfo . url ;
854
+ let options = {
855
+ withCredentials : this . withCredentials ,
856
+ withoutFormatSuffix : true
857
+ } ;
858
+ FetchRequest . get ( url + ".json" , null , options ) . then ( function ( response ) {
859
+ return response . json ( ) ;
860
+ } ) . then ( function ( result ) {
861
+ layerInfo . projection = mapInfo . projection ;
862
+ layerInfo . extent = [ mapInfo . extent . leftBottom . x , mapInfo . extent . leftBottom . y , mapInfo . extent . rightTop . x , mapInfo . extent . rightTop . y ] ;
863
+ // 比例尺 单位
864
+ if ( result . visibleScales ) {
865
+ layerInfo . visibleScales = result . visibleScales ;
866
+ layerInfo . coordUnit = result . coordUnit ;
867
+ }
868
+ // 请求结果完成 继续添加图层
869
+ if ( mapInfo ) {
870
+ callback ( mapInfo , null , true , that ) ;
871
+ } else {
872
+ callback ( layerInfo ) ;
873
+ }
874
+
875
+ } ) . catch ( function ( error ) {
876
+ that . errorCallback && that . errorCallback ( error , 'getWmtsFaild' , that . map )
877
+ } ) ;
878
+ }
840
879
841
880
/**
842
881
* @private
0 commit comments