turf_interpolationAnalysis.html 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  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_turfInterpolationAnalysis"></title>
  9. <script type="text/javascript" include="bootstrap,widgets.alert" src="../js/include-web.js"></script>
  10. <script type="text/javascript" include="turf,leaflet.draw" src="../../dist/leaflet/include-leaflet.js"></script>
  11. </head>
  12. <body style=" margin: 0;overflow: hidden;background: #fff;width: 100%;height:100%;position: absolute;top: 0;">
  13. <div id="map" style="margin:0 auto;width: 100%;height: 100%"></div>
  14. <script>
  15. var host = window.isLocal ? window.server : "https://iserver.supermap.io",
  16. tinDataUrl = host + "/iserver/services/map-jingjin/rest/maps/京津地区地图",
  17. mapUrl = host + "/iserver/services/map-china400/rest/maps/ChinaDark",
  18. turfLayer, tinQueryResultLayer,
  19. map = L.map('map', {
  20. crs: L.CRS.EPSG4326,
  21. preferCanvas: true,
  22. center: [36, 106],
  23. maxZoom: 18,
  24. mixZoom: 2,
  25. zoom: 4
  26. });
  27. L.supermap.tiledMapLayer(mapUrl, {
  28. noWrap: true,
  29. prjCoordSys: {"epsgCode": "4326"},
  30. minZoom: 3
  31. }).addTo(map);
  32. //创建dom
  33. initEditView();
  34. function initEditView() {
  35. var infoView = L.control({position: 'topright'});
  36. infoView.onAdd = function () {
  37. var me = this;
  38. me._div = L.DomUtil.create('div');
  39. me._div.style.width = '420px';
  40. me._div.innerHTML = "<div class='panel panel-primary editPane' id='editPane'>" +
  41. "<div class='panel-heading'>" +
  42. "<h5 class='panel-title text-center'>" + resources.text_interpolationAnalysis + "</h5></div>" +
  43. "<div class='panel-body content' id='interpolationBody'>" +
  44. "<div class='panel'>" +
  45. "<div class='input-group'>" +
  46. "<span class='input-group-addon'>" + resources.text_interpolationAnalysisType + "<span title=" + resources.text_requiredField + " style='color: red;'> * </span></span>" +
  47. "<select class='form-control' id='interpolationAnalyzeType' name='interpolationAnalyzeType'>" +
  48. " <option value='tinOption' selected>tin</option>" +
  49. "</select>" +
  50. "</div>" +
  51. "</div>" +
  52. "<div class='input-group' id='tinBody'>" +
  53. "<input type='button' class='btn btn-primary' id='createTinBtn' value=" + resources.btn_createTin + ">&nbsp;" +
  54. "<input type='button' class='btn btn-primary' id='clearTinBtn' value=" + resources.btn_clearTin + ">&nbsp;" +
  55. "</div>" +
  56. "</div>";
  57. handleMapEvent(me._div, me._map);
  58. return me._div;
  59. };
  60. infoView.addTo(map);
  61. }
  62. //绑定dom事件
  63. bindEvent();
  64. function bindEvent() {
  65. $("#createTinBtn").click(function () {
  66. //是否有需要删除的提示框
  67. widgets.alert.clearAlert();
  68. if (interpolationAnalyst.sourcePoints) {
  69. interpolationAnalyst.creatTin();
  70. } else {
  71. widgets.alert.showAlert(resources.text_loadingData, true);
  72. return;
  73. }
  74. });
  75. $("#clearTinBtn").click(function () {
  76. //是否有需要删除的提示框
  77. widgets.alert.clearAlert();
  78. clearLayer();
  79. });
  80. }
  81. //创建插值分析对象
  82. var interpolationAnalyst = {
  83. sourcePoints: [],
  84. turfLayerOptions: null,
  85. loadAnalystLayer: function () {
  86. var center = L.latLng(39.8, 116.8);
  87. map.flyTo(center, 8);
  88. //初始化turfLayer
  89. interpolationAnalyst.turfLayerOptions = {
  90. style: function (feature) {
  91. return {
  92. color: '#33CCFF',
  93. weight: 0.8,
  94. opacity: 0.5,
  95. fillColor: '#' + feature.properties.a + feature.properties.b + feature.properties.c,
  96. fillOpacity: 0.5
  97. }
  98. }
  99. };
  100. turfLayer = L.supermap.turfLayer(interpolationAnalyst.turfLayerOptions).addTo(map);
  101. var param = new SuperMap.QueryBySQLParameters({
  102. queryParams: {
  103. name: "Town_P@Jingjin.2",
  104. }
  105. });
  106. if (!tinQueryResultLayer) {
  107. L.supermap
  108. .queryService(tinDataUrl)
  109. .queryBySQL(param, function (serviceResult) {
  110. interpolationAnalyst.sourcePoints = serviceResult.result.recordsets[0].features;
  111. tinQueryResultLayer = L.geoJSON(interpolationAnalyst.sourcePoints, {
  112. pointToLayer: function (feature, latlng) {
  113. feature.properties.z = ~~(Math.random() * 9);
  114. return L.circleMarker(latlng, {
  115. opacity: 0,
  116. fillColor: 'red',
  117. radius: 6
  118. });
  119. }
  120. }).addTo(map);
  121. //map.remove()时,canvas渲染的场景下render会先移除canvas的ctx,而path的移除会有重绘操作。
  122. //从而引起刷新延迟会报错,故在此移除重绘
  123. tinQueryResultLayer.on('remove', tinQueryResultLayerRemoveListener);
  124. });
  125. } else {
  126. tinQueryResultLayer.addTo(map);
  127. }
  128. },
  129. creatTin: function () {
  130. if (turfLayer.getLayers().length > 0) {
  131. widgets.alert.showAlert(resources.msg_layerCreated, false);
  132. return;
  133. }
  134. turfLayer.process("Interpolation.tin", {
  135. "points": interpolationAnalyst.sourcePoints,
  136. "z": 'z'
  137. });
  138. }
  139. };
  140. var requestAnimId;
  141. function tinQueryResultLayerRemoveListener() {
  142. requestAnimId = map.getRenderer(tinQueryResultLayer)._redrawRequest;
  143. (requestAnimId != null) && L.Util.cancelAnimFrame(requestAnimId);
  144. }
  145. interpolationAnalyst.loadAnalystLayer();
  146. function clearLayer() {
  147. if (turfLayer) {
  148. turfLayer.clearLayers();
  149. }
  150. }
  151. //避免画图事件与地图事件冲突
  152. function handleMapEvent(div, map) {
  153. if (!div || !map) {
  154. return;
  155. }
  156. div.addEventListener('mouseover', function () {
  157. map.dragging.disable();
  158. map.scrollWheelZoom.disable();
  159. map.doubleClickZoom.disable();
  160. });
  161. div.addEventListener('mouseout', function () {
  162. map.dragging.enable();
  163. map.scrollWheelZoom.enable();
  164. map.doubleClickZoom.enable();
  165. });
  166. }
  167. </script>
  168. </body>
  169. </html>