rangeTheme3DLayer.html 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  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_rangeTheme3DLayer"></title>
  9. <meta name="viewport" content="width=device-width,initial-scale=0.5,maximum-scale=1,user-scalable=no"/>
  10. <script type="text/javascript" src="../js/include-web.js"></script>
  11. <style>
  12. .mapboxgl-popup {
  13. cursor: auto;
  14. }
  15. .mapboxgl-popup-tip {
  16. border-top-color: rgba(0, 0, 0, 0.8) !important;
  17. }
  18. .mapboxgl-popup-content {
  19. color: whitesmoke;
  20. background-color: rgba(0, 0, 0, 0.8) !important;
  21. }
  22. </style>
  23. </head>
  24. <body style=" margin: 0;overflow: hidden;background: #fff;width: 100%;height:100%;position: absolute;top: 0;">
  25. <div id="map" style="margin:0 auto;width: 100%;height: 100%"></div>
  26. <script type="text/javascript" src="../../dist/mapboxgl/include-mapboxgl.js"></script>
  27. <script>
  28. var host = window.isLocal ? window.server : "https://iserver.supermap.io";
  29. var dataUrl = host + "/iserver/services/data-jingjin/rest/data";
  30. var attribution = "<a href='https://www.mapbox.com/about/maps/' target='_blank'>© Mapbox </a>" +
  31. " with <span>© <a href='https://iclient.supermap.io' target='_blank'>SuperMap iClient</a> | </span>" +
  32. " Map Data <span>© <a href='http://support.supermap.com.cn/product/iServer.aspx' target='_blank'>SuperMap iServer</a></span> ";
  33. var center = [116.640545, 40.531714], themeField = "POP_DENSITY99",
  34. themeLayer, popup;
  35. var map = new mapboxgl.Map({
  36. container: 'map',
  37. style: {
  38. "version": 8,
  39. "sources": {
  40. "raster-tiles": {
  41. "attribution": attribution,
  42. "type": "raster",
  43. "tiles": [host + '/iserver/services/map-china400/rest/maps/China/zxyTileImage.png?z={z}&x={x}&y={y}'],
  44. "tileSize": 256
  45. }
  46. },
  47. "layers": [{
  48. "id": "simple-tiles",
  49. "type": "raster",
  50. "source": "raster-tiles",
  51. "minzoom": 0,
  52. "maxzoom": 22
  53. }]
  54. },
  55. center: center,
  56. zoom: 7
  57. });
  58. map.addControl(new mapboxgl.NavigationControl(), 'top-left');
  59. buildThemeLayer();
  60. function buildThemeLayer() {
  61. var getFeatureBySQLParams = new SuperMap.GetFeaturesBySQLParameters({
  62. queryParameter: new SuperMap.FilterParameter({
  63. name: "Jingjin",
  64. attributeFilter: "SMID > -1"
  65. }),
  66. toIndex: 500,
  67. datasetNames: ["Jingjin:BaseMap_R"]
  68. });
  69. var queryFeatures = new SuperMap.GetFeaturesBySQLService(dataUrl, {
  70. eventListeners: {
  71. processCompleted: function (serviceResult) {
  72. if (serviceResult.error) {
  73. alert("error:" + JSON.stringify(serviceResult.error));
  74. return;
  75. }
  76. var result = serviceResult.result;
  77. if (result.features) {
  78. createThemeLayer(result.features);
  79. }
  80. }
  81. },
  82. format: SuperMap.DataFormat.GEOJSON
  83. });
  84. queryFeatures.processAsync(getFeatureBySQLParams);
  85. }
  86. //创建专题图图层
  87. function createThemeLayer(data) {
  88. popup = new mapboxgl.Popup({closeOnClick: true}).addTo(map);
  89. themeLayer = new mapboxgl.supermap.RangeTheme3DLayer("range3DThemeLayer", {
  90. heightField: themeField,
  91. themeField: themeField,
  92. parseNumber: true,
  93. enableHighlight: true,
  94. heightStops: [
  95. [0.01, 1000], [0.1, 5000], [0.2, 6000]
  96. ],
  97. colorStops: [
  98. [0.01, "#FDE2CA"], [0.02, "#FACE9C"], [0.04, "#F09C42"], [0.06, "#D0770B"], [0.1, "#945305"], [0.2, "#714902"]
  99. ],
  100. // 显示图例
  101. showLegend: true,
  102. legendTitle: resources.text_densityOfPopulation,
  103. legendOrientation: 'vertical'
  104. });
  105. themeLayer.setHighlightStyleOptions({
  106. color: "#058e94", callback: highlightCallback
  107. }).setData(data).addTo(map);
  108. map.easeTo({
  109. pitch: 60,
  110. bearing: 0
  111. })
  112. }
  113. //设置高亮图层提示
  114. function highlightCallback(features, evt) {
  115. var ft = features && features[0];
  116. if (!ft) {
  117. popup.remove();
  118. }
  119. if (ft && ft.properties) {
  120. var content = "<span style='font-weight:bold;font-size: 16px;'>" + ft.properties["NAME"] + "</span><br>";
  121. content += "<span>" + resources.text_densityOfPopulation + ": " + ft.properties[themeField] + "</span><br>";
  122. popup.addTo(map);
  123. popup.setLngLat(evt.lngLat);
  124. popup.setHTML(content);
  125. }
  126. map.on('mouseout', function () {
  127. popup.remove();
  128. });
  129. }
  130. </script>
  131. </body>
  132. </html>