deckglLayer_ukcommute.html 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  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. <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
  9. <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width" />
  10. <title data-i18n="resources.title_mb_deckglLayer_ukcommute"></title>
  11. <style>
  12. body {
  13. margin: 0;
  14. overflow: hidden;
  15. background: #fff;
  16. width: 100%;
  17. height: 100%;
  18. }
  19. #map {
  20. position: absolute;
  21. top: 0;
  22. bottom: 0;
  23. width: 100%;
  24. }
  25. #title {
  26. position: absolute;
  27. color: white;
  28. left: 40%;
  29. top: 30px;
  30. text-align: center;
  31. width: 500px;
  32. z-index: 2;
  33. }
  34. #title > h3 {
  35. margin: 10px 0;
  36. letter-spacing: 0.1em;
  37. }
  38. #title > h6 {
  39. margin: 0;
  40. font-weight: normal;
  41. }
  42. .whiteBackground {
  43. background-color: rgba(225, 225, 225, 0.1);
  44. border-top: 1px dotted;
  45. border-image: linear-gradient(
  46. to right,
  47. rgba(114, 159, 207, 1),
  48. rgba(104, 104, 104, 1) 200px,
  49. rgba(104, 104, 104, 0) 75%
  50. )
  51. 30;
  52. }
  53. .legendContainer {
  54. position: absolute;
  55. bottom: 25px;
  56. right: 25px;
  57. color: white;
  58. padding: 10px 10px 0px 10px;
  59. z-index: 1000;
  60. }
  61. .legendHead {
  62. align-self: flex-end;
  63. }
  64. .legendBody {
  65. padding-top: 10px;
  66. }
  67. </style>
  68. </head>
  69. <body>
  70. <div id="title">
  71. <h3 data-i18n="resources.title_mb_deckglLayer_ukcommute"></h3>
  72. <h6 data-i18n="resources.text_mb_deckglLayer_ukcommute"></h6>
  73. </div>
  74. <div class="legendContainer whiteBackground">
  75. <div class="legendHead _flex">
  76. <div>home to work</div>
  77. <div>Arc Color</div>
  78. </div>
  79. <div class="legendBody _flex">
  80. <svg width="120" height="40">
  81. <g transform="translate(0, 0)">
  82. <rect width="30" height="20" style="fill: rgb(228, 155, 0);"></rect>
  83. </g>
  84. <g transform="translate(40, 0)">
  85. <rect width="30" height="20" style="fill: rgb(149, 12, 105);"></rect>
  86. </g>
  87. </svg>
  88. </div>
  89. <div class="legendHead _flex">
  90. <div>workplace add residence</div>
  91. <div>Point Color</div>
  92. </div>
  93. <div class="legendBody _flex">
  94. <svg width="120" height="40">
  95. <g transform="translate(0, 0)">
  96. <rect width="30" height="20" style="fill: rgb(255, 255, 255);"></rect>
  97. </g>
  98. </svg>
  99. </div>
  100. </div>
  101. <div id="map"></div>
  102. <script type="text/javascript" include="papaparse,bootstrap,widgets" src="../js/include-web.js"></script>
  103. <script type="text/javascript" include="deck" src="../../dist/mapboxgl/include-mapboxgl.js"></script>
  104. <script type="text/javascript">
  105. var host = window.isLocal ? window.server : 'https://iserver.supermap.io',
  106. url = host + '/iserver/services/map-china400/rest/maps/ChinaDark';
  107. var map, deckglLayer, popup;
  108. var attribution =
  109. "<a href='https://www.mapbox.com/about/maps/' target='_blank'>© Mapbox </a>" +
  110. " with <span>© <a href='https://iclient.supermap.io' target='_blank'>SuperMap iClient</a> | </span>" +
  111. " Map Data <span>© <a href='https://uber.github.io/kepler.gl' target='_blank'>kepler.gl</a></span> ";
  112. map = new mapboxgl.Map({
  113. container: 'map',
  114. style: {
  115. version: 8,
  116. sources: {
  117. 'raster-tiles': {
  118. attribution: attribution,
  119. type: 'raster',
  120. tiles: [url + '/zxyTileImage.png?z={z}&x={x}&y={y}'],
  121. tileSize: 256
  122. }
  123. },
  124. layers: [
  125. {
  126. id: 'simple-tiles',
  127. type: 'raster',
  128. source: 'raster-tiles',
  129. minzoom: 0,
  130. maxzoom: 22
  131. }
  132. ]
  133. },
  134. center: [-1.8597998742833441, 52.430580528979654],
  135. zoom: 6.5,
  136. pitch: 40,
  137. bearing: -8
  138. });
  139. map.addControl(new mapboxgl.NavigationControl(), 'top-left');
  140. widgets.loader.showLoader('data loading...');
  141. $.get('https://iclient.supermap.io/web/data/deck.gl/ukcommute_data.csv', function(csvstr) {
  142. widgets.loader.removeLoader();
  143. var features = Papa.parse(csvstr, { skipEmptyLines: true, header: true });
  144. addLayer(features.data);
  145. });
  146. function addLayer(features) {
  147. deckglLayer = new mapboxgl.supermap.DeckglLayer('arc-layer', {
  148. data: features,
  149. props: {
  150. pickable: true,
  151. strokeWidth: 1.5,
  152. opacity: 0.3
  153. },
  154. callback: {
  155. getStrokeWidth: 12,
  156. getSourcePosition: function(feature) {
  157. if (!feature.residence_lat || !feature.residence_lng) {
  158. return [0, 0];
  159. }
  160. return [Number(feature.residence_lng), Number(feature.residence_lat)];
  161. },
  162. getTargetPosition: function(feature) {
  163. if (!feature.workplace_lng || !feature.workplace_lat) {
  164. return [0, 0];
  165. }
  166. return [Number(feature.workplace_lng), Number(feature.workplace_lat)];
  167. },
  168. getSourceColor: function(d) {
  169. return [228, 155, 0, 255];
  170. },
  171. getTargetColor: function(d) {
  172. return [149, 12, 105, 120];
  173. }
  174. }
  175. });
  176. map.addLayer(deckglLayer);
  177. var pointsProps = {
  178. opacity: 0.3,
  179. radiusMinPixels: 0.8,
  180. autoHighlight: true,
  181. highlightColor: [255, 255, 0, 255],
  182. onHover: function(e) {
  183. if (!popup) {
  184. popup = new mapboxgl.Popup({
  185. anchor: 'bottom',
  186. closeButton: false,
  187. offset: {
  188. bottom: [0, -10]
  189. }
  190. });
  191. }
  192. if (!e.object) {
  193. popup.remove();
  194. return;
  195. }
  196. popup.setHTML('all_flows: ' + e.object.all_flows);
  197. popup.setLngLat(map.unproject([e.x, e.y]));
  198. popup.addTo(map);
  199. }
  200. };
  201. var workPlace = new mapboxgl.supermap.DeckglLayer('scatter-plot', {
  202. data: features,
  203. props: pointsProps,
  204. callback: {
  205. getPosition: function(feature) {
  206. if (!feature.workplace_lng || !feature.workplace_lat) {
  207. return [0, 0];
  208. }
  209. return [Number(feature.workplace_lng), Number(feature.workplace_lat)];
  210. },
  211. getColor: function(d) {
  212. return [255, 255, 255, 110];
  213. },
  214. getRadius: function(d) {
  215. return 10;
  216. }
  217. }
  218. });
  219. map.addLayer(workPlace);
  220. var homePlace = new mapboxgl.supermap.DeckglLayer('scatter-plot', {
  221. data: features,
  222. props: pointsProps,
  223. callback: {
  224. getPosition: function(feature) {
  225. if (!feature.residence_lat || !feature.residence_lng) {
  226. return [0, 0];
  227. }
  228. return [Number(feature.residence_lng), Number(feature.residence_lat)];
  229. },
  230. getColor: function(d) {
  231. return [255, 255, 255, 110];
  232. },
  233. getRadius: function(d) {
  234. return 10;
  235. }
  236. }
  237. });
  238. map.addLayer(homePlace);
  239. }
  240. </script>
  241. </body>
  242. </html>