components_deckgl_react.html 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  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_componentsDeckGL_React"></title>
  9. <script type="text/javascript" include="react,jquery,papaparse,widgets" src="../js/include-web.js"></script>
  10. <script
  11. include="antd,deck,iclient-mapboxgl-react,mapbox-gl-enhance"
  12. src="../../dist/mapboxgl/include-mapboxgl.js"
  13. ></script>
  14. <style>
  15. html,
  16. body {
  17. height: 100%;
  18. margin: 0;
  19. padding: 0;
  20. }
  21. #main {
  22. height: 100%;
  23. }
  24. </style>
  25. </head>
  26. <body>
  27. <div id="main"></div>
  28. <script type="text/babel">
  29. // import {SmDeckglLayer} from '@supermap/react-iclient'
  30. var host = window.isLocal ? window.server : 'https://iserver.supermap.io';
  31. var SmWebMap = SuperMap.Components.SmWebMap;
  32. var SmDeckglLayer = SuperMap.Components.SmDeckglLayer;
  33. var mapOptions = {
  34. container: 'map', // container id
  35. style: {
  36. version: 8,
  37. sources: {
  38. 'raster-tiles': {
  39. type: 'raster',
  40. tiles: [host + '/iserver/services/map-china400/rest/maps/ChinaDark/zxyTileImage.png?z={z}&x={x}&y={y}'],
  41. tileSize: 256
  42. }
  43. },
  44. layers: [
  45. {
  46. id: 'simple-tiles',
  47. type: 'raster',
  48. source: 'raster-tiles',
  49. minzoom: 0,
  50. maxzoom: 22
  51. }
  52. ]
  53. },
  54. center: [-122.430844, 37.772276],
  55. zoom: 12,
  56. pitch: 60,
  57. bearing: 36
  58. };
  59. widgets.loader.showLoader('data loading...');
  60. var popup, map;
  61. function mapIsLoaded(e) {
  62. map = e.map;
  63. }
  64. $.get('../data/deck.gl/strees_data.csv', function(csvstr) {
  65. widgets.loader.removeLoader();
  66. // 构造数据
  67. var features = Papa.parse(csvstr, { skipEmptyLines: true, header: true });
  68. var deckglOptions = {
  69. data: features.data,
  70. props: {
  71. extruded: true,
  72. radius: 55,
  73. autoHighlight: true,
  74. upperPercentile: 99,
  75. coverage: 0.8,
  76. elevationScale: 400,
  77. colorRange: [
  78. [43, 30, 61, 255],
  79. [56, 60, 101, 255],
  80. [62, 95, 126, 255],
  81. [73, 131, 138, 255],
  82. [94, 162, 141, 255],
  83. [130, 187, 146, 255],
  84. [174, 206, 161, 255],
  85. [214, 222, 191, 255]
  86. ],
  87. opacity: 0.8,
  88. // lightSettings 光照配置参数,配置三维光照效果,
  89. lightSettings: {
  90. lightsPosition: [-122.5, 37.7, 3000, -122.2, 37.9, 3000], // 指定为`[x,y,z]`的光在平面阵列中的位置
  91. ambientRatio: 0.2, //光照的环境比例
  92. diffuseRatio: 0.5, //光的漫反射率
  93. specularRatio: 0.3, //光的镜面反射率
  94. lightsStrength: [1.0, 0.0, 2.0, 0.0], //平面阵列中指定为“[x,y]`的灯的强度。 长度应该是`2 x numberOfLights`
  95. numberOfLights: 4 //光照值
  96. },
  97. //如需了解其他配置详情,请查看 DeckglLayer api
  98. onHover: function(feature) {
  99. if (!popup) {
  100. popup = new mapboxgl.Popup({
  101. anchor: 'bottom',
  102. closeButton: false,
  103. offset: {
  104. bottom: [0, -10]
  105. }
  106. });
  107. }
  108. if (!feature.object) {
  109. popup.remove();
  110. return;
  111. }
  112. //+" "+feature.lngLat
  113. popup.setHTML('Point Count: ' + feature.object.points.length);
  114. popup.setLngLat(map.unproject([feature.x, feature.y]));
  115. popup.addTo(map);
  116. }
  117. },
  118. callback: {
  119. getPosition: function(feature) {
  120. if (!feature.latitude || !feature.longitude) {
  121. return [0, 0];
  122. }
  123. return [Number(feature.longitude), Number(feature.latitude)];
  124. }
  125. }
  126. };
  127. ReactDOM.render(
  128. <SmWebMap mapOptions={mapOptions} onLoad={mapIsLoaded}>
  129. <SmDeckglLayer layerType={'hexagon-layer'} options={deckglOptions} />
  130. </SmWebMap>,
  131. document.getElementById('main')
  132. );
  133. });
  134. </script>
  135. </body>
  136. </html>