vectorClipJobService.html 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  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. <style>
  11. .control {
  12. position: absolute;
  13. top: 50px;
  14. right: 10px;
  15. }
  16. .control-draw {
  17. position: absolute;
  18. top: 80px;
  19. left: 5px;
  20. display: none;
  21. }
  22. #map {
  23. position: absolute;
  24. }
  25. </style>
  26. </head>
  27. <body style=" margin: 0;overflow: hidden;background: #fff;width: 100%;height:100%;position: absolute;top: 0;">
  28. <div id="map" style="width: 100%;height:100%"></div>
  29. <div id="control" class="control" style='width:350px'>
  30. <div class="panel panel-default">
  31. <div class='panel-heading'>
  32. <h3 class='panel-title' data-i18n="resources.title_vectorClipService"></h3>
  33. </div>
  34. <div class='panel-body'>
  35. <div class='input-group'>
  36. <span class='input-group-addon'><span data-i18n="resources.text_sourceDataset"></span><span
  37. data-i18n="[title]resources.text_requiredField" style="color: red;"> * </span> </span>
  38. <input id='datasetName' type='text' class='form-control' value='samples_processing_newyorkZone_R' /></div>
  39. <p></p>
  40. <div class='input-group'>
  41. <span class='input-group-addon'><span data-i18n="resources.text_queryObjectMode"></span><span
  42. data-i18n="[title]resources.text_requiredField" style="color: red;"> * </span></span>
  43. <select class='form-control' id='clipMode' name='clipMode'>
  44. <option value='DATASET' selected data-i18n="resources.text_dataset"></option>
  45. <option value='GEOJSON'>Geojson</option>
  46. </select>
  47. </div>
  48. <p></p>
  49. <div class='input-group' id='datasetDiv'>
  50. <span class='input-group-addon'><span data-i18n="resources.text_clipObjectDataset"></span><span
  51. data-i18n="[title]resources.text_requiredField" style="color: red;"> * </span></span>
  52. <input id='datasetVectorClip' type='text' class='form-control' value='samples_processing_singleRegion_R' />
  53. </div>
  54. <p></p>
  55. <div class='input-group'>
  56. <span class='input-group-addon'><span data-i18n="resources.text_boundsQueryMode"></span><span
  57. data-i18n="[title]resources.text_requiredField" style="color: red;"> * </span></span>
  58. <select class='form-control' id='mode' name='mode'>
  59. <option value='clip' selected data-i18n="resources.text_internalClip"></option>
  60. <option value='intersect' data-i18n="resources.text_externalClip"></option>
  61. </select>
  62. </div>
  63. <p></p>
  64. <div align='right'>
  65. <input type='button' id='btn' class='btn btn-primary' data-i18n="[value]resources.text_clip" />
  66. </div>
  67. </div>
  68. </div>
  69. </div>
  70. <div id="draw" class="control-draw">
  71. <div class="btn-group" role="group" aria-label="...">
  72. <button id="drawPolygon" value='Polygon' type="button" class="btn btn-default" data-i18n="resources.text_input_value_drawPolygon">
  73. </button>
  74. <br>
  75. <button id="clear" value='Clear' type="button" class="btn btn-default" data-i18n="resources.text_input_value_clear">
  76. </button>
  77. </div>
  78. </div>
  79. <script type="text/javascript" src="../../dist/classic/include-classic.js"></script>
  80. <script type="text/javascript">
  81. var host = window.isLocal ? window.server : "https://iserver.supermap.io";
  82. var style = {
  83. strokeColor: "#304DBE",
  84. strokeWidth: 2,
  85. pointerEvents: "visiblePainted",
  86. fillColor: "#304DBE",
  87. fillOpacity: 0.8
  88. };
  89. var layer, resultLayer, drawPolygon, polygonLayer, points = [],
  90. processingsUrl = host + "/iserver/services/distributedanalyst/rest/v1/jobs",
  91. mapURL = host + "/iserver/services/map-world/rest/maps/World",
  92. polygonLayer = new SuperMap.Layer.Vector("polygonLayer");
  93. polygonLayer.style = style;
  94. drawPolygon = new SuperMap.Control.DrawFeature(polygonLayer, SuperMap.Handler.Polygon);
  95. drawPolygon.events.on({
  96. "featureadded": drawCompleted
  97. });
  98. map = new SuperMap.Map("map", {
  99. controls: [
  100. new SuperMap.Control.Navigation(),
  101. new SuperMap.Control.Zoom(),
  102. new SuperMap.Control.LayerSwitcher(),
  103. drawPolygon
  104. ],
  105. allOverlays: true
  106. });
  107. map.addControl(new SuperMap.Control.MousePosition());
  108. var layer = new SuperMap.Layer.TiledDynamicRESTLayer("World", mapURL, null, {
  109. maxResolution: "auto"
  110. });
  111. layer.events.on({
  112. "layerInitialized": addLayer
  113. });
  114. $("#clipMode").change(function () {
  115. var clipMode = $(this).val();
  116. if (clipMode === "DATASET") {
  117. $('#draw').hide();
  118. $('#datasetDiv').show();
  119. }
  120. if (clipMode === "GEOJSON") {
  121. $('#draw').show();
  122. $('#datasetDiv').hide();
  123. }
  124. });
  125. function addLayer() {
  126. map.addLayers([layer, polygonLayer]);
  127. map.setCenter(new SuperMap.LonLat(-73.95, 40.75), 12);
  128. }
  129. var processingService = new SuperMap.REST.ProcessingService(processingsUrl, {
  130. withCredentials: window.isLocal
  131. });
  132. SuperMap.SecurityManager.registerToken(processingsUrl, window.exampleToken);
  133. bindClick();
  134. function bindClick() {
  135. $('#btn').on('click', function () {
  136. if ($('#msg_container')[0]) {
  137. $('#msg_container').remove();
  138. }
  139. widgets.loader.showLoader();
  140. if (map && resultLayer) {
  141. map.removeLayer(resultLayer);
  142. }
  143. addVectorClipJobs();
  144. });
  145. $('#drawPolygon').on('click', function () {
  146. drawPolygon.activate();
  147. polygonLayer.removeAllFeatures();
  148. });
  149. $('#clear').on('click', function () {
  150. polygonLayer.removeAllFeatures();
  151. points = [];
  152. });
  153. }
  154. function drawCompleted(drawGeometryArgs) {
  155. drawPolygon.deactivate();
  156. points = drawGeometryArgs.feature.geometry.components[0].components;
  157. }
  158. function addVectorClipJobs() {
  159. var clipParam;
  160. if ($('#clipMode').val() === "DATASET") {
  161. clipParam = $('#datasetVectorClip').val();
  162. }
  163. if ($('#clipMode').val() === "GEOJSON") {
  164. if (points.length < 1) {
  165. widgets.loader.removeLoader();
  166. widgets.alert.showAlert(resources.msg_createFailed + "<br>" + resources.msg_drawClipBounds, false);
  167. return;
  168. } else {
  169. clipParam = "";
  170. }
  171. }
  172. var vectorClipJobsParameter = new SuperMap.VectorClipJobsParameter({
  173. datasetName: $('#datasetName').val(),
  174. datasetVectorClip: clipParam,
  175. geometryClip: points,
  176. mode: $('#mode option:selected').attr('value')
  177. });
  178. processingService.addVectorClipJob(vectorClipJobsParameter, function (serviceResult) {
  179. if (serviceResult.error) {
  180. widgets.loader.removeLoader();
  181. var errorMsg = serviceResult.error.errorMsg || "code: " + serviceResult.error.code;
  182. widgets.alert.showAlert(resources.msg_createFailed + "<br>" + errorMsg, false);
  183. return;
  184. }
  185. serviceResult.result.setting.serviceInfo.targetServiceInfos.map(function (info) {
  186. if (info.serviceType === 'RESTMAP') {
  187. SuperMap.FetchRequest.get(info.serviceAddress + '/maps').then(function (
  188. response) {
  189. return response.json();
  190. }).then(function (result) {
  191. var mapUrl = result[0].path;
  192. resultLayer = new SuperMap.Layer.TiledDynamicRESTLayer(
  193. "resultLayer", mapUrl, {
  194. transparent: true
  195. });
  196. resultLayer.events.on({
  197. "layerInitialized": addLayer
  198. });
  199. function addLayer() {
  200. map.addLayer(resultLayer);
  201. widgets.loader.removeLoader();
  202. }
  203. });
  204. }
  205. });
  206. });
  207. }
  208. </script>
  209. </body>
  210. </html>