@@ -40,6 +40,7 @@ import * as olSource from 'ol/source';
4040import Feature from 'ol/Feature' ;
4141import Style from 'ol/style/Style' ;
4242import FillStyle from 'ol/style/Fill' ;
43+ import StrokeStyle from 'ol/style/Stroke' ;
4344import Text from 'ol/style/Text' ;
4445import Collection from 'ol/Collection' ;
4546import { containsCoordinate , getCenter } from "ol/extent" ;
@@ -1112,6 +1113,25 @@ export class WebMap extends Observable {
11121113 that . errorCallback && that . errorCallback ( error , 'getWmtsFaild' , that . map )
11131114 } ) ;
11141115 }
1116+ /**
1117+ * @private
1118+ * @function ol.supermap.WebMap.prototype.getWMTSUrl
1119+ * @description 获取wmts请求文档的url
1120+ * @param {string } url - 图层信息。
1121+ * @param {boolean } isKvp - 是否为kvp模式
1122+ */
1123+ getWMTSUrl ( url , isKvp ) {
1124+ let splitStr = '?' ;
1125+ if ( url . indexOf ( '?' ) > - 1 ) {
1126+ splitStr = '&'
1127+ }
1128+ if ( isKvp ) {
1129+ url += splitStr + 'SERVICE=WMTS&VERSION=1.0.0&REQUEST=GetCapabilities' ;
1130+ } else {
1131+ url += splitStr + '/1.0.0/WMTSCapabilities.xml' ;
1132+ }
1133+ return this . getRequestUrl ( url ) ;
1134+ }
11151135
11161136 /**
11171137 * @private
@@ -1126,7 +1146,8 @@ export class WebMap extends Observable {
11261146 withCredentials : true ,
11271147 withoutFormatSuffix : true
11281148 } ;
1129- return FetchRequest . get ( that . getRequestUrl ( layerInfo . url ) , null , options ) . then ( function ( response ) {
1149+ const isKvp = ! layerInfo . requestEncoding || layerInfo . requestEncoding === 'KVP' ;
1150+ return FetchRequest . get ( that . getWMTSUrl ( layerInfo . url , isKvp ) , null , options ) . then ( function ( response ) {
11301151 return response . text ( ) ;
11311152 } ) . then ( function ( capabilitiesText ) {
11321153 const format = new WMTSCapabilities ( ) ;
@@ -1174,8 +1195,7 @@ export class WebMap extends Observable {
11741195 } else {
11751196 extent = olProj . get ( that . baseProjection ) . getExtent ( )
11761197 }
1177- const isKvp = ! layerInfo . requestEncoding || layerInfo . requestEncoding === 'KVP' ;
1178- layerInfo . tileUrl = that . getTileUrl ( capabilities . OperationsMetadata . GetTile . DCP . HTTP . Get , isKvp , layerInfo . layer , layerInfo . tileMatrixSet ) ;
1198+ layerInfo . tileUrl = that . getTileUrl ( capabilities . OperationsMetadata . GetTile . DCP . HTTP . Get , layer , layerFormat , isKvp ) ;
11791199 //将需要的参数补上
11801200 layerInfo . extent = extent ;
11811201 layerInfo . matrixSet = matrixSet ;
@@ -1203,22 +1223,23 @@ export class WebMap extends Observable {
12031223 * @function ol.supermap.WebMap.prototype.getTileUrl
12041224 * @description 获取wmts的图层参数。
12051225 * @param {array } getTileArray - 图层信息。
1206- * @param {boolean } isKvp - 是否是kvp方式
12071226 * @param {string } layer - 选择的图层
1208- * @param {string } matrixSet -选择比例尺
1209- */
1210- getTileUrl ( getTileArray , isKvp , layer , matrixSet ) {
1211- let url , type = isKvp ? 'KVP' : 'RESTful' ;
1212- getTileArray . forEach ( data => {
1213- if ( data . Constraint [ 0 ] . AllowedValues . Value [ 0 ] . toUpperCase ( ) === type . toUpperCase ( ) ) {
1214- url = data . href ;
1215- }
1216- } )
1217- if ( ! isKvp ) {
1218- //Restful格式
1219- url = `${ url } ${ layer } /default/${ matrixSet } /{TileMatrix}/{TileRow}/{TileCol}.png` ;
1220- //supermap iserver发布的restful会有一个?
1221- url = url . replace ( '?' , '/' ) ;
1227+ * @param {string } format - 选择的出图方式
1228+ * @param {boolean } isKvp - 是否是kvp方式
1229+ */
1230+ getTileUrl ( getTileArray , layer , format , isKvp ) {
1231+ let url ;
1232+ if ( isKvp ) {
1233+ getTileArray . forEach ( data => {
1234+ if ( data . Constraint [ 0 ] . AllowedValues . Value [ 0 ] . toUpperCase ( ) === 'KVP' ) {
1235+ url = data . href ;
1236+ }
1237+ } )
1238+ } else {
1239+ const reuslt = layer . ResourceURL . filter ( resource => {
1240+ return resource . format === format ;
1241+ } )
1242+ url = reuslt [ 0 ] . template ;
12221243 }
12231244 return url ;
12241245 }
@@ -2410,28 +2431,41 @@ export class WebMap extends Observable {
24102431 */
24112432 getLabelStyle ( parameters , layerInfo ) {
24122433 let style = layerInfo . style || layerInfo . pointStyle ;
2413- let radius = style . radius || 0 ;
2414- let strokeWidth = style . strokeWidth || 0 ;
2415- let offsetY = - 1.8 * radius - strokeWidth ;
2416- if ( offsetY > - 20 ) {
2417- offsetY = - 20 ;
2434+ const { radius= 0 , strokeWidth= 0 } = style ,
2435+ beforeOffsetY = - ( radius + strokeWidth ) ;
2436+ const {
2437+ fontSize = '14px' ,
2438+ fontFamily,
2439+ fill,
2440+ backgroundFill,
2441+ offsetX = 0 ,
2442+ offsetY = beforeOffsetY ,
2443+ placement = "point" ,
2444+ textBaseline = "bottom" ,
2445+ textAlign= 'center' ,
2446+ outlineColor = "#000000" ,
2447+ outlineWidth = 0
2448+ } = parameters ;
2449+ const option = {
2450+ font : `${ fontSize } ${ fontFamily } ` ,
2451+ placement,
2452+ textBaseline,
2453+ textAlign,
2454+ fill : new FillStyle ( { color : fill } ) ,
2455+ backgroundFill : new FillStyle ( { color : backgroundFill } ) ,
2456+ padding : [ 3 , 3 , 3 , 3 ] ,
2457+ offsetX : layerInfo . featureType === 'POINT' ? offsetX : 0 ,
2458+ offsetY : layerInfo . featureType === 'POINT' ? offsetY : 0
2459+ } ;
2460+ if ( outlineWidth > 0 ) {
2461+ option . stroke = new StrokeStyle ( {
2462+ color : outlineColor ,
2463+ width : outlineWidth
2464+ } ) ;
24182465 }
2419- parameters . offsetY = offsetY ;
24202466
24212467 return new Style ( {
2422- text : new Text ( {
2423- font : `${ parameters . fontSize || '14px' } ${ parameters . fontFamily } ` ,
2424- placement : 'point' ,
2425- textAlign : 'center' ,
2426- fill : new FillStyle ( {
2427- color : parameters . fill
2428- } ) ,
2429- backgroundFill : new FillStyle ( {
2430- color : parameters . backgroundFill || [ 255 , 255 , 255 , 0.7 ]
2431- } ) ,
2432- padding : [ 3 , 3 , 3 , 3 ] ,
2433- offsetY : parameters . offsetY
2434- } )
2468+ text : new Text ( option )
24352469 } ) ;
24362470 }
24372471
0 commit comments