02_editFeatures.html 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  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. <script type="text/javascript" include="bootstrap,widgets.alert" src="../js/include-web.js"></script>
  10. <script type="text/javascript" src="../../dist/leaflet/include-leaflet.js"></script>
  11. <style>
  12. .leaflet-tooltip, .leaflet-tooltip:before {
  13. color: white;
  14. border: none;
  15. background: rgba(0, 0, 0, 0.5);
  16. }
  17. .tooltip-inner {
  18. width: 80px;
  19. background-color: transparent;
  20. color: #515151;
  21. }
  22. </style>
  23. </head>
  24. <body style=" margin: 0;overflow: hidden;background: #fff;width: 100%;height:100%;position: absolute;top: 0;">
  25. <div id="map" style="margin:0 auto;width: 100%;height: 100%"></div>
  26. <script type="text/javascript">
  27. var host = window.isLocal ? window.server : "https://iserver.supermap.io";
  28. var map, marker, featureGroup, resultLayer, featureService,
  29. baseUrl = host + "/iserver/services/map-world/rest/maps/World",
  30. url = host + "/iserver/services/data-world/rest/data";
  31. map = L.map('map', {
  32. preferCanvas: true,
  33. crs: L.CRS.EPSG4326,
  34. center: {lon: 0, lat: 0},
  35. maxZoom: 18,
  36. zoom: 2
  37. });
  38. L.supermap.tiledMapLayer(baseUrl).addTo(map);
  39. featureGroup = L.featureGroup().addTo(map);
  40. featureService = L.supermap.featureService(url);
  41. initFeature();
  42. initEditView();
  43. function initFeature() {
  44. var polygon = L.polygon([[20, 118], [20, 120], [50, 120], [50, -120], [20, 118]]);
  45. var getFeatureParams = new SuperMap.GetFeaturesByGeometryParameters({
  46. toIndex: -1,
  47. datasetNames: ["World:Capitals"],
  48. geometry: polygon
  49. });
  50. featureService.getFeaturesByGeometry(getFeatureParams, function (serviceResult) {
  51. resultLayer = L.geoJSON(serviceResult.result.features).addTo(map);
  52. resultLayer.on("mousemove", function (e) {
  53. e.layer.bindPopup(resources.text_capital + ":" + e.layer.feature.properties.CAPITAL).openPopup();
  54. });
  55. resultLayer.on("mouseout", function (e) {
  56. e.layer.closePopup();
  57. });
  58. });
  59. }
  60. function initEditView() {
  61. var infoView = L.control({position: 'topright'});
  62. infoView.onAdd = function () {
  63. var me = this;
  64. me._div = L.DomUtil.create('div', 'panel panel-primary');
  65. me._div.innerHTML = "<div class='panel-heading'>" +
  66. "<h5 class='panel-title text-center'>" + resources.text_edit + "</h5></div><div class='panel-body content'>" +
  67. "<input type='button' class='btn btn-default' value='" + resources.btn_addMarker + "' onclick='addMarker()'/>&nbsp;" +
  68. "<input type='button' class='btn btn-default' value='" + resources.btn_undoAdd + "' onclick='revocationMarker()'/>&nbsp;" +
  69. "<input type='button' class='btn btn-default' value='" + resources.text_input_value_submit + "' onclick='commit()'/>&nbsp;" +
  70. "<input type='button' class='btn btn-default' value='" + resources.text_input_value_clear + "' onclick='clearLayer()'/></div>";
  71. handleMapEvent(me._div, me._map);
  72. return me._div;
  73. };
  74. infoView.addTo(map);
  75. }
  76. function handleMapEvent(div, map) {
  77. if (!div || !map) {
  78. return;
  79. }
  80. div.addEventListener('mouseover', function () {
  81. map.dragging.disable();
  82. map.scrollWheelZoom.disable();
  83. map.doubleClickZoom.disable();
  84. });
  85. div.addEventListener('mouseout', function () {
  86. map.dragging.enable();
  87. map.scrollWheelZoom.enable();
  88. map.doubleClickZoom.enable();
  89. });
  90. }
  91. //添加鼠标滑动事件
  92. var tooltip = L.tooltip({
  93. direction: 'right'
  94. });
  95. var pointerMoveHandler = function (evt) {
  96. tooltip.setContent(resources.text_selectMarkerToDelete);
  97. tooltip.setLatLng(evt.latlng);
  98. tooltip.addTo(map);
  99. };
  100. function addMarker() {
  101. widgets.alert.clearAlert();
  102. closeClearListener();
  103. var xmax = 120, xmin = 100, ymax = 50, ymin = 20,
  104. point = [];
  105. if (!featureGroup.hasLayer(marker)) {
  106. point = [
  107. Math.floor(Math.random() * (ymax - ymin + 1) + ymin),
  108. Math.floor(Math.random() * (xmax - xmin + 1) + xmin)
  109. ];
  110. marker = L.circleMarker(point, {color: "red"});
  111. featureGroup.addLayer(marker);
  112. featureGroup.addTo(map);
  113. map.flyTo(point, 5);
  114. } else {
  115. featureGroup.clearLayers();
  116. point = [
  117. Math.floor(Math.random() * (ymax - ymin + 1) + ymin),
  118. Math.floor(Math.random() * (xmax - xmin + 1) + xmin)
  119. ];
  120. marker = L.circleMarker(point, {color: "red"});
  121. featureGroup.addLayer(marker);
  122. featureGroup.addTo(map);
  123. map.flyTo(point, 5);
  124. }
  125. }
  126. function revocationMarker() {
  127. closeClearListener();
  128. if (featureGroup.hasLayer(marker)) {
  129. featureGroup.clearLayers();
  130. marker = null;
  131. } else {
  132. widgets.alert.showAlert(resources.msg_noRevocableMarker, false);
  133. }
  134. }
  135. function commit() {
  136. widgets.alert.clearAlert();
  137. closeClearListener();
  138. if (featureGroup.hasLayer(marker)) {
  139. marker = marker.toGeoJSON();
  140. marker.properties = {POP: 1, CAPITAL: 'test'};
  141. var addFeatureParams = new SuperMap.EditFeaturesParameters({
  142. dataSourceName: "World",
  143. dataSetName: "Capitals",
  144. features: marker,
  145. editType: "add",
  146. returnContent: true
  147. });
  148. featureService.editFeatures(addFeatureParams, function (serviceResult) {
  149. if (serviceResult.result.succeed) {
  150. featureGroup.clearLayers();
  151. marker = null;
  152. if (resultLayer) {
  153. map.removeLayer(resultLayer);
  154. resultLayer = null;
  155. }
  156. initFeature();
  157. widgets.alert.showAlert(resources.msg_submitSuccess, true);
  158. }
  159. });
  160. } else {
  161. widgets.alert.showAlert(resources.msg_addMarker, false);
  162. }
  163. }
  164. function clearLayer() {
  165. map.on('mousemove', pointerMoveHandler);
  166. if (resultLayer) {
  167. resultLayer.on("click", layerClickListener);
  168. }
  169. widgets.alert.clearAlert();
  170. }
  171. function layerClickListener(e) {
  172. var deleteParams = new SuperMap.EditFeaturesParameters({
  173. dataSourceName: "World",
  174. dataSetName: "Capitals",
  175. IDs: [e.layer.feature.id],
  176. editType: "delete"
  177. });
  178. featureService.editFeatures(deleteParams, function (serviceResult) {
  179. if (serviceResult.result.succeed) {
  180. if (resultLayer) {
  181. map.removeLayer(resultLayer);
  182. resultLayer = null;
  183. }
  184. initFeature();
  185. widgets.alert.showAlert(resources.text_deleteSuccess, true);
  186. closeClearListener();
  187. } else {
  188. widgets.alert.showAlert(resources.msg_deleteFailed, false);
  189. }
  190. });
  191. }
  192. function closeClearListener() {
  193. if (map.hasLayer(tooltip)) {
  194. tooltip.removeFrom(map);
  195. }
  196. if (resultLayer) {
  197. resultLayer.off("click", layerClickListener);
  198. }
  199. map.off('mousemove', pointerMoveHandler);
  200. }
  201. </script>
  202. </body>
  203. </html>