singleObjectQueryJobService.html 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  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_singleObjectQueryJobService"></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. polyline: false,
  43. circlemarker: false,
  44. remove: true
  45. },
  46. edit: {
  47. featureGroup: drawLayer,
  48. remove: true
  49. }
  50. };
  51. var drawControl = new L.Control.Draw(options);
  52. handleMapEvent(drawControl._container, map);
  53. map.on(L.Draw.Event.CREATED, function (e) {
  54. drawLayer.addLayer(e.layer);
  55. });
  56. initForm();
  57. bindClick();
  58. function initForm() {
  59. info = L.control({
  60. position: 'topright'
  61. });
  62. info.onAdd = function () {
  63. var popup = L.DomUtil.create('div');
  64. popup.style.width = '350px';
  65. popup.innerHTML = "<div class='panel panel-default'>" +
  66. "<div class='panel-heading'>" +
  67. "<h3 class='panel-title'>" + resources.title_singleObjectQueryJobService + "</h3>" +
  68. "</div>" +
  69. "<div class='panel-body'>" +
  70. "<div class='input-group'>" +
  71. "<span class='input-group-addon'>" + resources.text_sourceDataset + "<span title='" + resources
  72. .text_requiredField + "' style='color: red;'> * </span> </span>" +
  73. "<input id='datasetName' type='text' class='form-control' " +
  74. "value='samples_processing_newyorkZone_R'/>" +
  75. "</div><p></p>" +
  76. "<div class='input-group'>" +
  77. "<span class='input-group-addon'>" + resources.text_queryObjectMode + "<span title='" +
  78. resources.text_requiredField + "' style='color: red;'> * </span></span>" +
  79. "<select class='form-control' id='queryMode' name='queryMode'>" +
  80. "<option value='DATASET' selected>" + resources.text_dataset + "</option>" +
  81. "<option value='GEOJSON'>Geojson</option>" +
  82. "</select>" +
  83. "</div><p></p>" +
  84. "<div class='input-group' id='datasetDiv'>" +
  85. "<span class='input-group-addon'>" + resources.text_queryObjectDataset + "<span title='" +
  86. resources.text_requiredField + "' style='color: red;'> * </span></span>" +
  87. "<input id='datasetQuery' type='text' class='form-control' " +
  88. "value='samples_processing_singleRegion_R'/>" +
  89. "</div><p></p>" +
  90. "<div class='input-group'>" +
  91. "<span class='input-group-addon'>" + resources.text_boundsQueryMode + "<span title='" +
  92. resources.text_requiredField + "' style='color: red;'> * </span></span>" +
  93. "<select class='form-control' id='mode' name='mode'>" +
  94. "<option value='CONTAIN'>" + resources.text_contain + "</option>" +
  95. "<option value='CROSS'>" + resources.text_cross + "</option>" +
  96. "<option value='DISJOINT'>" + resources.text_disjoint + "</option>" +
  97. "<option value='IDENTITY'>" + resources.text_Identity + "</option>" +
  98. "<option value='INTERSECT' selected>" + resources.text_intersect + "</option>" +
  99. "<option value='OVERLAP'>" + resources.text_overlap + "</option>" +
  100. "<option value='TOUCH'>" + resources.text_touch + "</option>" +
  101. "<option value='WITHIN'>" + resources.text_within + "</option>" +
  102. "</select>" +
  103. "</div><p></p>" +
  104. "<div align='right'>" +
  105. "<input type='button' id='btn' class='btn btn-primary' value='" + resources.btn_query + "'/>" +
  106. "</div></div></div>";
  107. handleMapEvent(popup, this._map);
  108. return popup;
  109. };
  110. info.addTo(map);
  111. $("#queryMode").change(function () {
  112. var queryMode = $(this).val();
  113. if (queryMode === "DATASET") {
  114. map.removeControl(drawControl);
  115. $('#datasetDiv').show();
  116. }
  117. if (queryMode === "GEOJSON") {
  118. map.addControl(drawControl);
  119. $('#datasetDiv').hide();
  120. }
  121. });
  122. }
  123. function bindClick() {
  124. $('#btn').on('click', function () {
  125. widgets.alert.clearAlert();
  126. widgets.loader.showLoader();
  127. if (map && layer) {
  128. map.removeLayer(layer);
  129. }
  130. queryJobs();
  131. });
  132. }
  133. function queryJobs() {
  134. var points, queryParam;
  135. if ($("#queryMode").val() === "DATASET") {
  136. queryParam = $('#datasetQuery').val();
  137. points = [];
  138. }
  139. if ($("#queryMode").val() === "GEOJSON") {
  140. var result = drawLayer.toGeoJSON();
  141. if (result.features.length > 1) {
  142. widgets.loader.removeLoader();
  143. widgets.alert.showAlert(resources.msg_createFailed + "<br>" + resources.msg_singleSideQuery, false);
  144. return;
  145. } else {
  146. if (result.features.length < 1) {
  147. widgets.loader.removeLoader();
  148. widgets.alert.showAlert(resources.msg_createFailed + "<br>" + resources.msg_drawQueryBounds,
  149. false);
  150. return;
  151. } else {
  152. points = result.features[0].geometry.coordinates[0];
  153. queryParam = "";
  154. }
  155. }
  156. }
  157. var singleObjectQueryJobsParameter = new SuperMap.SingleObjectQueryJobsParameter({
  158. datasetName: $('#datasetName').val(),
  159. datasetQuery: queryParam,
  160. geometryQuery: points,
  161. mode: $('#mode option:selected').attr('value')
  162. });
  163. processingService.addQueryJob(singleObjectQueryJobsParameter, 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. layer = L.supermap.tiledMapLayer(mapUrl, {
  178. noWrap: true,
  179. transparent: true
  180. });
  181. layer.addTo(map);
  182. widgets.loader.removeLoader();
  183. });
  184. }
  185. });
  186. });
  187. }
  188. function handleMapEvent(div, map) {
  189. if (!div || !map) {
  190. return;
  191. }
  192. div.addEventListener('mouseover', function () {
  193. map.dragging.disable();
  194. map.scrollWheelZoom.disable();
  195. map.doubleClickZoom.disable();
  196. });
  197. div.addEventListener('mouseout', function () {
  198. map.dragging.enable();
  199. map.scrollWheelZoom.enable();
  200. map.doubleClickZoom.enable();
  201. });
  202. $("#model").on('shown.bs.modal', function () {
  203. map.dragging.disable();
  204. map.scrollWheelZoom.disable();
  205. map.doubleClickZoom.disable();
  206. });
  207. $("#model").on('hidden.bs.modal', function () {
  208. map.dragging.enable();
  209. map.scrollWheelZoom.enable();
  210. map.doubleClickZoom.enable();
  211. })
  212. }
  213. </script>
  214. </body>
  215. </html>