Skip to content

Commit 26d696e

Browse files
committed
【feature】对接部分iserver服务 review by qiwei
1 parent c8b4423 commit 26d696e

File tree

147 files changed

+9371
-14
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

147 files changed

+9371
-14
lines changed

build/jsdocs/template/config.json

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,10 @@
106106
"name": "邻近分析",
107107
"name_en": "ThiessenPolygonAnalyst"
108108
},
109+
"MinDistanceAnalyst": {
110+
"name": "最近距离分析",
111+
"name_en": "MinDistanceAnalyst"
112+
},
109113
"GeoRelationAnalyst": {
110114
"name": "空间关系分析",
111115
"name_en": "GeoRelationAnalyst"
@@ -130,6 +134,10 @@
130134
"name": "地形分析",
131135
"name_en": "TerrainCalculation"
132136
},
137+
"ConvexHullAnalyst": {
138+
"name": "凸包运算",
139+
"name_en": "ConvexHullAnalyst"
140+
},
133141
"BatchAnalyst": {
134142
"name": "批量分析",
135143
"name_en": "BatchAnalyst"
@@ -168,6 +176,14 @@
168176
"name": "服务区分析",
169177
"name_en": "ServiceArea"
170178
},
179+
"ConnectedEdges": {
180+
"name": "连通性分析",
181+
"name_en": "ConnectedEdges"
182+
},
183+
"TraceAnalystService": {
184+
"name": "上游/下游追踪分析",
185+
"name_en": "TraceAnalystService"
186+
},
171187
"UpstreamCirticalFaclilities": {
172188
"name": "上游/下游关键设施查找",
173189
"name_en": "UpstreamCirticalFaclilities"

examples/js/widgets.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ var widgets = {
4848
$(alertDiv).remove();
4949
}
5050
if (!$('#msg_container')[0]) {
51-
alertDiv = $("<div class='alert alert-dismissible' id='msg_container' role='alert' style='z-index:999999;position: absolute;top: 20px;left: 40%; display: none;text-align: center'><button type='button' class='close' data-dismiss='alert' aria-label='Close'><span aria-hidden='true' >&times;</span></button><strong><p id='msg' style='word-wrap: break-word'></p></strong></div>");
51+
alertDiv = $("<div class='alert alert-dismissible' id='msg_container' role='alert' style='z-index:999999;position: absolute;top: 20px;left: 40%; display: none;text-align: center'><button type='button' class='close' data-dismiss='alert' aria-label='Close'><span aria-hidden='true' >&times;</span></button><strong><p id='msg' style='word-wrap: break-word; margin: 0'></p></strong></div>");
5252
$('body').append(alertDiv)
5353
}
5454
$('#msg_container').css('width', width + 'px');
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
<!--********************************************************************
2+
* Copyright© 2000 - 2023 SuperMap Software Co.Ltd. All rights reserved.
3+
*********************************************************************-->
4+
<!DOCTYPE html>
5+
<html>
6+
<head>
7+
<meta charset="UTF-8">
8+
<title data-i18n="resources.title_layerService"></title>
9+
</head>
10+
<body style=" margin: 0;overflow: hidden;background: #fff;width: 100%;height:100%;position: absolute;top: 0;">
11+
<div id="map" style="width: 100%;height:100%">
12+
<div style="z-index: 999;position: relative;width: 250px;float:right">
13+
<div class="panel panel-primary" style="width:250px;margin-top: 20px;position: absolute;float:right">
14+
<div class="panel-heading">
15+
<h5 class='panel-title text-center'>
16+
<span data-i18n="resources.text_layerList"></span>
17+
</h5>
18+
</div>
19+
<div class="panel-body" id="layersList"></div>
20+
21+
</div>
22+
<div class="panel panel-primary legend" style="width:250px;margin-top: 400px;position: absolute;float:right;max-height: 500px;overflow: auto;">
23+
<div class="panel-heading">
24+
<h5 class='panel-title text-center'>
25+
<span data-i18n="resources.text_legend"></span>
26+
</h5>
27+
</div>
28+
<div class="panel-body" id="mapLegend"></div>
29+
</div>
30+
</div>
31+
</div>
32+
33+
<script type="text/javascript" include="bootstrap-css" src="../js/include-web.js"></script>
34+
<script type="text/javascript" src="../../dist/leaflet/include-leaflet.js"></script>
35+
<script type="text/javascript">
36+
var url = (window.isLocal ? window.server : "https://iserver.supermap.io")+"/iserver/services/map-jingjin/rest/maps/京津地区土地利用现状图";
37+
var map = L.map('map', {
38+
preferCanvas: true,
39+
crs: L.CRS.EPSG4326,
40+
center: [40.04, 117.08],
41+
maxZoom: 18,
42+
zoom: 7
43+
});
44+
new L.supermap.TiledMapLayer(url).addTo(map);
45+
getLayers();
46+
47+
function getLayers() {
48+
new L.supermap.LayerInfoService(url).getLayersInfo(function (serviceResult) {
49+
serviceResult.result.subLayers.layers.map(function (layer) {
50+
var checkbox = document.createElement('input');
51+
checkbox.type = 'checkbox';
52+
checkbox.value = layer.name;
53+
var label = document.createElement('label');
54+
label.textContent = layer.name;
55+
label.style.marginLeft = "15px"
56+
layersList.appendChild(checkbox);
57+
layersList.appendChild(label);
58+
// 初始化,默认获取土地利用图层图例
59+
if(checkbox.value === "Landuse_R@Jingjin#1"){
60+
checkbox.checked = true;
61+
createLegend();
62+
}
63+
var brElement = document.createElement('br');
64+
layersList.appendChild(brElement);
65+
});
66+
var submitBtn = document.createElement('input');
67+
submitBtn.type = 'button';
68+
submitBtn.classList ='btn btn-default';
69+
submitBtn.value = resources.btn_getLegend;
70+
submitBtn.addEventListener('click', createLegend);
71+
layersList.appendChild(submitBtn);
72+
});
73+
}
74+
75+
function createLegend() {
76+
var legendContainer = document.getElementById("mapLegend");
77+
legendContainer.innerHTML = ''
78+
// 获取所有被选中的图层,并拼接成参数
79+
var checkboxes = document.querySelectorAll('#layersList input[type="checkbox"]')
80+
var layers = "";
81+
checkboxes.forEach((checkbox) => {
82+
if (checkbox.checked) {
83+
layers += checkbox.value + "@@京津地区土地利用现状图,"
84+
}
85+
});
86+
87+
// 发起请求,获取图例
88+
var getLayersLegendInfoParams = new L.supermap.GetLayersLegendInfoParameters({
89+
// bbox 或 layers 参数必须至少设置一个参数
90+
// bbox: "114.59,37.76,119.51,42.31",
91+
layers: "show:" + layers,
92+
width: 18,
93+
height: 18
94+
})
95+
new L.supermap.LayerInfoService(url).getLayersLegendInfo(getLayersLegendInfoParams,function (serviceResult) {
96+
serviceResult.result.layerLegends.map(function (layerLegend) {
97+
layerLegend.legends.map(function (legend) {
98+
var legendPic = document.createElement('img');
99+
var legendLabel = document.createElement('span');
100+
legendLabel.innerHTML = legend.label;
101+
legendLabel.style.marginLeft = "15px"
102+
legendPic.src = legend.url;
103+
legendContainer.appendChild(legendPic);
104+
legendContainer.appendChild(legendLabel);
105+
var brElement = document.createElement('br');
106+
legendContainer.appendChild(brElement);
107+
})
108+
})
109+
});
110+
}
111+
</script>
112+
</body>
113+
</html>

examples/leaflet/02_editFeatures.html

Lines changed: 49 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,13 @@
2626
<body style=" margin: 0;overflow: hidden;background: #fff;width: 100%;height:100%;position: absolute;top: 0;">
2727
<div id="map" style="margin:0 auto;width: 100%;height: 100%"></div>
2828
<script type="text/javascript">
29-
var host = window.isLocal ? window.server : "https://iserver.supermap.io";
30-
var map, marker, featureGroup, resultLayer, featureService,
29+
var host = window.isLocal ? window.server : "http://localhost:8090/";
30+
var map, marker, featureGroup, resultLayer, featureService, newAddId,
3131
baseUrl = host + "/iserver/services/map-world/rest/maps/World",
3232
url = host + "/iserver/services/data-world/rest/data";
33+
var popup = L.popup({
34+
offset: [0, -20]
35+
})
3336
map = L.map('map', {
3437
preferCanvas: true,
3538
crs: L.CRS.EPSG4326,
@@ -72,7 +75,8 @@
7275
"<input type='button' class='btn btn-default' value='" + resources.btn_addMarker + "' onclick='addMarker()'/>&nbsp;" +
7376
"<input type='button' class='btn btn-default' value='" + resources.btn_undoAdd + "' onclick='revocationMarker()'/>&nbsp;" +
7477
"<input type='button' class='btn btn-default' value='" + resources.text_input_value_submit + "' onclick='commit()'/>&nbsp;" +
75-
"<input type='button' class='btn btn-default' value='" + resources.text_input_value_clear + "' onclick='clearLayer()'/></div>";
78+
"<input type='button' class='btn btn-default' value='" + resources.text_input_value_clear + "' onclick='clearLayer()'/>&nbsp;" +
79+
"<input type='button' class='btn btn-default' value='" + resources.btn_getMetadata + "' onclick='getMetadata()'/></div>";
7680

7781
handleMapEvent(me._div, me._map);
7882
return me._div;
@@ -160,6 +164,7 @@
160164
});
161165
featureService.editFeatures(addFeatureParams, function (serviceResult) {
162166
if (serviceResult.result.succeed) {
167+
newAddId = serviceResult.result[0];
163168
featureGroup.clearLayers();
164169
marker = null;
165170
if (resultLayer) {
@@ -175,6 +180,43 @@
175180
}
176181
}
177182

183+
function getMetadata() {
184+
// 检查是否支持元信息功能
185+
new L.supermap.DatasetService(url).getDataset("World", "Capitals", function (serviceResult) {
186+
if(!serviceResult.result.supportFeatureMetadatas) {
187+
return widgets.alert.showAlert(resources.msg_notSupportMetadatas, false);
188+
}
189+
if(!newAddId) {
190+
return widgets.alert.showAlert(resources.msg_noNewFeature, false);
191+
}
192+
// 获取地理要素元信息
193+
featureService.getMetadata({
194+
dataSourceName: "World",
195+
dataSetName: "Capitals",
196+
featureId: newAddId
197+
}, function (serviceResult) {
198+
var createTime = new Date(serviceResult.result.createTime).toLocaleString();
199+
var createUser = serviceResult.result.createUser;
200+
var lastEditTime = new Date(serviceResult.result.lastEditTime).toLocaleString();
201+
var lastEditUser = serviceResult.result.lastEditUser;
202+
// 获取新增要素坐标
203+
var idsParam = new L.supermap.GetFeaturesByIDsParameters({
204+
IDs: [newAddId],
205+
datasetNames: ["World:Capitals"]
206+
});
207+
new L.supermap.FeatureService(url).getFeaturesByIDs(idsParam, function (serviceResult) {
208+
var newAddCoor = serviceResult.result.features.features[0].geometry.coordinates;
209+
var contentHTML = resources.text_createUser + createUser + "<br/>";
210+
contentHTML += resources.text_createTime + createTime + "<br/>";
211+
contentHTML += resources.text_lastEditUser + lastEditUser + "<br/>";
212+
contentHTML += resources.text_lastEditTime + lastEditTime
213+
popup.setLatLng([newAddCoor[1], newAddCoor[0]]).setContent(contentHTML).openOn(map);
214+
});
215+
});
216+
217+
})
218+
}
219+
178220
function clearLayer() {
179221
map.on('mousemove', pointerMoveHandler);
180222
if (resultLayer) {
@@ -199,6 +241,10 @@
199241
initFeature();
200242
widgets.alert.showAlert(resources.text_deleteSuccess, true);
201243
closeClearListener();
244+
if(e.layer.feature.id === newAddId) {
245+
newAddId = undefined;
246+
map.closePopup();
247+
}
202248
} else {
203249
widgets.alert.showAlert(resources.msg_deleteFailed, false);
204250
}
Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
<!--********************************************************************
2+
* Copyright© 2000 - 2023 SuperMap Software Co.Ltd. All rights reserved.
3+
*********************************************************************-->
4+
<!DOCTYPE html>
5+
<html>
6+
<head>
7+
<meta charset="UTF-8">
8+
<title data-i18n="resources.title_minDistanceCalculation"></title>
9+
<style>
10+
#toolbar {
11+
position: absolute;
12+
top: 50px;
13+
right: 10px;
14+
width: 280px;
15+
text-align: center;
16+
z-index: 999;
17+
border-radius: 4px;
18+
}
19+
</style>
20+
</head>
21+
<body style=" margin: 0;overflow: hidden;background: #fff;width: 100%;height:100%; position: absolute;top: 0;">
22+
<div id="toolbar" class="panel panel-primary">
23+
<div class='panel-heading'>
24+
<h5 class='panel-title text-center' data-i18n="resources.text_minDistanceCalculation"></h5></div>
25+
<div class='panel-body content'>
26+
<div class='panel'>
27+
<div class='input-group'>
28+
<span class='input-group-addon' data-i18n="resources.text_minDis"></span>
29+
<input type='number' class='form-control' id='minDistance' value='0'/>
30+
</div>
31+
</div>
32+
<div class='panel'>
33+
<div class='input-group'>
34+
<span class='input-group-addon' data-i18n="resources.text_maxDis"></span>
35+
<input type='number' class='form-control' id='maxDistance' value='-1'/>
36+
</div>
37+
</div>
38+
<input type="button" class="btn btn-default" data-i18n="[value]resources.btn_minDistanceCalculation"
39+
onclick="geometryMinDistanceAnalystProcess()"/>&nbsp;
40+
<input type="button" class="btn btn-default" data-i18n="[value]resources.btn_clearLayer"
41+
onclick="removeLayer()"/>
42+
</div>
43+
</div>
44+
<div id="map" style="width: 100%;height:100%"></div>
45+
<script type="text/javascript" include="bootstrap,widgets.alert" src="../js/include-web.js"></script>
46+
<script type="text/javascript" src="../../dist/leaflet/include-leaflet.js"></script>
47+
<script type="text/javascript">
48+
var map, options, pointGeometryData, lineVectorSource,lineResultLayer,
49+
baseUrl = (window.isLocal ? window.server : "https://iserver.supermap.io")+"/iserver/services/map-changchun/rest/maps/长春市区图",
50+
serviceUrl = (window.isLocal ? window.server : "https://iserver.supermap.io")+"/iserver/services/spatialanalyst-changchun/restjsr/spatialanalyst";
51+
map = L.map('map', {
52+
crs: new L.supermap.CRS.NonEarthCRS({
53+
bounds: L.bounds([48.4, -7668.25], [8958.85, -55.58]),
54+
origin: L.point(48.4, -55.58)
55+
}),
56+
center: [-3861.91, 4503.62],
57+
maxZoom: 18,
58+
zoom: 2
59+
});
60+
var popup = L.popup({
61+
offset: [0, -20]
62+
})
63+
new L.supermap.TiledMapLayer(baseUrl, {noWrap: true}).addTo(map);
64+
// 添加被计算的点
65+
var marker1 = L.marker([-3500, 2000]).addTo(map);
66+
addReference();
67+
68+
function geometryMinDistanceAnalystProcess() {
69+
removeLayer();
70+
var minDistance = parseFloat(document.getElementById("minDistance").value);
71+
var maxDistance = parseFloat(document.getElementById("maxDistance").value);
72+
// 进行分析,查找距离参考数据集的最近距离
73+
var minDistanceAnalystParameters = new L.supermap.GeometryMinDistanceAnalystParameters({
74+
inputGeometries: [L.marker([-3500, 2000])],
75+
referenceDatasetName: "Park@Changchun",
76+
createResultDataset: false,
77+
minDistance: minDistance,
78+
maxDistance: maxDistance
79+
});
80+
new L.supermap.SpatialAnalystService(serviceUrl).minDistanceAnalysis(minDistanceAnalystParameters, function (serviceResult) {
81+
// 检查参数,给予错误信息提示
82+
if(serviceResult.error){
83+
return widgets.alert.showAlert(serviceResult.error.errorMsg,false);
84+
}
85+
var minDistanceAnalystResult = serviceResult.result.distanceResults
86+
var resultMsg = serviceResult.result.message;
87+
if(!minDistanceAnalystResult) {
88+
return widgets.alert.showAlert(resultMsg || resources.msg_minDistance,false);
89+
}
90+
var innerHTML = resources.text_minDistanceIs + minDistanceAnalystResult[0].distance;
91+
popup.setLatLng([-3500, 2000])
92+
.setContent(innerHTML)
93+
.openOn(map);
94+
95+
var referenceIds = minDistanceAnalystResult[0].referenceGeometryIDs
96+
addPathLine(referenceIds)
97+
});
98+
}
99+
// 添加参考数据集的要素
100+
function addReference() {
101+
var sqlParam = new L.supermap.QueryBySQLParameters({
102+
toIndex: -1,
103+
queryParams: {
104+
name: "Park@Changchun",
105+
attributeFilter: "SMID >= 0 "
106+
}
107+
});
108+
new L.supermap.QueryService(baseUrl).queryBySQL(sqlParam, function (serviceResult) {
109+
var resultFeatures = serviceResult.result.recordsets[0].features;
110+
var myIcon = L.icon({
111+
iconUrl: '../img/marker.png',
112+
iconSize: [44, 30]
113+
});
114+
resultLayer = L.geoJSON(resultFeatures, {
115+
pointToLayer: function (geoPoints, latlng) {
116+
L.marker(latlng, { icon: myIcon }).addTo(map);
117+
},}).addTo(map);
118+
});
119+
}
120+
// 创建被计算对象与参考对象之间的连线
121+
function addPathLine(referenceIds) {
122+
var referenceIdsStr = '(' + referenceIds.join(', ') + ')';
123+
var sqlParam = new L.supermap.QueryBySQLParameters({
124+
toIndex: -1,
125+
queryParams: {
126+
name: "Park@Changchun",
127+
attributeFilter: "SMID IN " + referenceIdsStr
128+
}
129+
});
130+
new L.supermap.QueryService(baseUrl).queryBySQL(sqlParam, function (serviceResult) {
131+
var resFrature = serviceResult.result.recordsets[0].features;
132+
var resFratureCoor = [resFrature.features[0].geometry.coordinates[1], resFrature.features[0].geometry.coordinates[0]]
133+
lineResultLayer = L.polyline([resFratureCoor, marker1.getLatLng()], {color: '#304DBE'}).addTo(map);
134+
});
135+
}
136+
//移除结果图层
137+
function removeLayer() {
138+
widgets.alert.clearAlert();
139+
if (lineResultLayer && map.hasLayer(lineResultLayer)) {
140+
map.removeLayer(lineResultLayer);
141+
map.closePopup();
142+
}
143+
}
144+
</script>
145+
</body>
146+
</html>

0 commit comments

Comments
 (0)