vectorClipJobService.html 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  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_vectorClipService"></title>
  9. <script type="text/javascript" include="jquery,bootstrap,widgets" src="../js/include-web.js"></script>
  10. </head>
  11. <body style=" margin: 0;overflow: hidden;background: #fff;width: 100%;height:100%;position: absolute;top: 0;">
  12. <div id="map" style="width: 100%;height:100%"></div>
  13. <script type="text/javascript" include="leaflet.draw" src="../../dist/leaflet/include-leaflet.js"></script>
  14. <script type="text/javascript">
  15. var host = window.isLocal ? window.server : "https://iserver.supermap.io";
  16. var layer, processingService,
  17. processingUrl = host + "/iserver/services/distributedanalyst/rest/v1/jobs",
  18. mapURL = host + "/iserver/services/map-world/rest/maps/World",
  19. map = L.map('map', {
  20. crs: L.CRS.EPSG4326,
  21. center: [40.75, -73.95],
  22. maxZoom: 18,
  23. zoom: 12
  24. }),
  25. info = L.control({
  26. position: 'topright'
  27. });
  28. L.supermap.tiledMapLayer(mapURL).addTo(map);
  29. processingService = L.supermap.processingService(processingUrl, {
  30. withCredentials: window.isLocal
  31. });
  32. SuperMap.SecurityManager.registerToken(processingUrl, window.exampleToken);
  33. var drawLayer = new L.FeatureGroup();
  34. map.addLayer(drawLayer);
  35. var options = {
  36. position: 'topleft',
  37. draw: {
  38. polygon: true,
  39. circle: false,
  40. rectangle: false,
  41. marker: false,
  42. circlemarker: false,
  43. polyline: false
  44. },
  45. edit: {
  46. featureGroup: drawLayer,
  47. remove: true
  48. }
  49. };
  50. var drawControl = new L.Control.Draw(options);
  51. handleMapEvent(drawControl._container, map);
  52. map.on(L.Draw.Event.CREATED, function (e) {
  53. drawLayer.addLayer(e.layer);
  54. });
  55. initForm();
  56. bindClick();
  57. function initForm() {
  58. info = L.control({
  59. position: 'topright'
  60. });
  61. info.onAdd = function () {
  62. var popup = L.DomUtil.create('div');
  63. popup.style.width = '350px';
  64. popup.innerHTML = "<div class='panel panel-default'>" +
  65. "<div class='panel-heading'>" +
  66. "<h3 class='panel-title'>" + resources.title_vectorClipService + "</h3>" +
  67. "</div>" +
  68. "<div class='panel-body'>" +
  69. "<div class='input-group'>" +
  70. "<span class='input-group-addon'>" + resources.text_sourceDataset + "<span title='" + resources
  71. .text_requiredField + "' style='color: red;'> * </span> </span>" +
  72. "<input id='datasetName' type='text' class='form-control' " +
  73. "value='samples_processing_newyorkZone_R'/>" +
  74. "</div><p></p>" +
  75. "<div class='input-group'>" +
  76. "<span class='input-group-addon'>" + resources.text_clipObjectMode + "<span title='" +
  77. resources.text_requiredField + "' style='color: red;'> * </span></span>" +
  78. "<select class='form-control' id='clipMode' name='clipMode'>" +
  79. "<option value='DATASET' selected>" + resources.text_dataset + "</option>" +
  80. "<option value='GEOJSON'>Geojson</option>" +
  81. "</select>" +
  82. "</div><p></p>" +
  83. "<div class='input-group' id='datasetDiv'>" +
  84. "<span class='input-group-addon'>" + resources.text_clipObjectDataset + "<span title='" +
  85. resources.text_requiredField + "' style='color: red;'> * </span></span>" +
  86. "<input id='datasetVectorClip' type='text' class='form-control' " +
  87. "value='samples_processing_singleRegion_R'/>" +
  88. "</div><p></p>" +
  89. "<div class='input-group'>" +
  90. "<span class='input-group-addon'>" + resources.text_clipMode + "<span title='" + resources.text_requiredField +
  91. "' style='color: red;'> * </span></span>" +
  92. "<select class='form-control' id='mode' name='mode'>" +
  93. "<option value='clip' selected>" + resources.text_internalClip + "</option>" +
  94. "<option value='intersect'>" + resources.text_externalClip + "</option>" +
  95. "</select>" +
  96. "</div><p></p>" +
  97. "<div align='right'>" +
  98. "<input type='button' id='btn' class='btn btn-primary' value='" + resources.text_clip + "'/>" +
  99. "</div></div></div>";
  100. handleMapEvent(popup, this._map);
  101. return popup;
  102. };
  103. info.addTo(map);
  104. $("#clipMode").change(function () {
  105. var clipMode = $(this).val();
  106. if (clipMode === "DATASET") {
  107. map.removeControl(drawControl);
  108. $('#datasetDiv').show();
  109. }
  110. if (clipMode === "GEOJSON") {
  111. map.addControl(drawControl);
  112. $('#datasetDiv').hide();
  113. }
  114. });
  115. }
  116. function bindClick() {
  117. $('#btn').on('click', function () {
  118. widgets.alert.clearAlert();
  119. widgets.loader.showLoader();
  120. if (map && layer) {
  121. map.removeLayer(layer);
  122. }
  123. addVectorClipJobs();
  124. });
  125. }
  126. function addVectorClipJobs() {
  127. var points, clipParam;
  128. if ($('#clipMode').val() === "DATASET") {
  129. clipParam = $('#datasetVectorClip').val();
  130. points = [];
  131. }
  132. if ($('#clipMode').val() === "GEOJSON") {
  133. var result = drawLayer.toGeoJSON();
  134. if (result.features.length > 1) {
  135. widgets.loader.removeLoader();
  136. widgets.alert.showAlert(resources.msg_createFailed + "<br>" + resources.msg_vectorClip, false);
  137. return;
  138. } else {
  139. if (result.features.length < 1) {
  140. widgets.loader.removeLoader();
  141. widgets.alert.showAlert(resources.msg_createFailed + "<br>" + resources.msg_drawClipBounds,
  142. false);
  143. return;
  144. } else {
  145. points = result.features[0].geometry.coordinates[0];
  146. clipParam = "";
  147. }
  148. }
  149. }
  150. var vectorClipJobsParameter = new SuperMap.VectorClipJobsParameter({
  151. datasetName: $('#datasetName').val(),
  152. datasetVectorClip: clipParam,
  153. geometryClip: points,
  154. mode: $('#mode option:selected').attr('value')
  155. });
  156. processingService.addVectorClipJob(vectorClipJobsParameter, function (serviceResult) {
  157. if (serviceResult.error) {
  158. widgets.loader.removeLoader();
  159. var errorMsg = serviceResult.error.errorMsg || "code: " + serviceResult.error.code;
  160. widgets.alert.showAlert(resources.msg_createFailed + "<br>" + errorMsg, false);
  161. return;
  162. }
  163. serviceResult.result.setting.serviceInfo.targetServiceInfos.map(function (info) {
  164. if (info.serviceType === 'RESTMAP') {
  165. SuperMap.FetchRequest.get(info.serviceAddress + '/maps').then(function (
  166. response) {
  167. return response.json();
  168. }).then(function (result) {
  169. var mapUrl = result[0].path;
  170. layer = L.supermap.tiledMapLayer(mapUrl, {
  171. noWrap: true,
  172. transparent: true
  173. });
  174. layer.addTo(map);
  175. widgets.loader.removeLoader();
  176. });
  177. }
  178. });
  179. });
  180. }
  181. function handleMapEvent(div, map) {
  182. if (!div || !map) {
  183. return;
  184. }
  185. div.addEventListener('mouseover', function () {
  186. map.dragging.disable();
  187. map.scrollWheelZoom.disable();
  188. map.doubleClickZoom.disable();
  189. });
  190. div.addEventListener('mouseout', function () {
  191. map.dragging.enable();
  192. map.scrollWheelZoom.enable();
  193. map.doubleClickZoom.enable();
  194. });
  195. $("#model").on('shown.bs.modal', function () {
  196. map.dragging.disable();
  197. map.scrollWheelZoom.disable();
  198. map.doubleClickZoom.disable();
  199. });
  200. $("#model").on('hidden.bs.modal', function () {
  201. map.dragging.enable();
  202. map.scrollWheelZoom.enable();
  203. map.doubleClickZoom.enable();
  204. })
  205. }
  206. </script>
  207. </body>
  208. </html>