query_editFeature.html 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355
  1. <!--********************************************************************
  2. * Copyright© 2000 - 2021 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_editFeature"></title>
  9. <style type="text/css">
  10. body {
  11. margin: 0;
  12. overflow: hidden;
  13. background: #fff;
  14. width: 100%;
  15. height: 100%
  16. }
  17. #map {
  18. position: absolute;
  19. width: 100%;
  20. height: 100%;
  21. }
  22. #toolbar {
  23. position: absolute;
  24. top: 50px;
  25. right: 10px;
  26. text-align: center;
  27. z-index: 100;
  28. border-radius: 4px;
  29. }
  30. </style>
  31. </head>
  32. <body>
  33. <div id="toolbar" class="panel panel-primary">
  34. <div class='panel-heading'>
  35. <h5 class='panel-title text-center' data-i18n="resources.title_editFeature"></h5></div>
  36. <div class='panel-body content'>
  37. <input type="button" class="btn btn-default" data-i18n="[value]resources.btn_addFeature"
  38. onclick="activateAddFeature()"/>
  39. <input type="button" class="btn btn-default" data-i18n="[value]resources.btn_selectFeature"
  40. onclick="activateSelectedFeature()"/>
  41. <input type="button" class="btn btn-default" data-i18n="[value]resources.btn_editFeature"
  42. onclick="editselectedFeature()"/>
  43. <input type="button" class="btn btn-default" data-i18n="[value]resources.btn_deleteFeature"
  44. onclick="deleteSelectedFeature()"/>
  45. </div>
  46. </div>
  47. <div id="map"></div>
  48. <script type="text/javascript" include="bootstrap,widgets.alert" src="../js/include-web.js"></script>
  49. <script type="text/javascript" src="../../dist/classic/include-classic.js"></script>
  50. <script>
  51. var host = window.isLocal ? window.server : "https://iserver.supermap.io";
  52. var map, local, layer, vectorLayer, drawPoint, drawPolygon, dataUrl, ids, modifyFeature,
  53. style = {
  54. strokeColor: "#304DBE",
  55. strokeWidth: 1,
  56. pointerEvents: "visiblePainted",
  57. fillColor: "#304DBE",
  58. fillOpacity: 0.8,
  59. pointRadius: 2
  60. },
  61. url1 = host + "/iserver/services/map-jingjin/rest/maps/京津地区土地利用现状图",
  62. url2 = host + "/iserver/services/data-jingjin/rest/data/datasources/name/Jingjin/datasets/name/BaseMap_R/",
  63. url3 = host + "/iserver/services/data-jingjin/rest/data/";
  64. init();
  65. function init() {
  66. layer = new SuperMap.Layer.TiledDynamicRESTLayer("京津", url1, {
  67. transparent: true,
  68. cacheEnabled: false
  69. }, {maxResolution: "auto", bufferImgCount: 0}); //将bufferImgCount设置为0,不使用缓存,编辑后,刷新图层,永远请求最新的图片
  70. layer.events.on({"layerInitialized": addLayer});
  71. vectorLayer = new SuperMap.Layer.Vector("Vector Layer");
  72. vectorLayer.events.on({"afterfeaturemodified": editFeatureCompleted});
  73. modifyFeature = new SuperMap.Control.ModifyFeature(vectorLayer);
  74. drawPoint = new SuperMap.Control.DrawFeature(vectorLayer, SuperMap.Handler.Point);
  75. drawPoint.events.on({"featureadded": selectedFeatureCompleted});
  76. drawPolygon = new SuperMap.Control.DrawFeature(vectorLayer, SuperMap.Handler.Polygon);
  77. drawPolygon.events.on({"featureadded": addFeatureCompleted});
  78. map = new SuperMap.Map("map", {
  79. controls: [
  80. new SuperMap.Control.ScaleLine(),
  81. new SuperMap.Control.Zoom(),
  82. new SuperMap.Control.Navigation({
  83. dragPanOptions: {
  84. enableKinetic: true
  85. }
  86. }),
  87. drawPoint, drawPolygon]
  88. });
  89. map.addControl(modifyFeature);
  90. map.addControl(new SuperMap.Control.LayerSwitcher(), new SuperMap.Pixel(42, 80));
  91. }
  92. function addLayer() {
  93. map.addLayers([layer, vectorLayer]);
  94. map.setCenter(new SuperMap.LonLat(117, 40), 0);
  95. readDataToVectorLayer();
  96. }
  97. //每次操作后,更新VectorLayer上的要素
  98. function readDataToVectorLayer() {
  99. var GetFeaturesByBoundsParameters, getFeaturesByGeometryService;
  100. GetFeaturesByBoundsParameters = new SuperMap.REST.GetFeaturesByBoundsParameters({
  101. datasetNames: ["Jingjin:BaseMap_R"],
  102. spatialQueryMode: SuperMap.REST.SpatialQueryMode.INTERSECT,
  103. bounds: map.getExtent()
  104. });
  105. getFeaturesByGeometryService = new SuperMap.REST.GetFeaturesByBoundsService(url3, {
  106. eventListeners: {
  107. "processCompleted": function (e) {
  108. console.log(e);
  109. vectorLayer.addFeatures(e.result.features);
  110. },
  111. "processFailed": null
  112. }
  113. });
  114. getFeaturesByGeometryService.processAsync(GetFeaturesByBoundsParameters);
  115. }
  116. //激活添加地物
  117. function activateAddFeature() {
  118. widgets.alert.clearAlert();
  119. //先清除上次的显示结果
  120. // vectorLayer.removeAllFeatures();
  121. clearAllDeactivate();
  122. drawPolygon.activate();
  123. }
  124. //执行添加地物
  125. function addFeatureCompleted(drawGeometryArgs) {
  126. drawPolygon.deactivate();
  127. var geometry = drawGeometryArgs.feature.geometry,
  128. feature = new SuperMap.Feature.Vector();
  129. feature.geometry = drawGeometryArgs.feature.geometry,
  130. feature.style = style;
  131. vectorLayer.addFeatures(feature);
  132. geometry.id = "100000";
  133. var editFeatureParameter,
  134. editFeatureService,
  135. features = {
  136. fieldNames: [],
  137. fieldValues: [],
  138. geometry: geometry
  139. };
  140. editFeatureParameter = new SuperMap.REST.EditFeaturesParameters({
  141. features: [features],
  142. editType: SuperMap.REST.EditType.ADD,
  143. returnContent: false
  144. });
  145. editFeatureService = new SuperMap.REST.EditFeaturesService(url2, {
  146. eventListeners: {
  147. "processCompleted": addFeaturesProcessCompleted,
  148. "processFailed": processFailed
  149. }
  150. });
  151. editFeatureService.processAsync(editFeatureParameter);
  152. }
  153. //添加地物成功
  154. function addFeaturesProcessCompleted(editFeaturesEventArgs) {
  155. var addResultIds = editFeaturesEventArgs.result.IDs,
  156. resourceInfo = editFeaturesEventArgs.result.resourceInfo;
  157. if (addResultIds === null && resourceInfo === null) return;
  158. if ((addResultIds && addResultIds.length > 0) || (resourceInfo && resourceInfo.succeed)) {
  159. widgets.alert.showAlert(resources.msg_addFeatureSuccess, true, 240);
  160. vectorLayer.removeAllFeatures();
  161. readDataToVectorLayer();
  162. //重新加载图层
  163. layer.redraw();
  164. } else {
  165. widgets.alert.showAlert(resources.msg_addFeatureFailed, false, 240);
  166. }
  167. }
  168. function processFailed(e) {
  169. widgets.alert.showAlert(e.error.errorMsg, false);
  170. }
  171. //激活选择地物
  172. function activateSelectedFeature() {
  173. widgets.alert.clearAlert();
  174. clearAllDeactivate();
  175. drawPoint.activate();
  176. }
  177. //执行选择地物
  178. function selectedFeatureCompleted(drawGeometryArgs) {
  179. drawPoint.deactivate();
  180. var getFeaturesByGeometryParams,
  181. getFeaturesByGeometryService,
  182. geometry = drawGeometryArgs.feature.geometry;
  183. getFeaturesByGeometryParams = new SuperMap.REST.GetFeaturesByGeometryParameters({
  184. datasetNames: ["Jingjin:BaseMap_R"],
  185. spatialQueryMode: SuperMap.REST.SpatialQueryMode.INTERSECT,
  186. geometry: geometry
  187. });
  188. getFeaturesByGeometryService = new SuperMap.REST.GetFeaturesByGeometryService(url3, {
  189. eventListeners: {
  190. "processCompleted": selectedFeatureProcessCompleted,
  191. "processFailed": processFailed
  192. }
  193. });
  194. getFeaturesByGeometryService.processAsync(getFeaturesByGeometryParams);
  195. }
  196. //选择地物完成
  197. function selectedFeatureProcessCompleted(getFeaturesEventArgs) {
  198. var features,
  199. feature,
  200. i, len,
  201. originFeatures = getFeaturesEventArgs.originResult.features,
  202. result = getFeaturesEventArgs.result;
  203. vectorLayer.removeAllFeatures();
  204. if (originFeatures === null || originFeatures.length === 0) {
  205. widgets.alert.showAlert(resources.msg_queryFeatureEmpty, false, 240);
  206. return;
  207. }
  208. ids = new Array();
  209. //将当前选择的地物的ID保存起来,以备删除地物使用,并在编辑地物中使之为null,以免编辑地物后在不选择地物时将所编辑的地物删除
  210. for (i = 0, len = originFeatures.length; i < len; i++) {
  211. ids.push(originFeatures[i].ID);
  212. }
  213. if (result && result.features) {
  214. features = result.features;
  215. for (var j = 0, len = features.length; j < len; j++) {
  216. feature = features[j];
  217. feature.style = style;
  218. vectorLayer.addFeatures(feature);
  219. }
  220. }
  221. readDataToVectorLayer();
  222. }
  223. //激活编辑地物
  224. function editselectedFeature() {
  225. widgets.alert.clearAlert();
  226. clearAllDeactivate();
  227. if (ids == null) {
  228. widgets.alert.showAlert(resources.msg_selectFeatureFirstly, false, 260);
  229. }
  230. else {
  231. modifyFeature.activate();
  232. }
  233. }
  234. //执行地物编辑
  235. function editFeatureCompleted(event) {
  236. modifyFeature.deactivate();
  237. var editFeatureParameter,
  238. editFeatureService,
  239. features,
  240. attributes,
  241. feature = event.feature;
  242. attributes = feature.attributes;
  243. var attrNames = [];
  244. var attrValues = [];
  245. for (var attr in attributes) {
  246. attrNames.push(attr);
  247. attrValues.push(attributes[attr]);
  248. }
  249. features = {
  250. fieldNames: attrNames,
  251. fieldValues: attrValues,
  252. geometry: event.feature.geometry
  253. };
  254. features.geometry.id = feature.fid;
  255. editFeatureParameter = new SuperMap.REST.EditFeaturesParameters({
  256. features: [features],
  257. editType: SuperMap.REST.EditType.UPDATE
  258. });
  259. editFeatureService = new SuperMap.REST.EditFeaturesService(url2, {
  260. eventListeners: {
  261. "processCompleted": updateFeaturesProcessCompleted,
  262. "processFailed": processFailed
  263. }
  264. });
  265. editFeatureService.processAsync(editFeatureParameter);
  266. }
  267. //更新地物完成
  268. function updateFeaturesProcessCompleted(editFeaturesEventArgs) {
  269. if (editFeaturesEventArgs.result.resourceInfo.succeed) {
  270. widgets.alert.showAlert(resources.msg_updateFeatureSuccess, true, 240);
  271. //重新加载图层
  272. vectorLayer.removeAllFeatures();
  273. layer.redraw();
  274. //使Ids为空,以免编辑地物后在不选择地物时将所编辑的地物删除
  275. ids = null;
  276. }
  277. else {
  278. widgets.alert.showAlert(resources.msg_updateFeatureFailed, false, 240);
  279. }
  280. readDataToVectorLayer();
  281. }
  282. //删除选中地物
  283. function deleteSelectedFeature() {
  284. widgets.alert.clearAlert();
  285. clearAllDeactivate();
  286. if (ids == null) {
  287. widgets.alert.showAlert(resources.msg_selectFeatureFirstly, false, 240);
  288. }
  289. else {
  290. var editFeatureParameter,
  291. editFeatureService;
  292. editFeatureParameter = new SuperMap.REST.EditFeaturesParameters({
  293. IDs: ids,
  294. editType: SuperMap.REST.EditType.DELETE
  295. });
  296. editFeatureService = new SuperMap.REST.EditFeaturesService(url2, {
  297. eventListeners: {
  298. "processCompleted": deleteFeaturesProcessCompleted,
  299. "processFailed": processFailed
  300. }
  301. });
  302. editFeatureService.processAsync(editFeatureParameter);
  303. }
  304. }
  305. //删除地物完成
  306. function deleteFeaturesProcessCompleted(editFeaturesEventArgs) {
  307. if (editFeaturesEventArgs.result.resourceInfo.succeed) {
  308. widgets.alert.showAlert(resources.msg_deleteFeatureSuccess, true, 240);
  309. //重新加载图层
  310. vectorLayer.removeAllFeatures();
  311. readDataToVectorLayer();
  312. layer.redraw();
  313. }
  314. else {
  315. widgets.alert.showAlert(resources.msg_deleteFeatureFailed, false, 240);
  316. }
  317. }
  318. function clearAllDeactivate() {
  319. modifyFeature.deactivate();
  320. drawPoint.deactivate();
  321. drawPolygon.deactivate();
  322. }
  323. </script>
  324. </body>
  325. </html>