d3RangeThemeLayer.html 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  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_rangeThemeLayer"></title>
  9. <script type="text/javascript" include="jquery,bootstrap" src="../js/include-web.js"></script>
  10. <script type="text/javascript" include="d3,d3Layer" src="../../dist/leaflet/include-leaflet.js"></script>
  11. <style type="text/css">
  12. .legendItemHeader,
  13. .legendItemValue {
  14. width: 120px;
  15. height: 18px;
  16. font-size: 14px;
  17. }
  18. </style>
  19. </head>
  20. <body style=" margin: 0;overflow: hidden;background: #fff;width: 100%;height:100%;position: absolute;top: 0;">
  21. <div id="map" style="margin:0 auto;width: 100%;height: 100%"></div>
  22. <script type="text/javascript">
  23. var host = window.isLocal ? window.server : "https://iserver.supermap.io";
  24. var map, resultLayer,
  25. baseUrl = host + "/iserver/services/map-jingjin/rest/maps/京津地区地图",
  26. url = host + "/iserver/services/data-jingjin/rest/data";
  27. map = L.map('map', {
  28. preferCanvas: true,
  29. crs: L.CRS.EPSG4326,
  30. center: [39.79, 116.85],
  31. maxZoom: 18,
  32. zoom: 7
  33. });
  34. L.supermap.tiledMapLayer(baseUrl).addTo(map);
  35. query();
  36. var rangeStyles = [{
  37. start: 0,
  38. end: 0.02,
  39. color: 'rgb(253,226,202)'
  40. }, {
  41. start: 0.02,
  42. end: 0.04,
  43. color: 'rgb(250,206,156)'
  44. }, {
  45. start: 0.04,
  46. end: 0.06,
  47. color: 'rgb(240,156,66)'
  48. }, {
  49. start: 0.06,
  50. end: 0.1,
  51. color: 'rgb(208,119,11)'
  52. }, {
  53. start: 0.1,
  54. end: 0.2,
  55. color: 'rgb(148,83,5)'
  56. }];
  57. function query() {
  58. var sqlParam = new SuperMap.GetFeaturesBySQLParameters({
  59. queryParameter: {
  60. name: "Jingjin",
  61. attributeFilter: "SMID >= -1"
  62. },
  63. datasetNames: ["Jingjin:BaseMap_R"],
  64. fromIndex: 0,
  65. toIndex: 200
  66. });
  67. L.supermap.featureService(url).getFeaturesBySQL(sqlParam, function (serviceResult) {
  68. var d3Layer = L.supermap.d3Layer(function (sel, proj) {
  69. var upd = sel.selectAll('path').data(serviceResult.result.features.features);
  70. upd.enter()
  71. .append('path')
  72. .attr('d', proj.pathFromGeojson)
  73. .attr('fill', function (feature) {
  74. var pop = parseFloat(feature.properties.POP_DENSITY99);
  75. for (var i = 0; i < rangeStyles.length; i++) {
  76. var rangeStyle = rangeStyles[i];
  77. if (pop >= rangeStyle['start'] && pop <= rangeStyle['end']) {
  78. return rangeStyle['color'];
  79. }
  80. }
  81. })
  82. .attr('fill-opacity', '0.8')
  83. });
  84. d3Layer.addTo(map);
  85. initLegendView();
  86. });
  87. }
  88. //图例控件
  89. function initLegendView() {
  90. var legendView = L.control({position: 'bottomright'});
  91. legendView.onAdd = function () {
  92. this._div = L.DomUtil.create('div', 'panel panel-primary legend ');
  93. var title = "<div class='panel-heading'><h5 class='panel-title text-center'>" + resources.text_legend + "</h5></div>";
  94. $(title + "<div class='panel-body text-center' ><table>" +
  95. "<tr><td class='legendItemHeader'>" + resources.text_populationDensity + "</td><td class='legendItemValue'>" + resources.text_color + "</td></tr>" +
  96. "<tr> <td class='legendItemHeader'>0 - 0.02</td> <td class='legendItemValue' style='background: #FDE2CA'></td></tr>" +
  97. "<tr> <td class='legendItemHeader'>0.02 - 0.04</td> <td class='legendItemValue' style='background: #FACE9C'></td> </tr>" +
  98. "<tr> <td class='legendItemHeader'>0.04 - 0.06</td> <td class='legendItemValue' style='background: #F09C42'></td> </tr>" +
  99. "<tr> <td class='legendItemHeader'>0.06 - 0.1</td> <td class='legendItemValue' style='background: #D0770B'></td> </tr>" +
  100. "<tr> <td class='legendItemHeader'>0.1 - 0.2</td> <td class='legendItemValue' style='background: #945305'></td> </tr>" +
  101. "</table></div>"
  102. ).appendTo(this._div);
  103. handleMapEvent(this._div, this._map);
  104. return this._div;
  105. };
  106. legendView.addTo(map);
  107. }
  108. function handleMapEvent(div, map) {
  109. if (!div || !map) {
  110. return;
  111. }
  112. div.addEventListener('mouseover', function () {
  113. map.dragging.disable();
  114. map.scrollWheelZoom.disable();
  115. map.doubleClickZoom.disable();
  116. });
  117. div.addEventListener('mouseout', function () {
  118. map.dragging.enable();
  119. map.scrollWheelZoom.enable();
  120. map.doubleClickZoom.enable();
  121. });
  122. }
  123. </script>
  124. </body>
  125. </html>