@@ -40,6 +40,7 @@ import * as olSource from 'ol/source';
40
40
import Feature from 'ol/Feature' ;
41
41
import Style from 'ol/style/Style' ;
42
42
import FillStyle from 'ol/style/Fill' ;
43
+ import StrokeStyle from 'ol/style/Stroke' ;
43
44
import Text from 'ol/style/Text' ;
44
45
import Collection from 'ol/Collection' ;
45
46
import { containsCoordinate , getCenter } from "ol/extent" ;
@@ -1113,6 +1114,25 @@ export class WebMap extends Observable {
1113
1114
that . errorCallback && that . errorCallback ( error , 'getWmtsFaild' , that . map )
1114
1115
} ) ;
1115
1116
}
1117
+ /**
1118
+ * @private
1119
+ * @function ol.supermap.WebMap.prototype.getWMTSUrl
1120
+ * @description 获取wmts请求文档的url
1121
+ * @param {string } url - 图层信息。
1122
+ * @param {boolean } isKvp - 是否为kvp模式
1123
+ */
1124
+ getWMTSUrl ( url , isKvp ) {
1125
+ let splitStr = '?' ;
1126
+ if ( url . indexOf ( '?' ) > - 1 ) {
1127
+ splitStr = '&'
1128
+ }
1129
+ if ( isKvp ) {
1130
+ url += splitStr + 'SERVICE=WMTS&VERSION=1.0.0&REQUEST=GetCapabilities' ;
1131
+ } else {
1132
+ url += splitStr + '/1.0.0/WMTSCapabilities.xml' ;
1133
+ }
1134
+ return this . getRequestUrl ( url ) ;
1135
+ }
1116
1136
1117
1137
/**
1118
1138
* @private
@@ -1127,7 +1147,8 @@ export class WebMap extends Observable {
1127
1147
withCredentials : true ,
1128
1148
withoutFormatSuffix : true
1129
1149
} ;
1130
- return FetchRequest . get ( that . getRequestUrl ( layerInfo . url ) , null , options ) . then ( function ( response ) {
1150
+ const isKvp = ! layerInfo . requestEncoding || layerInfo . requestEncoding === 'KVP' ;
1151
+ return FetchRequest . get ( that . getWMTSUrl ( layerInfo . url , isKvp ) , null , options ) . then ( function ( response ) {
1131
1152
return response . text ( ) ;
1132
1153
} ) . then ( function ( capabilitiesText ) {
1133
1154
const format = new WMTSCapabilities ( ) ;
@@ -1175,8 +1196,7 @@ export class WebMap extends Observable {
1175
1196
} else {
1176
1197
extent = olProj . get ( that . baseProjection ) . getExtent ( )
1177
1198
}
1178
- const isKvp = ! layerInfo . requestEncoding || layerInfo . requestEncoding === 'KVP' ;
1179
- layerInfo . tileUrl = that . getTileUrl ( capabilities . OperationsMetadata . GetTile . DCP . HTTP . Get , isKvp , layerInfo . layer , layerInfo . tileMatrixSet ) ;
1199
+ layerInfo . tileUrl = that . getTileUrl ( capabilities . OperationsMetadata . GetTile . DCP . HTTP . Get , layer , layerFormat , isKvp ) ;
1180
1200
//将需要的参数补上
1181
1201
layerInfo . extent = extent ;
1182
1202
layerInfo . matrixSet = matrixSet ;
@@ -1204,22 +1224,23 @@ export class WebMap extends Observable {
1204
1224
* @function ol.supermap.WebMap.prototype.getTileUrl
1205
1225
* @description 获取wmts的图层参数。
1206
1226
* @param {array } getTileArray - 图层信息。
1207
- * @param {boolean } isKvp - 是否是kvp方式
1208
1227
* @param {string } layer - 选择的图层
1209
- * @param {string } matrixSet -选择比例尺
1228
+ * @param {string } format - 选择的出图方式
1229
+ * @param {boolean } isKvp - 是否是kvp方式
1210
1230
*/
1211
- getTileUrl ( getTileArray , isKvp , layer , matrixSet ) {
1212
- let url , type = isKvp ? 'KVP' : 'RESTful' ;
1231
+ getTileUrl ( getTileArray , layer , format , isKvp ) {
1232
+ let url ;
1233
+ if ( isKvp ) {
1213
1234
getTileArray . forEach ( data => {
1214
- if ( data . Constraint [ 0 ] . AllowedValues . Value [ 0 ] . toUpperCase ( ) === type . toUpperCase ( ) ) {
1235
+ if ( data . Constraint [ 0 ] . AllowedValues . Value [ 0 ] . toUpperCase ( ) === 'KVP' ) {
1215
1236
url = data . href ;
1216
- }
1237
+ }
1217
1238
} )
1218
- if ( ! isKvp ) {
1219
- //Restful格式
1220
- url = ` ${ url } ${ layer } /default/ ${ matrixSet } /{TileMatrix}/{TileRow}/{TileCol}.png` ;
1221
- //supermap iserver发布的restful会有一个?
1222
- url = url . replace ( '?' , '/' ) ;
1239
+ } else {
1240
+ const reuslt = layer . ResourceURL . filter ( resource => {
1241
+ return resource . format === format ;
1242
+ } )
1243
+ url = reuslt [ 0 ] . template ;
1223
1244
}
1224
1245
return url ;
1225
1246
}
@@ -2250,7 +2271,7 @@ export class WebMap extends Observable {
2250
2271
* @param {array } allFeatures - 图层上的feature集合
2251
2272
*/
2252
2273
getFiterFeatures ( filterCondition , allFeatures ) {
2253
- let condition = this . replaceFilterCharacter ( filterCondition ) ;
2274
+ let condition = this . parseFilterCondition ( filterCondition ) ;
2254
2275
let sql = "select * from json where (" + condition + ")" ;
2255
2276
let filterFeatures = [ ] ;
2256
2277
for ( let i = 0 ; i < allFeatures . length ; i ++ ) {
@@ -2274,14 +2295,29 @@ export class WebMap extends Observable {
2274
2295
2275
2296
/**
2276
2297
* @private
2277
- * @function ol.supermap.WebMap.prototype.replaceFilterCharacter
2278
- * @description 替换查询语句 中的 and / AND / or / OR / = / !=
2279
- * @param {string } filterString - 过滤条件
2298
+ * @function ol.supermap.WebMap.prototype.parseFilterCondition
2299
+ * @description 1、替换查询语句 中的 and / AND / or / OR / = / !=
2300
+ * 2、匹配 Name in ('', ''),多条件需用()包裹
2301
+ * @param {string } filterCondition - 过滤条件
2280
2302
* @return {string } 换成组件能识别的字符串
2281
2303
*/
2282
- replaceFilterCharacter ( filterString ) {
2283
- filterString = filterString . replace ( / = / g, '==' ) . replace ( / A N D | a n d / g, '&&' ) . replace ( / o r | O R / g, '||' ) . replace ( / < = = / g, '<=' ) . replace ( / > = = / g, '>=' ) ;
2284
- return filterString ;
2304
+ parseFilterCondition ( filterCondition ) {
2305
+ return filterCondition
2306
+ . replace ( / = / g, "==" )
2307
+ . replace ( / A N D | a n d / g, "&&" )
2308
+ . replace ( / o r | O R / g, "||" )
2309
+ . replace ( / < = = / g, "<=" )
2310
+ . replace ( / > = = / g, ">=" )
2311
+ . replace ( / \( ? [ ^ \( ] + ?\s + i n \s + \( [ ^ \) ] + ?\) \) ? / g, ( res ) => {
2312
+ // res格式:(省份 in ('四川', '河南'))
2313
+ const data = res . match ( / ( [ ^ ( ] + ?) \s + i n \s + \( ( [ ^ ) ] + ?) \) / ) ;
2314
+ return data . length === 3
2315
+ ? `(${ data [ 2 ]
2316
+ . split ( "," )
2317
+ . map ( ( c ) => `${ data [ 1 ] } == ${ c . trim ( ) } ` )
2318
+ . join ( " || " ) } )`
2319
+ : res ;
2320
+ } ) ;
2285
2321
}
2286
2322
2287
2323
/**
@@ -2414,28 +2450,41 @@ export class WebMap extends Observable {
2414
2450
*/
2415
2451
getLabelStyle ( parameters , layerInfo ) {
2416
2452
let style = layerInfo . style || layerInfo . pointStyle ;
2417
- let radius = style . radius || 0 ;
2418
- let strokeWidth = style . strokeWidth || 0 ;
2419
- let offsetY = - 1.8 * radius - strokeWidth ;
2420
- if ( offsetY > - 20 ) {
2421
- offsetY = - 20 ;
2453
+ const { radius= 0 , strokeWidth= 0 } = style ,
2454
+ beforeOffsetY = - ( radius + strokeWidth ) ;
2455
+ const {
2456
+ fontSize = '14px' ,
2457
+ fontFamily,
2458
+ fill,
2459
+ backgroundFill,
2460
+ offsetX = 0 ,
2461
+ offsetY = beforeOffsetY ,
2462
+ placement = "point" ,
2463
+ textBaseline = "bottom" ,
2464
+ textAlign= 'center' ,
2465
+ outlineColor = "#000000" ,
2466
+ outlineWidth = 0
2467
+ } = parameters ;
2468
+ const option = {
2469
+ font : `${ fontSize } ${ fontFamily } ` ,
2470
+ placement,
2471
+ textBaseline,
2472
+ textAlign,
2473
+ fill : new FillStyle ( { color : fill } ) ,
2474
+ backgroundFill : new FillStyle ( { color : backgroundFill } ) ,
2475
+ padding : [ 3 , 3 , 3 , 3 ] ,
2476
+ offsetX : layerInfo . featureType === 'POINT' ? offsetX : 0 ,
2477
+ offsetY : layerInfo . featureType === 'POINT' ? offsetY : 0
2478
+ } ;
2479
+ if ( outlineWidth > 0 ) {
2480
+ option . stroke = new StrokeStyle ( {
2481
+ color : outlineColor ,
2482
+ width : outlineWidth
2483
+ } ) ;
2422
2484
}
2423
- parameters . offsetY = offsetY ;
2424
2485
2425
2486
return new Style ( {
2426
- text : new Text ( {
2427
- font : `${ parameters . fontSize || '14px' } ${ parameters . fontFamily } ` ,
2428
- placement : 'point' ,
2429
- textAlign : 'center' ,
2430
- fill : new FillStyle ( {
2431
- color : parameters . fill
2432
- } ) ,
2433
- backgroundFill : new FillStyle ( {
2434
- color : parameters . backgroundFill || [ 255 , 255 , 255 , 0.7 ]
2435
- } ) ,
2436
- padding : [ 3 , 3 , 3 , 3 ] ,
2437
- offsetY : parameters . offsetY
2438
- } )
2487
+ text : new Text ( option )
2439
2488
} ) ;
2440
2489
}
2441
2490
@@ -2896,7 +2945,7 @@ export class WebMap extends Observable {
2896
2945
} ) ;
2897
2946
if ( layerInfo . filterCondition ) {
2898
2947
//过滤条件
2899
- let condition = that . replaceFilterCharacter ( layerInfo . filterCondition ) ;
2948
+ let condition = that . parseFilterCondition ( layerInfo . filterCondition ) ;
2900
2949
let sql = "select * from json where (" + condition + ")" ;
2901
2950
let filterResult = window . jsonsql . query ( sql , {
2902
2951
attributes : feature . get ( 'attributes' )
@@ -3046,7 +3095,7 @@ export class WebMap extends Observable {
3046
3095
return function ( feature ) {
3047
3096
if ( layerInfo . filterCondition ) {
3048
3097
//过滤条件
3049
- let condition = that . replaceFilterCharacter ( layerInfo . filterCondition ) ;
3098
+ let condition = that . parseFilterCondition ( layerInfo . filterCondition ) ;
3050
3099
let sql = "select * from json where (" + condition + ")" ;
3051
3100
let filterResult = window . jsonsql . query ( sql , {
3052
3101
attributes : feature . get ( 'attributes' )
0 commit comments