mapvForceEdgeBuilding.html 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. <!--********************************************************************
  2. * Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
  3. *********************************************************************-->
  4. <!DOCTYPE html>
  5. <html lang="en-US">
  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_mapvForceEdge"></title>
  11. <style>
  12. body {
  13. margin: 0;
  14. padding: 0;
  15. }
  16. #map {
  17. position: absolute;
  18. top: 0;
  19. bottom: 0;
  20. width: 100%;
  21. }
  22. </style>
  23. <script type="text/javascript" include="jquery" src="../js/include-web.js"></script>
  24. <script type="text/javascript" include="mapv" src="../../dist/mapboxgl/include-mapboxgl.js"></script>
  25. </head>
  26. <body style=" margin: 0;overflow: hidden;background: #fff;width: 100%;height:100%">
  27. <div id="map"></div>
  28. <script type="text/javascript">
  29. var attribution = "<a href='https://www.mapbox.com/about/maps/' target='_blank'>© Mapbox </a>" +
  30. " with <span>© <a href='https://iclient.supermap.io' target='_blank'>SuperMap iClient</a> | </span>" +
  31. " Map Data <span>© <a href='http://support.supermap.com.cn/product/iServer.aspx' target='_blank'>SuperMap iServer</a> | </span>" +
  32. "<a href='https://mapv.baidu.com' target='_blank'>© 2018 百度 MapV</a>";
  33. var host = window.isLocal ? window.server : "https://iserver.supermap.io";
  34. var tileURL = host + "/iserver/services/map-china400/rest/maps/ChinaDark/zxyTileImage.png?z={z}&x={x}&y={y}";
  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": [tileURL],
  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: [112, 37.94],
  56. zoom: 3
  57. });
  58. map.addControl(new mapboxgl.NavigationControl(), 'top-left');
  59. map.addControl(new mapboxgl.supermap.LogoControl(), 'bottom-right');
  60. new mapboxgl.Popup({closeOnClick: false})
  61. .setLngLat(map.getCenter())
  62. .setHTML(resources.text_iClient)
  63. .addTo(map);
  64. var randomCount = 500;
  65. var node_data = {
  66. "0": {"x": 108.154518, "y": 36.643346},
  67. "1": {"x": 121.485124, "y": 31.235317},
  68. };
  69. var edge_data = [
  70. {"source": "1", "target": "0"}
  71. ];
  72. var citys = ["北京", "天津", "上海", "重庆", "石家庄", "太原", "呼和浩特", "哈尔滨", "长春", "沈阳", "济南", "南京", "合肥", "杭州", "南昌", "福州", "郑州", "武汉", "长沙", "广州", "南宁", "西安", "银川", "兰州", "西宁", "乌鲁木齐", "成都", "贵阳", "昆明", "拉萨", "海口"];
  73. // 构造数据
  74. for (var i = 1; i < randomCount; i++) {
  75. var cityCenter = mapv.utilCityCenter.getCenterByCityName(citys[parseInt(Math.random() * citys.length)]);
  76. node_data[i] = {
  77. x: cityCenter.lng - 5 + Math.random() * 10,
  78. y: cityCenter.lat - 5 + Math.random() * 10,
  79. };
  80. edge_data.push(
  81. {"source": ~~(i * Math.random()), "target": '0'}
  82. );
  83. }
  84. var fbundling = mapv.utilForceEdgeBundling()
  85. .nodes(node_data)
  86. .edges(edge_data);
  87. var results = fbundling();
  88. var data = [];
  89. var timeData = [];
  90. for (var i = 0; i < results.length; i++) {
  91. var line = results[i];
  92. var coordinates = [];
  93. for (var j = 0; j < line.length; j++) {
  94. coordinates.push([line[j].x, line[j].y]);
  95. timeData.push({
  96. geometry: {
  97. type: 'Point',
  98. coordinates: [line[j].x, line[j].y]
  99. },
  100. count: 1,
  101. time: j
  102. });
  103. }
  104. data.push({
  105. geometry: {
  106. type: 'LineString',
  107. coordinates: transformCoords(coordinates)
  108. }
  109. });
  110. function transformCoords(coordinates) {
  111. var coords = [];
  112. coordinates.map(function (coordinate) {
  113. coords.push(coordinate);
  114. });
  115. return coords;
  116. }
  117. }
  118. var dataSet = new mapv.DataSet(data);
  119. var options = {
  120. strokeStyle: 'rgba(55, 50, 250, 0.3)',
  121. globalCompositeOperation: 'lighter',
  122. shadowColor: 'rgba(55, 50, 250, 0.5)',
  123. shadowBlur: 10,
  124. lineWidth: 1.0,
  125. draw: 'simple'
  126. };
  127. //mapboxgl.supermap.MapvLayer 构造函数的第一个 map 参数将在下个版本遗弃
  128. var mapVLinelayer = new mapboxgl.supermap.MapvLayer("", dataSet, options);
  129. map.addLayer(mapVLinelayer);
  130. var dataSet = new mapv.DataSet(timeData);
  131. var options = {
  132. fillStyle: 'rgba(255, 250, 250, 0.9)',
  133. globalCompositeOperation: 'lighter',
  134. size: 1.5,
  135. animation: {
  136. type: 'time',
  137. stepsRange: {
  138. start: 0,
  139. end: 100
  140. },
  141. trails: 1,
  142. duration: 5
  143. },
  144. draw: 'simple'
  145. };
  146. //mapboxgl.supermap.MapvLayer 构造函数的第一个 map 参数将在下个版本遗弃
  147. var mapVAnimationLinelayer = new mapboxgl.supermap.MapvLayer("", dataSet, options);
  148. map.addLayer(mapVAnimationLinelayer);
  149. </script>
  150. </body>
  151. </html>