cd-mapgis 1.0.14 → 1.0.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/HttpUtil.js +78 -0
- package/src/LayerUtil.js +3 -2
- package/src/MapView.js +142 -0
- package/src/OM.js +220 -102
- package/src/index.d.ts +22 -0
- package/src/index.js +5 -1
package/package.json
CHANGED
package/src/HttpUtil.js
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 网络访问工具
|
|
3
|
+
*/
|
|
4
|
+
export default class httpUtil {
|
|
5
|
+
//获取访问工具
|
|
6
|
+
static _getUtil() {
|
|
7
|
+
let xhr
|
|
8
|
+
if (XMLHttpRequest) {
|
|
9
|
+
xhr = new XMLHttpRequest();
|
|
10
|
+
} else {
|
|
11
|
+
xhr = new ActiveXObject("Microsoft.XMLHTTP");
|
|
12
|
+
}
|
|
13
|
+
return xhr;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* get请求
|
|
17
|
+
* @param {*} url
|
|
18
|
+
* @returns
|
|
19
|
+
*/
|
|
20
|
+
static get(url) {
|
|
21
|
+
return new Promise((resolve, reject) => {
|
|
22
|
+
let xhr = httpUtil._getUtil();
|
|
23
|
+
xhr.overrideMimeType('text/xml');
|
|
24
|
+
xhr.open("GET", url, true)
|
|
25
|
+
xhr.onreadystatechange = function () {
|
|
26
|
+
if (xhr.status === 200) {
|
|
27
|
+
if (xhr.readyState == 4) {
|
|
28
|
+
resolve(xhr.responseText)
|
|
29
|
+
}
|
|
30
|
+
} else {
|
|
31
|
+
console.error('get请求错误:', xhr)
|
|
32
|
+
reject({
|
|
33
|
+
status: xhr.status,
|
|
34
|
+
msg: '请求出错'
|
|
35
|
+
})
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
xhr.send(null)
|
|
39
|
+
return
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* post请求
|
|
44
|
+
* @param {*} url
|
|
45
|
+
* @param {*} data
|
|
46
|
+
* @param {*} headers
|
|
47
|
+
*/
|
|
48
|
+
static post(url, data, headers) {
|
|
49
|
+
return new Promise((resolve, reject) => {
|
|
50
|
+
data = data || {};
|
|
51
|
+
let xhr = httpUtil._getUtil();
|
|
52
|
+
xhr.open("POST", url, true)
|
|
53
|
+
xhr.setRequestHeader("content-type", "application/json; charset=utf-8")
|
|
54
|
+
if (headers) {
|
|
55
|
+
for (let i = 0; i < headers.length; i++) {
|
|
56
|
+
let h = headers[i];
|
|
57
|
+
xhr.setRequestHeader(h.key, h.value)
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
xhr.onreadystatechange = function () {
|
|
61
|
+
if (xhr.status === 200) {
|
|
62
|
+
if (xhr.readyState == 4) {
|
|
63
|
+
console.log(url, data, xhr.responseText);
|
|
64
|
+
resolve(xhr.responseText)
|
|
65
|
+
}
|
|
66
|
+
} else {
|
|
67
|
+
console.error('post请求错误:', xhr)
|
|
68
|
+
reject({
|
|
69
|
+
status: xhr.status,
|
|
70
|
+
msg: '请求出错'
|
|
71
|
+
})
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
xhr.send(JSON.stringify(data))
|
|
75
|
+
return
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}
|
package/src/LayerUtil.js
CHANGED
|
@@ -68,6 +68,7 @@ export default class LayerUtil {
|
|
|
68
68
|
FORMAT: 'image/png',
|
|
69
69
|
VERSION: '1.1.1'
|
|
70
70
|
};
|
|
71
|
+
let url = p.url;
|
|
71
72
|
//条件过滤显示图层
|
|
72
73
|
if (p.mv && p.mv.cql) {
|
|
73
74
|
params['CQL_FILTER'] = node.mv.cql;
|
|
@@ -75,7 +76,7 @@ export default class LayerUtil {
|
|
|
75
76
|
return new Image({
|
|
76
77
|
source: new ImageWMS({
|
|
77
78
|
ratio: 1,
|
|
78
|
-
url:
|
|
79
|
+
url: url,
|
|
79
80
|
params: params
|
|
80
81
|
})
|
|
81
82
|
});
|
|
@@ -87,7 +88,7 @@ export default class LayerUtil {
|
|
|
87
88
|
*/
|
|
88
89
|
static async getWmtsLayer(p) {
|
|
89
90
|
try {
|
|
90
|
-
let wmtsUrl = p.
|
|
91
|
+
let wmtsUrl = p.urlPre + p.urlNext;
|
|
91
92
|
// 构造 GetCapabilities 请求地址
|
|
92
93
|
const capabilitiesUrl = wmtsUrl.includes('?')
|
|
93
94
|
? `${wmtsUrl}&service=WMTS&request=GetCapabilities`
|
package/src/MapView.js
ADDED
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import GeoJSON from 'ol/format/GeoJSON.js';
|
|
2
|
+
import Feature from 'ol/Feature.js';
|
|
3
|
+
import VectorSource from 'ol/source/Vector.js';
|
|
4
|
+
import Style from 'ol/style/Style.js';
|
|
5
|
+
import Stroke from 'ol/style/Stroke.js';
|
|
6
|
+
import Fill from 'ol/style/Fill.js';
|
|
7
|
+
import VectorLayer from 'ol/layer/Vector.js';
|
|
8
|
+
import View from 'ol/View.js';
|
|
9
|
+
import Map from 'ol/Map.js';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* ol地图显示
|
|
13
|
+
*/
|
|
14
|
+
export default class MapView {
|
|
15
|
+
static Instance = null;//主地图,一般用于只操作一个地图的情况
|
|
16
|
+
constructor(p) {
|
|
17
|
+
this.params = p;
|
|
18
|
+
this.view = null;
|
|
19
|
+
this.map = null;
|
|
20
|
+
//基础图层,一般用于可以只显示其中一个图层的场景,使用layerGroupViewOne切换{group,key,name,layer}
|
|
21
|
+
//group:分组名 key:组内唯一值 name:图层名称 layer:ol图层对象
|
|
22
|
+
this.layerGroup = [];
|
|
23
|
+
//通过OM框架的viewLayers一次性加载的图层
|
|
24
|
+
this.viewLayers = [];
|
|
25
|
+
//所有的geoServer图层列表
|
|
26
|
+
this.geoServerLayers = [];
|
|
27
|
+
|
|
28
|
+
this._view_templayer = null;
|
|
29
|
+
this._init(this.params);
|
|
30
|
+
MapView.Instance = this;
|
|
31
|
+
}
|
|
32
|
+
//初始化地图及其他参数
|
|
33
|
+
_init(p) {
|
|
34
|
+
if (p.view) {
|
|
35
|
+
this.view = p.view;
|
|
36
|
+
} else {
|
|
37
|
+
let center = p.center ? p.center : [104.0633664, 30.6598344];//地图初始中心点(默认天府广场)
|
|
38
|
+
let zoom = p.zoom ? p.zoom : 16; //地图初始显示级数
|
|
39
|
+
let projection = p.projection ? p.projection : 'EPSG:4326';
|
|
40
|
+
this.view = new View({
|
|
41
|
+
center: center,
|
|
42
|
+
zoom: zoom,
|
|
43
|
+
projection: projection
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
let target = p.target ? p.target : 'map';//地图div的id
|
|
47
|
+
let layers = p.layers ? p.layers : [];
|
|
48
|
+
this.map = new Map({
|
|
49
|
+
target: target,
|
|
50
|
+
controls: [],
|
|
51
|
+
layers: layers,
|
|
52
|
+
view: this.view
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* 显示图层组中的一个图层
|
|
57
|
+
* @param {*} group
|
|
58
|
+
* @param {*} key
|
|
59
|
+
* @returns
|
|
60
|
+
*/
|
|
61
|
+
layerGroupViewOne(group, key) {
|
|
62
|
+
if (!this.layerGroup) {
|
|
63
|
+
console.error("未初始化:layerGroup");
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
for (let i = 0; i < this.layerGroup.length; i++) {
|
|
67
|
+
let temp = this.layerGroup[i];
|
|
68
|
+
if (temp.group != group) continue;
|
|
69
|
+
temp.layer.setVisible(temp.key == key);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* 将数据显示在临时图层上
|
|
74
|
+
* @param {*} p
|
|
75
|
+
*/
|
|
76
|
+
viewOnTemplayer(p) {
|
|
77
|
+
let geometry = new GeoJSON().readGeometry(p.data);
|
|
78
|
+
let feature = new Feature({ geometry: geometry });
|
|
79
|
+
let vectorSource = new VectorSource({ features: [feature] });
|
|
80
|
+
let style = new Style({
|
|
81
|
+
stroke: new Stroke({
|
|
82
|
+
color: '#0af5e6', // 默认选择色
|
|
83
|
+
width: 2 // 线宽
|
|
84
|
+
}),
|
|
85
|
+
fill: new Fill({
|
|
86
|
+
color: 'rgba(0, 0, 0, 0)' // 透明填充
|
|
87
|
+
})
|
|
88
|
+
});
|
|
89
|
+
this.clearTemplayer(); //移除之前的显示
|
|
90
|
+
//重建图层,避免在其他地方全部移除图层后,templayer不为空,但是已经不在地图中的情况
|
|
91
|
+
this._view_templayer = new VectorLayer({
|
|
92
|
+
source: vectorSource,
|
|
93
|
+
style: style
|
|
94
|
+
});
|
|
95
|
+
// 添加到地图
|
|
96
|
+
this.map.addLayer(this._view_templayer);
|
|
97
|
+
// fit方法 - 自动适应范围
|
|
98
|
+
let extent = geometry.getExtent();
|
|
99
|
+
let extent2 = this.expandExtent(extent);
|
|
100
|
+
this.map.getView().fit(extent2, {
|
|
101
|
+
size: this.map.getSize()
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* 清除显示在临时图层上的数据
|
|
106
|
+
*/
|
|
107
|
+
clearTemplayer() {
|
|
108
|
+
if (this._view_templayer) {
|
|
109
|
+
this._view_templayer.getSource().clear();//清空图层
|
|
110
|
+
this.map.removeLayer(this._view_templayer);//移除图层
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* 扩大一倍extent矩形范围
|
|
115
|
+
* @param {*} extent
|
|
116
|
+
* @returns
|
|
117
|
+
*/
|
|
118
|
+
expandExtent(extent) {
|
|
119
|
+
if (!extent || extent.length !== 4) {
|
|
120
|
+
return extent;
|
|
121
|
+
}
|
|
122
|
+
var minX = extent[0];
|
|
123
|
+
var minY = extent[1];
|
|
124
|
+
var maxX = extent[2];
|
|
125
|
+
var maxY = extent[3];
|
|
126
|
+
// 计算中心点
|
|
127
|
+
var centerX = (minX + maxX) / 2;
|
|
128
|
+
var centerY = (minY + maxY) / 2;
|
|
129
|
+
// 计算原始宽度和高度
|
|
130
|
+
var width = maxX - minX;
|
|
131
|
+
var height = maxY - minY;
|
|
132
|
+
// 扩大一倍(乘以2)
|
|
133
|
+
var newWidth = width * 2;
|
|
134
|
+
var newHeight = height * 2;
|
|
135
|
+
// 计算新的边界
|
|
136
|
+
var newMinX = centerX - newWidth / 2;
|
|
137
|
+
var newMinY = centerY - newHeight / 2;
|
|
138
|
+
var newMaxX = centerX + newWidth / 2;
|
|
139
|
+
var newMaxY = centerY + newHeight / 2;
|
|
140
|
+
return [newMinX, newMinY, newMaxX, newMaxY];
|
|
141
|
+
}
|
|
142
|
+
}
|
package/src/OM.js
CHANGED
|
@@ -1,119 +1,237 @@
|
|
|
1
|
-
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import VectorSource from 'ol/source/Vector.js';
|
|
5
|
-
import Style from 'ol/style/Style.js';
|
|
6
|
-
import Stroke from 'ol/style/Stroke.js';
|
|
7
|
-
import Fill from 'ol/style/Fill.js';
|
|
8
|
-
import VectorLayer from 'ol/layer/Vector.js';
|
|
9
|
-
import View from 'ol/View.js';
|
|
10
|
-
import Map from 'ol/Map.js';
|
|
11
|
-
import Overlay from './Overlay.js';
|
|
1
|
+
import HttpUtil from './HttpUtil.js';
|
|
2
|
+
import LayerUtil from './LayerUtil.js';
|
|
3
|
+
import MapView from './MapView.js';
|
|
12
4
|
|
|
13
5
|
/**
|
|
14
|
-
*
|
|
6
|
+
* 服务器交互,地图一张图
|
|
15
7
|
*/
|
|
16
|
-
class OM {
|
|
17
|
-
static map = null;//openlayer map对象
|
|
18
|
-
static view = null;
|
|
8
|
+
export default class OM {
|
|
19
9
|
/**
|
|
20
|
-
*
|
|
10
|
+
* 初始化,将参数全部缓存
|
|
11
|
+
* geoServer:地图后端服务地址
|
|
12
|
+
* headers:接口请求头
|
|
13
|
+
* layerHost:{} 当需要在不同的网络环境改变访问对应图层的url前缀时,需要配置此参数。
|
|
14
|
+
* 其中的字段:如果是服务器端配置的字典固定图层,那么以host作为字段,值为替换的url前缀
|
|
15
|
+
* 如果是geoServer服务器,那么配置字段固定为:geoServer
|
|
16
|
+
* @param {*} p
|
|
21
17
|
*/
|
|
22
|
-
static
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
let
|
|
27
|
-
|
|
28
|
-
OM.view = new View({
|
|
29
|
-
center: center,
|
|
30
|
-
zoom: zoom,
|
|
31
|
-
projection: projection
|
|
32
|
-
});
|
|
33
|
-
OM.map = new Map({
|
|
34
|
-
target: target,
|
|
35
|
-
controls: [],
|
|
36
|
-
layers: layers,
|
|
37
|
-
view: OM.view,
|
|
38
|
-
});
|
|
18
|
+
static initParam(params) {
|
|
19
|
+
sessionStorage.setItem("map-params", JSON.stringify(params));
|
|
20
|
+
}
|
|
21
|
+
static _getParams() {
|
|
22
|
+
let paramsStr = sessionStorage.getItem("map-params");
|
|
23
|
+
return JSON.parse(paramsStr);
|
|
39
24
|
}
|
|
40
25
|
/**
|
|
41
|
-
*
|
|
42
|
-
* @param {*}
|
|
26
|
+
* post请求
|
|
27
|
+
* @param {*} url
|
|
28
|
+
* @param {*} data
|
|
29
|
+
* @returns
|
|
43
30
|
*/
|
|
44
|
-
static
|
|
45
|
-
let
|
|
46
|
-
let
|
|
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
|
-
|
|
31
|
+
static async post(url, data) {
|
|
32
|
+
let params = OM._getParams();
|
|
33
|
+
let headers = params.headers || [];
|
|
34
|
+
let res = await HttpUtil.post(params.geoServer + url, data, headers);
|
|
35
|
+
return JSON.parse(res);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* 获取字典
|
|
39
|
+
* @param {*} key
|
|
40
|
+
*/
|
|
41
|
+
static getDic(key) {
|
|
42
|
+
return OM.post("/map/getDic", { dicKey: key });
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* 获取图层属性分页
|
|
46
|
+
* 返回:对象集合,cdGeoField:为几何对象字段
|
|
47
|
+
* @param {*} p {layerName,where}
|
|
48
|
+
*/
|
|
49
|
+
static getLayerAttrPage(p) {
|
|
50
|
+
return OM.post("/map/getLayerAttrPage", p);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* 裁剪分析
|
|
54
|
+
* 返回:{resLayer(结果图层),resRowCount(结果条数)},结果条数为0时,无结果图层
|
|
55
|
+
* @param {*} p {layerName,clipGeo(裁剪范围 geoJson/wkt)}
|
|
56
|
+
*/
|
|
57
|
+
static clip(p) {
|
|
58
|
+
return OM.post("/map/clip", p);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* 叠加分析,结果保留图层1的字段
|
|
62
|
+
* 返回:{resLayer(结果图层),resRowCount(结果条数)},结果条数为0时,无结果图层
|
|
63
|
+
* @param {*} p {layerName1,layerName2}
|
|
64
|
+
*/
|
|
65
|
+
static overlaps(p) {
|
|
66
|
+
return OM.post("/map/overlaps", p);
|
|
79
67
|
}
|
|
80
68
|
/**
|
|
81
|
-
*
|
|
82
|
-
*
|
|
69
|
+
* 统计分析
|
|
70
|
+
* 返回:对象集合
|
|
71
|
+
* @param {*} p {layerName,groupFields(分组字段,多个以逗号隔开),totalField(被统计的字段,可以没有)}
|
|
83
72
|
*/
|
|
84
|
-
static
|
|
85
|
-
|
|
86
|
-
|
|
73
|
+
static total(p) {
|
|
74
|
+
return OM.post("/map/total", p);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* 缓冲区分析,
|
|
78
|
+
* 返回:{resGeo(geoJson)}
|
|
79
|
+
* @param {*} p {geo(geoJson/wkt),distance(米)}
|
|
80
|
+
*/
|
|
81
|
+
static buffer(p) {
|
|
82
|
+
return OM.post("/map/buffer", p);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* 获取图层的范围
|
|
86
|
+
* @param {*} p {layers:[]}
|
|
87
|
+
*/
|
|
88
|
+
static getBound(p) {
|
|
89
|
+
return OM.post("/map/getBound", p);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* 向地图视图添加图层
|
|
93
|
+
* @param {*} p {mapViews(单个对象或者数组),geoLayer(geoServer固定图层),server(url,data,sort,layerCall)}
|
|
94
|
+
*/
|
|
95
|
+
static async viewLayers(p) {
|
|
96
|
+
let params = OM._getParams();
|
|
97
|
+
let layerHost = params.layerHost ? params.layerHost : {};
|
|
98
|
+
let mapViews = p.mapViews ? (p.mapViews.length ? p.mapViews : [p.mapViews]) : [MapView.Instance];
|
|
99
|
+
//先加载后端默认加载的图层
|
|
100
|
+
let temp1 = await OM.getDic("def_view_layers");
|
|
101
|
+
let defViewLayers = temp1.data ? JSON.parse(temp1.data) : [];
|
|
102
|
+
//遍历每个地图容器
|
|
103
|
+
for (let k = 0; k < mapViews.length; k++) {
|
|
104
|
+
let mapView = mapViews[k];
|
|
105
|
+
let map = mapView.map;
|
|
106
|
+
for (let i = 0; i < defViewLayers.length; i++) {
|
|
107
|
+
let obj = defViewLayers[i];
|
|
108
|
+
if (obj.type == 'ngXyz') {
|
|
109
|
+
let layerUrl = obj.host ? layerHost[obj.host] : null;
|
|
110
|
+
obj.url = layerUrl ? layerUrl : obj.url;
|
|
111
|
+
obj.layer = LayerUtil.ngXyz(obj);
|
|
112
|
+
} else if (obj.type == 'wmts') {
|
|
113
|
+
let host = obj.host ? obj.host : 'wmts';
|
|
114
|
+
let layerUrl = layerHost[host];
|
|
115
|
+
obj.urlPre = layerUrl ? layerUrl : obj.urlPre;
|
|
116
|
+
obj.layer = await LayerUtil.getWmtsLayer(obj);
|
|
117
|
+
} else if (obj.type == 'geoServer') {
|
|
118
|
+
let host = obj.host ? obj.host : 'geoServer';
|
|
119
|
+
let layerUrl = layerHost[host];
|
|
120
|
+
obj.urlPre = layerUrl ? layerUrl : obj.urlPre;
|
|
121
|
+
obj.layer = LayerUtil.geoServerWmsLayer(obj);
|
|
122
|
+
mapView.geoServerLayers.push(obj.name);
|
|
123
|
+
} else {
|
|
124
|
+
console.error("图层类型错误:", obj);
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
obj.layer.setVisible(!!obj.open);
|
|
128
|
+
//添加进入地图
|
|
129
|
+
map.addLayer(obj.layer);
|
|
130
|
+
//如果有分组
|
|
131
|
+
if (obj.group) mapView.layerGroup.push(obj);
|
|
132
|
+
//
|
|
133
|
+
mapView.viewLayers.push({ type: 'def', name: obj.name, layer: obj.layer });
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
//直接加载固定的geoServer图层
|
|
137
|
+
let geoLayerUrl = layerHost["geoServer"];
|
|
138
|
+
if (p.geoLayer) {
|
|
139
|
+
let geoLayer = p.geoLayer;
|
|
140
|
+
let geoParam = { workspace: geoLayer.workspace, url: geoLayer.wmsUrl };
|
|
141
|
+
if (geoLayerUrl) {
|
|
142
|
+
let index = geoParam.url.indexOf('/geoserver');
|
|
143
|
+
geoParam.url = geoLayerUrl + geoParam.url.substr(index);
|
|
144
|
+
}
|
|
145
|
+
for (let k = 0; k < mapViews.length; k++) {
|
|
146
|
+
let mapView = mapViews[k];
|
|
147
|
+
let map = mapView.map;
|
|
148
|
+
for (let i = 0; i < geoLayer.layers.length; i++) {
|
|
149
|
+
geoParam.name = geoLayer.layers[i];
|
|
150
|
+
let layer = LayerUtil.geoServerWmsLayer(geoParam);
|
|
151
|
+
map.addLayer(layer);
|
|
152
|
+
mapView.viewLayers.push({ type: 'geoLayer', name: geoParam.name, layer: layer });
|
|
153
|
+
mapView.geoServerLayers.push(geoParam.name);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
//再加载geoServer接口图层
|
|
158
|
+
if (p.server) {
|
|
159
|
+
let url = p.server.url ? p.server.url : "/api/getPushLayer";
|
|
160
|
+
let res = await OM.post(url, p.server.data);
|
|
161
|
+
let d = res.data;
|
|
162
|
+
let layerInfos = d.layerInfos;
|
|
163
|
+
let geoParam = { workspace: d.workspace, url: d.wmsUrl };
|
|
164
|
+
if (geoLayerUrl) {
|
|
165
|
+
let index = geoParam.url.indexOf('/geoserver');
|
|
166
|
+
geoParam.url = geoLayerUrl + geoParam.url.substr(index);
|
|
167
|
+
}
|
|
168
|
+
//排序
|
|
169
|
+
if (p.server.sort) {
|
|
170
|
+
let a = [];
|
|
171
|
+
for (let m = 0; m < p.server.sort.length; m++) {
|
|
172
|
+
let key = p.server.sort[m].toLowerCase();
|
|
173
|
+
for (let n = 0; n < layerInfos.length; n++) {
|
|
174
|
+
let name = layerInfos[n].shpNameLower;
|
|
175
|
+
if (name.indexOf(key) != -1) {
|
|
176
|
+
a.push(layerInfos[n]);
|
|
177
|
+
layerInfos.splice(n, 1);
|
|
178
|
+
n--;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
for (let i = 0; i < layerInfos.length; i++) {
|
|
183
|
+
a.push(layerInfos[i]);
|
|
184
|
+
}
|
|
185
|
+
layerInfos = a;
|
|
186
|
+
}
|
|
187
|
+
//加载
|
|
188
|
+
let layerCall = p.server.layerCall;
|
|
189
|
+
for (let k = 0; k < mapViews.length; k++) {
|
|
190
|
+
let mapView = mapViews[k];
|
|
191
|
+
let map = mapView.map;
|
|
192
|
+
for (let i = 0; i < layerInfos.length; i++) {
|
|
193
|
+
let info = layerInfos[i];
|
|
194
|
+
geoParam.name = info.tableName;
|
|
195
|
+
geoParam.mv = layerCall ? layerCall(info.shpNameLower) : null;
|
|
196
|
+
let layer = LayerUtil.geoServerWmsLayer(geoParam);
|
|
197
|
+
map.addLayer(layer);
|
|
198
|
+
mapView.viewLayers.push({ type: 'fc', name: info.shpName, layer: layer, info: info });
|
|
199
|
+
mapView.geoServerLayers.push(geoParam.name);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
//显示图层范围
|
|
204
|
+
let geoServerLayers = mapViews[0].geoServerLayers;
|
|
205
|
+
if (geoServerLayers.length > 0) {
|
|
206
|
+
let res = await OM.getBound({ layers: geoServerLayers });
|
|
207
|
+
if (res.data) {
|
|
208
|
+
var bounds = [res.data.minX, res.data.minY, res.data.maxX, res.data.maxY];
|
|
209
|
+
for (let k = 0; k < mapViews.length; k++) {
|
|
210
|
+
let mapView = mapViews[k];
|
|
211
|
+
let map = mapView.map;
|
|
212
|
+
map.getView().fit(bounds, map.getSize());
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
//只有一个图层时返回加载的图层
|
|
217
|
+
if (mapViews.length == 1) {
|
|
218
|
+
return mapViews[0].viewLayers;
|
|
87
219
|
}
|
|
88
|
-
var minX = extent[0];
|
|
89
|
-
var minY = extent[1];
|
|
90
|
-
var maxX = extent[2];
|
|
91
|
-
var maxY = extent[3];
|
|
92
|
-
// 计算中心点
|
|
93
|
-
var centerX = (minX + maxX) / 2;
|
|
94
|
-
var centerY = (minY + maxY) / 2;
|
|
95
|
-
// 计算原始宽度和高度
|
|
96
|
-
var width = maxX - minX;
|
|
97
|
-
var height = maxY - minY;
|
|
98
|
-
// 扩大一倍(乘以2)
|
|
99
|
-
var newWidth = width * 2;
|
|
100
|
-
var newHeight = height * 2;
|
|
101
|
-
// 计算新的边界
|
|
102
|
-
var newMinX = centerX - newWidth / 2;
|
|
103
|
-
var newMinY = centerY - newHeight / 2;
|
|
104
|
-
var newMaxX = centerX + newWidth / 2;
|
|
105
|
-
var newMaxY = centerY + newHeight / 2;
|
|
106
|
-
return [newMinX, newMinY, newMaxX, newMaxY];
|
|
107
220
|
}
|
|
108
221
|
/**
|
|
109
|
-
*
|
|
110
|
-
* 删除所有的覆盖物:OM.map.getOverlays().clear();
|
|
222
|
+
* 将地图缩放到指定的图层范围
|
|
111
223
|
* @param {*} p
|
|
112
224
|
*/
|
|
113
|
-
static
|
|
114
|
-
|
|
225
|
+
static async fitToLayers(p) {
|
|
226
|
+
let map = p.mapView ? p.mapView : MapView.Instance;
|
|
227
|
+
let url = p.url ? p.url : "/api/getPushLayer";
|
|
228
|
+
let res = await OM.post(url, p);
|
|
229
|
+
let d = res.data;
|
|
230
|
+
if (d.bound) {
|
|
231
|
+
var bounds = [d.bound.minX, d.bound.minY, d.bound.maxX, d.bound.maxY];
|
|
232
|
+
map.getView().fit(bounds, map.getSize());
|
|
233
|
+
} else {
|
|
234
|
+
console.log("未查询到图层:", p);
|
|
235
|
+
}
|
|
115
236
|
}
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
// 导出模块
|
|
119
|
-
export default OM;
|
|
237
|
+
}
|
package/src/index.d.ts
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
declare module 'cd-mapgis' {
|
|
2
|
+
export class MapView {
|
|
3
|
+
constructor(p: any);
|
|
4
|
+
layerGroupViewOne(group: string, key: string): void;
|
|
5
|
+
viewOnTemplayer(p: any): void;
|
|
6
|
+
clearTemplayer(): void;
|
|
7
|
+
expandExtent(): void;
|
|
8
|
+
}
|
|
2
9
|
export class OM {
|
|
3
10
|
static map: any;
|
|
4
11
|
static view: any;
|
|
@@ -14,6 +21,17 @@ declare module 'cd-mapgis' {
|
|
|
14
21
|
}): void;
|
|
15
22
|
static expandExtent(extent: number[]): number[];
|
|
16
23
|
static addOverlay(p:{html:string,point:number[],positioning?:string}): void;
|
|
24
|
+
static initParam(params: any): void;
|
|
25
|
+
static post(url: string, data: any): Promise<any>;
|
|
26
|
+
static getDic(key: string): Promise<any>;
|
|
27
|
+
static getLayerAttrPage(p: any): Promise<any>;
|
|
28
|
+
static clip(p: any): Promise<any>;
|
|
29
|
+
static overlaps(p: any): Promise<any>;
|
|
30
|
+
static total(p: any): Promise<any>;
|
|
31
|
+
static buffer(p: any): Promise<any>;
|
|
32
|
+
static getBound(p: any): Promise<any>;
|
|
33
|
+
static viewLayers(p: any): Promise<any>;
|
|
34
|
+
static fitToLayers(p: any): void;
|
|
17
35
|
}
|
|
18
36
|
export class LayerUtil {
|
|
19
37
|
static _tdt_map: {
|
|
@@ -52,5 +70,9 @@ declare module 'cd-mapgis' {
|
|
|
52
70
|
addToMap(map: any): void;
|
|
53
71
|
remove(map: any): void;
|
|
54
72
|
}
|
|
73
|
+
export class httpUtil {
|
|
74
|
+
static get(url: string): Promise<any>;
|
|
75
|
+
static post(url: string, data?: any, headers?: Array): Promise<any>;
|
|
76
|
+
}
|
|
55
77
|
}
|
|
56
78
|
|
package/src/index.js
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
// 使用 ES 模块系统
|
|
2
2
|
import OM from './OM.js';
|
|
3
|
+
import MapView from './MapView.js';
|
|
3
4
|
import LayerUtil from './LayerUtil.js';
|
|
4
5
|
import Overlay from './Overlay.js';
|
|
6
|
+
import HttpUtil from './HttpUtil.js';
|
|
5
7
|
|
|
6
8
|
// 导出模块
|
|
7
9
|
export {
|
|
8
10
|
OM,
|
|
11
|
+
MapView,
|
|
9
12
|
LayerUtil,
|
|
10
|
-
Overlay
|
|
13
|
+
Overlay,
|
|
14
|
+
HttpUtil
|
|
11
15
|
};
|