forked from MapGIS/WebClient-JavaScript
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmapWmsLayer.js
More file actions
209 lines (199 loc) · 7.43 KB
/
mapWmsLayer.js
File metadata and controls
209 lines (199 loc) · 7.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
import {Zondy} from './mapboxBase';
//import {Zondy} from '../../service/common/Base';
import {
newGuid,
extend
} from '../../service/common/Util';
/**
* @author 基础平台/产品2部 龚跃健
* @class mapboxgl.Zondy.Map.MapWmsLayer
* @classdesc WMS地图加载类。可使用接口Zondy.OGC.OGCWMSInfo获取Capabilities信息
* @param option - {Object} 属性键值对,地图属性字段。
* @param {String} [option.domain = ''] 【domain和(networkProtocol,ip,port)二选一】。域名
* @param {String} [option.networkProtocol = location.protocol.split(":")[0] || "http"] 【domain和(networkProtocol,ip,port)二选一】。网络协议
* @param {String} [option.ip = localhost] 【domain和(networkProtocol,ip,port)二选一】。地图服务ip
* @param {String} [option.port = 6163] 【domain和(networkProtocol,ip,port)二选一】。地图服务端口
*
* @param {String} [option.serverType ] 必选。服务类型,doc/layer
* @param {String} [option.serverName ] 必选。服务名
* @param {String} [option.layers = null] 必选。要显示的图层名集合
* @param {String} [option.format = image/png ] 可选。图块输出格式。image/gif,image/png,image/jpeg
* @param {String} [option.version = 1.0.0] 可选。WMS版本,1.1.1(默认)或1.3.0
* @param {String} [option.srs ='EPSG:4326'] 可选。空间坐标参考系,只在版本1.1.1中有效,如EPSG:4326
* @param {String} [option.crs ='EPSG:4326'] 可选。空间坐标参考系,只在版本1.3.0中有效,如crs:80
* @param {String} [option.width = '256'] 可选。输出地图图片的象素宽,像素值,如256
* @param {String} [option.height = '256'] 可选。输出地图图片的象素高,像素值,如256
* @param {String} [option.tileSize = 512] 可选。瓦片大小
* @param {String} [option.layerID] 可选。
* @param {String} [option.sourceID] 可选。
* @example
//地图容器
var map = new mapboxgl.Map({
container: 'map', // 容器id
crs: 'EPSG:4326',//mapboxgl原生只支持3857
center: [101.74721254733845, 32.5665352689922],
zoom: 3
});
//wms图层
new mapboxgl.Zondy.Map.MapWmsLayer({
//IGServer所在ip地址
ip: "localhost",
//IGServer请求端口号
port: "6163",
serverType:'layer',
serverName:'wms',
//wmts服务名称
layers: ["省级行政区x","中国地级县x"],
//设置地图不连续显示
noWrap: true,
}).addToMap(map);
*/
var MapWmsLayer = function (option) {
var option = option ? option : {};
var domain = option && option.domain ? option.domain : '';
if (domain === '') {
this.networkProtocol = option.networkProtocol !== undefined ? option.networkProtocol : location.protocol.split(":")[0] || "http";
var ip = option && option.ip ? option.ip : 'localhost';
var port = option && option.port ? option.port : '6163';
this.url = this._url = encodeURI(this.networkProtocol + '://' + ip + ':' + port + '/igs/rest/ogc/' + option.serverType + '/' + option.serverName + '/WMSServer');
} else {
this.url = this._url = encodeURI(domain + '/igs/rest/ogc/' + option.serverType + '/' + option.serverName + '/WMSServer');
}
this.options = {
layers: null,
styles: null,
//图像类型:jpg,png,gif
format: 'image/png',
service: 'WMS',
version: '1.1.1',
request: 'GetMap',
width: '256',
height: '256',
srs: 'EPSG:4326',
crs: 'EPSG:4326',
guid: null,
//keepCache设置为true时,会首先从客户端缓存中取瓦片,否则不从客户端缓存中提取
keepCache: true,
attribution: "Zondy WMS Data"
};
this.layerID = option.layerID ? option.layerID : null;
this.sourceID = option.sourceID ? option.sourceID : null;
this.map = null;
extend(this.options, option);
};
/***
* @description 将地图加载到地图容器中
* @function mapboxgl.Zondy.Map.MapWmsLayer.prototype.addToMap
* @param map 地图对象
* @returns {mapboxgl.Zondy.Map.MapWmsLayer}
*/
MapWmsLayer.prototype.addToMap = function (map) {
this.map = map;
this._initLayerUrl();
var sourceID = this.sourceID || "source_" + newGuid();
var layerID = this.layerID || "layer_" + newGuid();
this.wms_source = {
'type': 'raster',//数据源类型,因为wms返回图片数据,因此为该类型
'tiles': [this._layerUrl],
'tileSize': this.options.tileSize || 512 //图片显示的大小,最好和上面大小保持一致
};
this.mLayer = {
'id': layerID,//图层ID
'type': 'raster',//图层类型
'source': sourceID
};
if (this.map.getStyle()) {
if (this.map.getSource(sourceID) === undefined) {
this.map.addSource(sourceID, this.wms_source);
this.sourceID = sourceID;
}
if (this.map.getLayer(layerID) === undefined) {
this.map.addLayer(this.mLayer);
this.layerID = layerID;
}
return this;
} else {
this.map.setStyle({
"version": 8,
"sources": {},
"layers": []
});
var me = this;
me.map.on('load', function () {
me.map.addSource(sourceID, me.wms_source);
me.sourceID = sourceID;
me.map.addLayer(me.mLayer);
me.layerID = layerID;
return me;
});
}
};
MapWmsLayer.prototype._initLayerUrl = function () {
var me = this;
var layerUrl = me.url + "?";
layerUrl += encodeURI(me._initAllRequestParams().join('&'));
layerUrl += '&bbox={bbox}';
this._layerUrl = layerUrl;
};
MapWmsLayer.prototype._initAllRequestParams = function () {
var me = this,
options = me.options || {},
params = [];
if (options.version) {
params.push("version=" + options.version);
}
if (options.request) {
params.push("request=" + options.request);
}
if (options.version === '1.1.1') {
params.push("srs=" + options.srs);
} else if (options.version === '1.3.0') {
params.push("crs=" + options.crs);
}
if (options.service) {
params.push("service=" + options.service);
}
if (options.layers) {
params.push("layers=" + options.layers);
}
if (options.filters) {
params.push("filters=" + options.filters);
}
if (options.styles) {
params.push("styles=" + JSON.stringify(options.styles));
} else {
params.push("styles=");
}
if (options.format) {
params.push("format=" + options.format);
} else {
params.push("format=image/png");
}
params.push("width=" + options.width);
params.push("height=" + options.height);
if (options.guid) {
params.push("guid=" + options.guid);
}
if (!options.keepCache) {
params.push("temp=" + Math.random());
}
return params;
};
/**
* @description 刷新地图
* @function mapboxgl.Zondy.Map.MapWmsLayer.prototype.refreshMap
* @param guid
*/
MapWmsLayer.prototype.refreshMap = function (guid) {
if (guid) {
this.options.guid = guid;
}
this._initLayerUrl();
this.map.removeLayer(this.layerID);
this.map.removeSource(this.sourceID);
this.wms_source['tiles'] = [this._layerUrl];
this.map.addSource(this.sourceID, this.wms_source);
this.map.addLayer(this.mLayer);
};
export {MapWmsLayer};
Zondy.Map.MapWmsLayer = MapWmsLayer;