vectorClipJobService.html 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. <!--********************************************************************
  2. * Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
  3. *********************************************************************-->
  4. <!DOCTYPE html>
  5. <html lang="en">
  6. <head>
  7. <meta charset="UTF-8">
  8. <title data-i18n="resources.title_vectorClipService"></title>
  9. <script type="text/javascript" include="bootstrap,jquery,widgets" src="../js/include-web.js"></script>
  10. <style>
  11. .mb-popup {
  12. position: absolute;
  13. top: 10px;
  14. right: 10px;
  15. }
  16. </style>
  17. </head>
  18. <body style=" margin: 0;overflow: hidden;background: #fff;width: 100%;height:100%;position: absolute;top: 0;">
  19. <div id="map" style="width: 100%;height:100%"></div>
  20. <div id="popup" class="mb-popup" style='width:350px'>
  21. <div class="panel panel-default">
  22. <div class='panel-heading'>
  23. <h3 class='panel-title' data-i18n="resources.title_vectorClipService"></h3>
  24. </div>
  25. <div class='panel-body'>
  26. <div class='input-group'>
  27. <span class='input-group-addon'><span data-i18n="resources.text_sourceDataset"></span><span
  28. data-i18n="[title]resources.text_requiredField" style="color: red;"> * </span> </span>
  29. <input id='datasetName' type='text' class='form-control' value='samples_processing_newyorkZone_R' /></div>
  30. <p></p>
  31. <div class='input-group'>
  32. <span class='input-group-addon'><span data-i18n="resources.text_queryObjectMode"></span><span
  33. data-i18n="[title]resources.text_requiredField" style="color: red;"> * </span></span>
  34. <select class='form-control' id='clipMode' name='clipMode'>
  35. <option value='DATASET' selected data-i18n="resources.text_dataset"></option>
  36. <option value='GEOJSON'>Geojson</option>
  37. </select>
  38. </div>
  39. <p></p>
  40. <div class='input-group' id='datasetDiv'>
  41. <span class='input-group-addon'><span data-i18n="resources.text_clipObjectDataset"></span><span
  42. data-i18n="[title]resources.text_requiredField" style="color: red;"> * </span></span>
  43. <input id='datasetVectorClip' type='text' class='form-control' value='samples_processing_singleRegion_R' />
  44. </div>
  45. <p></p>
  46. <div class='input-group'>
  47. <span class='input-group-addon'><span data-i18n="resources.text_clipMode"></span><span data-i18n="[title]resources.text_requiredField"
  48. style="color: red;"> * </span></span>
  49. <select class='form-control' id='mode' name='mode'>
  50. <option value='clip' selected data-i18n="resources.text_internalClip"></option>
  51. <option value='intersect' data-i18n="resources.text_externalClip"></option>
  52. </select>
  53. </div>
  54. <p></p>
  55. <div align='right'>
  56. <input type='button' id='btn' class='btn btn-primary' data-i18n="[value]resources.text_clip" />
  57. </div>
  58. </div>
  59. </div>
  60. </div>
  61. <script type="text/javascript" include="draw" src="../../dist/mapboxgl/include-mapboxgl.js"></script>
  62. <script>
  63. var map,
  64. baseUrl = (window.isLocal ? window.server : "https://iserver.supermap.io") +
  65. "/iserver/services/map-world/rest/maps/World",
  66. mapUrl = baseUrl + "/zxyTileImage.png?z={z}&x={x}&y={y}",
  67. processingsUrl = (window.isLocal ? window.server : "https://iserver.supermap.io") +
  68. "/iserver/services/distributedanalyst/rest/v1/jobs";
  69. var attribution = "<a href='https://www.mapbox.com/about/maps/' target='_blank'>© Mapbox </a>" +
  70. " with <span>© <a href='https://iclient.supermap.io' target='_blank'>SuperMap iClient</a> | </span>" +
  71. " Map Data <span>© <a href='http://support.supermap.com.cn/product/iServer.aspx' target='_blank'>SuperMap iServer</a></span> ";
  72. map = new mapboxgl.Map({
  73. container: 'map',
  74. style: {
  75. "version": 8,
  76. "sources": {
  77. "raster-tiles": {
  78. "attribution": attribution,
  79. "type": "raster",
  80. "tiles": [mapUrl],
  81. "tileSize": 256
  82. }
  83. },
  84. "layers": [{
  85. "id": "simple-tiles",
  86. "type": "raster",
  87. "source": "raster-tiles",
  88. }]
  89. },
  90. center: [-73.95, 40.75],
  91. zoom: 11
  92. });
  93. map.addControl(new mapboxgl.NavigationControl(), 'top-left');
  94. map.addControl(new mapboxgl.supermap.LogoControl(), 'bottom-right');
  95. var draw = new MapboxDraw({
  96. displayControlsDefault: false,
  97. controls: {
  98. polygon: true,
  99. trash: true
  100. }
  101. });
  102. $("#clipMode").change(function () {
  103. var clipMode = $(this).val();
  104. if (clipMode === "DATASET") {
  105. map.removeControl(draw, "top-left");
  106. $('#datasetDiv').show();
  107. }
  108. if (clipMode === "GEOJSON") {
  109. map.addControl(draw, "top-left");
  110. $('#datasetDiv').hide();
  111. }
  112. });
  113. SuperMap.SecurityManager.registerToken(processingsUrl, window.exampleToken);
  114. var processingService = new mapboxgl.supermap.ProcessingService(processingsUrl, {
  115. withCredentials: window.isLocal
  116. });
  117. bindClick();
  118. function bindClick() {
  119. $('#btn').on('click', function () {
  120. if ($('#msg_container')[0]) {
  121. $('#msg_container').remove();
  122. }
  123. widgets.loader.showLoader();
  124. if (map.getLayer("vectorClipLayer")) {
  125. map.removeLayer("vectorClipLayer");
  126. map.removeSource("vectorClipSource");
  127. }
  128. addVectorClipJobs();
  129. });
  130. }
  131. function getFeatureGeo() {
  132. var result = draw.getAll();
  133. if (result.features.length > 1) {
  134. for (var i = 0; i < result.features.length - 1; i++) {
  135. draw.delete(result.features[i].id);
  136. }
  137. }
  138. }
  139. map.on('draw.create', getFeatureGeo);
  140. function addVectorClipJobs() {
  141. var clipParam, points;
  142. if ($('#clipMode').val() === "DATASET") {
  143. clipParam = $('#datasetVectorClip').val();
  144. points = [];
  145. }
  146. if ($('#clipMode').val() === "GEOJSON") {
  147. var result = draw.getAll();
  148. if (result.features.length < 1) {
  149. widgets.loader.removeLoader();
  150. widgets.alert.showAlert(resources.msg_createFailed + "<br>" + resources.msg_drawClipBounds, false);
  151. return;
  152. } else {
  153. points = result.features[0].geometry.coordinates[0];
  154. clipParam = "";
  155. }
  156. }
  157. var vectorClipJobsParameter = new SuperMap.VectorClipJobsParameter({
  158. datasetName: $('#datasetName').val(),
  159. datasetVectorClip: clipParam,
  160. geometryClip: points,
  161. mode: $('#mode option:selected').attr('value')
  162. });
  163. processingService.addVectorClipJob(vectorClipJobsParameter, function (serviceResult) {
  164. if (serviceResult.error) {
  165. widgets.loader.removeLoader();
  166. var errorMsg = serviceResult.error.errorMsg || "code: " + serviceResult.error.code;
  167. widgets.alert.showAlert(resources.msg_createFailed + "<br>" + errorMsg, false);
  168. return;
  169. }
  170. serviceResult.result.setting.serviceInfo.targetServiceInfos.map(function (info) {
  171. if (info.serviceType === 'RESTMAP') {
  172. SuperMap.FetchRequest.get(info.serviceAddress + '/maps').then(function (
  173. response) {
  174. return response.json();
  175. }).then(function (result) {
  176. var mapUrl = result[0].path +
  177. "/zxyTileImage.png?z={z}&x={x}&y={y}&width=256&height=256&transparent=true";
  178. map.addSource("vectorClipSource", {
  179. "type": "raster",
  180. "tiles": [mapUrl],
  181. "tileSize": 256
  182. });
  183. map.addLayer({
  184. "id": "vectorClipLayer",
  185. "type": "raster",
  186. "source": "vectorClipSource",
  187. "minzoom": 0,
  188. "maxzoom": 22
  189. });
  190. widgets.loader.removeLoader();
  191. });
  192. }
  193. });
  194. });
  195. }
  196. </script>
  197. </body>
  198. </html>