vectorClipJobService.html 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  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" src="../../dist/ol/include-ol.js"></script>
  10. <style>
  11. .ol-popup {
  12. position: absolute;
  13. top: 10px;
  14. right: 10px;
  15. }
  16. .ol-draw {
  17. position: absolute;
  18. top: 70px;
  19. left: 5px;
  20. display: none;
  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="width: 100%;height:100%"></div>
  26. <div id="popup" class="ol-popup" style='width:350px'>
  27. <div class="panel panel-default">
  28. <div class='panel-heading'>
  29. <h3 class='panel-title' data-i18n="resources.title_vectorClipService"></h3>
  30. </div>
  31. <div class='panel-body'>
  32. <div class='input-group'>
  33. <span class='input-group-addon'><span data-i18n="resources.text_sourceDataset"></span><span
  34. data-i18n="[title]resources.text_requiredField" style="color: red;"> * </span> </span>
  35. <input id='datasetName' type='text' class='form-control' value='samples_processing_newyorkZone_R' /></div>
  36. <p></p>
  37. <div class='input-group'>
  38. <span class='input-group-addon'><span data-i18n="resources.text_queryObjectMode"></span><span
  39. data-i18n="[title]resources.text_requiredField" style="color: red;"> * </span></span>
  40. <select class='form-control' id='clipMode' name='clipMode'>
  41. <option value='DATASET' selected data-i18n="resources.text_dataset"></option>
  42. <option value='GEOJSON'>Geojson</option>
  43. </select>
  44. </div>
  45. <p></p>
  46. <div class='input-group' id='datasetDiv'>
  47. <span class='input-group-addon'><span data-i18n="resources.text_clipObjectDataset"></span><span
  48. data-i18n="[title]resources.text_requiredField" style="color: red;"> * </span></span>
  49. <input id='datasetVectorClip' type='text' class='form-control' value='samples_processing_singleRegion_R' />
  50. </div>
  51. <p></p>
  52. <div class='input-group'>
  53. <span class='input-group-addon'><span data-i18n="resources.text_clipMode"></span><span data-i18n="[title]resources.text_requiredField"
  54. style="color: red;"> * </span></span>
  55. <select class='form-control' id='mode' name='mode'>
  56. <option value='clip' selected data-i18n="resources.text_internalClip"></option>
  57. <option value='intersect' data-i18n="resources.text_externalClip"></option>
  58. </select>
  59. </div>
  60. <p></p>
  61. <div align='right'>
  62. <input type='button' id='btn' class='btn btn-primary' data-i18n="[value]resources.text_clip" />
  63. </div>
  64. </div>
  65. </div>
  66. </div>
  67. <div id="draw" class="ol-draw">
  68. <div class="btn-group" role="group" aria-label="...">
  69. <button id="drawPolygon" value='Polygon' type="button" class="btn btn-default" data-i18n="resources.text_input_value_drawPolygon">
  70. </button>
  71. <br>
  72. <button id="clear" value='Clear' type="button" class="btn btn-default" data-i18n="resources.text_input_value_clear">
  73. </button>
  74. </div>
  75. </div>
  76. <script type="text/javascript" include="bootstrap,jquery,widgets" src="../js/include-web.js"></script>
  77. <script type="text/javascript">
  78. var host = window.isLocal ? window.server : "https://iserver.supermap.io";
  79. var layer, draw,
  80. processingsUrl = host + "/iserver/services/distributedanalyst/rest/v1/jobs",
  81. mapURL = host + "/iserver/services/map-world/rest/maps/World",
  82. map = new ol.Map({
  83. target: 'map',
  84. controls: ol.control.defaults({
  85. attributionOptions: {
  86. collapsed: false
  87. }
  88. })
  89. .extend([new ol.supermap.control.Logo()]),
  90. view: new ol.View({
  91. center: [-73.95, 40.75],
  92. zoom: 12,
  93. projection: 'EPSG:4326',
  94. multiWorld: true
  95. })
  96. });
  97. map.addLayer(new ol.layer.Tile({
  98. source: new ol.source.TileSuperMapRest({
  99. url: mapURL,
  100. }),
  101. }));
  102. var processingService = new ol.supermap.ProcessingService(processingsUrl, {
  103. withCredentials: window.isLocal
  104. });
  105. var source = new ol.source.Vector({
  106. wrapX: false
  107. });
  108. var vector = new ol.layer.Vector({
  109. source: source
  110. });
  111. map.addLayer(vector);
  112. var info = new ol.control.Control({
  113. element: document.getElementById('draw')
  114. });
  115. info.setMap(map);
  116. map.addControl(info);
  117. $("#clipMode").change(function () {
  118. var clipMode = $(this).val();
  119. if (clipMode === "DATASET") {
  120. $('#draw').hide();
  121. $('#datasetDiv').show();
  122. }
  123. if (clipMode === "GEOJSON") {
  124. $('#draw').show();
  125. $('#datasetDiv').hide();
  126. }
  127. });
  128. var buttons = $('.btn-group').children();
  129. buttons.map(function (key) {
  130. var value = buttons[key].value;
  131. if (value === 'Clear') {
  132. $(buttons[key]).on('click', function () {
  133. clearInteraction();
  134. source.clear();
  135. draw = undefined;
  136. });
  137. return;
  138. }
  139. $(buttons[key]).on('click', function () {
  140. clearInteraction();
  141. source.clear();
  142. draw = new ol.interaction.Draw({
  143. source: source,
  144. type: buttons[key].value,
  145. snapTolerance: 20
  146. });
  147. draw.on('drawend', function () {
  148. map.removeInteraction(draw);
  149. });
  150. map.addInteraction(draw);
  151. });
  152. });
  153. function clearInteraction() {
  154. if (draw) {
  155. map.removeInteraction(draw);
  156. }
  157. }
  158. initForm();
  159. bindClick();
  160. SuperMap.SecurityManager.registerToken(processingsUrl, window.exampleToken);
  161. function initForm() {
  162. var info = new ol.control.Control({
  163. element: popup
  164. });
  165. info.setMap(map);
  166. map.addControl(info);
  167. }
  168. function bindClick() {
  169. $('#btn').on('click', function () {
  170. if ($('#msg_container')[0]) {
  171. $('#msg_container').remove();
  172. }
  173. widgets.loader.showLoader();
  174. if (map && layer) {
  175. map.removeLayer(layer);
  176. }
  177. addVectorClipJobs();
  178. });
  179. }
  180. function addVectorClipJobs() {
  181. var points, clipParam;
  182. if ($('#clipMode').val() === "DATASET") {
  183. clipParam = $('#datasetVectorClip').val();
  184. points = [];
  185. }
  186. if ($('#clipMode').val() === "GEOJSON") {
  187. if (!draw) {
  188. widgets.loader.removeLoader();
  189. widgets.alert.showAlert(resources.msg_createFailed + "<br>" + resources.msg_drawClipBounds, false);
  190. return;
  191. } else {
  192. points = draw.a[0];
  193. clipParam = "";
  194. }
  195. }
  196. var vectorClipJobsParameter = new SuperMap.VectorClipJobsParameter({
  197. datasetName: $('#datasetName').val(),
  198. datasetVectorClip: clipParam,
  199. geometryClip: points,
  200. mode: $('#mode option:selected').attr('value')
  201. });
  202. processingService.addVectorClipJob(vectorClipJobsParameter, function (serviceResult) {
  203. if (serviceResult.error) {
  204. widgets.loader.removeLoader();
  205. var errorMsg = serviceResult.error.errorMsg || "code: " + serviceResult.error.code;
  206. widgets.alert.showAlert(resources.msg_createFailed + "<br>" + errorMsg, false);
  207. return;
  208. }
  209. serviceResult.result.setting.serviceInfo.targetServiceInfos.map(function (info) {
  210. if (info.serviceType === 'RESTMAP') {
  211. SuperMap.FetchRequest.get(info.serviceAddress + '/maps').then(function (
  212. response) {
  213. return response.json();
  214. }).then(function (result) {
  215. var mapUrl = result[0].path;
  216. new ol.supermap.MapService(mapUrl).getMapInfo(function (mapInfo) {
  217. layer = new ol.layer.Tile({
  218. source: new ol.source.ImageSuperMapRest(ol.source
  219. .ImageSuperMapRest.optionsFromMapJSON(
  220. mapUrl, mapInfo.result))
  221. });
  222. map.addLayer(layer);
  223. widgets.loader.removeLoader();
  224. });
  225. });
  226. }
  227. });
  228. });
  229. }
  230. </script>
  231. </body>
  232. </html>