Generate dataset
This commit is contained in:
		
							parent
							
								
									fb198db9c2
								
							
						
					
					
						commit
						e765efa66e
					
				|  | @ -0,0 +1,41 @@ | ||||||
|  | var data = { | ||||||
|  |   gaode: { | ||||||
|  |     securityJsCode: "0bc2f7560c1da34a09c921a92fce4502", | ||||||
|  |   }, | ||||||
|  |   center: [112.945311, 28.178169], | ||||||
|  |   zoom: 13, | ||||||
|  |   chart: { | ||||||
|  |     xAxis: [ | ||||||
|  |       "0", | ||||||
|  |       "1", | ||||||
|  |       "2", | ||||||
|  |       "3", | ||||||
|  |       "4", | ||||||
|  |       "5", | ||||||
|  |       "6", | ||||||
|  |       "7", | ||||||
|  |       "8", | ||||||
|  |       "9", | ||||||
|  |       "10", | ||||||
|  |       "11", | ||||||
|  |       "12", | ||||||
|  |       "13", | ||||||
|  |       "14", | ||||||
|  |       "15", | ||||||
|  |       "16", | ||||||
|  |       "17", | ||||||
|  |       "18", | ||||||
|  |       "19", | ||||||
|  |       "20", | ||||||
|  |       "21", | ||||||
|  |       "22", | ||||||
|  |       "23", | ||||||
|  |       "24", | ||||||
|  |     ], | ||||||
|  |     series: [ | ||||||
|  |       30000, 28000, 25000, 26000, 27000, 30000, 55000, 50000, 40000, 39000, | ||||||
|  |       38000, 39000, 27000, 25000, 30000, 32000, 31000, 25000, 23000, 10000, | ||||||
|  |       12000, 12300, 25000, 26000, 30000, | ||||||
|  |     ], | ||||||
|  |   }, | ||||||
|  | }; | ||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							|  | @ -0,0 +1,40 @@ | ||||||
|  | import json | ||||||
|  | import numpy as np | ||||||
|  | 
 | ||||||
|  | # 中心点的坐标以及每个中心的点的数目 | ||||||
|  | map_center = (112.945311, 28.178169) | ||||||
|  | points = [] | ||||||
|  | all_data = [] | ||||||
|  | 
 | ||||||
|  | count_max = 1000 | ||||||
|  | 
 | ||||||
|  | num_points = 100 | ||||||
|  | lng_center, lat_center = map_center | ||||||
|  | for _ in range(num_points): | ||||||
|  |     # 正态分布生成 | ||||||
|  |     lng = np.random.normal(lng_center, 0.05) | ||||||
|  |     lat = np.random.normal(lat_center, 0.05) | ||||||
|  |      | ||||||
|  |     up = np.random.randint(0, 2) | ||||||
|  |     if (up == 1): | ||||||
|  |         count = np.random.randint(1, 200) | ||||||
|  |     else: | ||||||
|  |         count = np.random.randint(800, 1000) | ||||||
|  |     points.append({'lng': lng, 'lat': lat, 'count': count, 'up': up}) | ||||||
|  | 
 | ||||||
|  | for time in range(24): | ||||||
|  |     data = [] | ||||||
|  |     for point in points: | ||||||
|  |         count = np.random.randint(1, 100) | ||||||
|  |         if (point['up'] == 0): | ||||||
|  |             count = -count | ||||||
|  |         point['count'] = point['count'] + count | ||||||
|  |         if (point['count'] < 0): | ||||||
|  |             point['count'] = 0 | ||||||
|  |         elif (point['count'] > 1000): | ||||||
|  |             point['count'] = 1000 | ||||||
|  |         data.append({'lng': point['lng'], 'lat': point['lat'], 'count': point['count']}) | ||||||
|  |     all_data.append(data) | ||||||
|  | 
 | ||||||
|  | with open('data.json', 'w') as f: | ||||||
|  |     json.dump(all_data, f) | ||||||
							
								
								
									
										194400
									
								
								heatmapData.js
								
								
								
								
							
							
						
						
									
										194400
									
								
								heatmapData.js
								
								
								
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										93
									
								
								index.html
								
								
								
								
							
							
						
						
									
										93
									
								
								index.html
								
								
								
								
							|  | @ -63,12 +63,6 @@ | ||||||
|             class="h-2 w-full cursor-pointer appearance-none rounded-lg bg-gray-200" |             class="h-2 w-full cursor-pointer appearance-none rounded-lg bg-gray-200" | ||||||
|             oninput="updateData(this.value)" |             oninput="updateData(this.value)" | ||||||
|           /> |           /> | ||||||
|           <!-- 一种让 slider 下标和对应档位对齐的奇技淫巧: |  | ||||||
|             在其下方放置 flex 容器,其中放置 space-between 的若干 label。此时,由于文字宽度的影响,无法真正对齐,产生偏移。 |  | ||||||
|             考虑将每个 label 实际大小设为 0,这样 label 可以实际对齐;放置其 absolute 的子元素,其中放置实际要显示的文字, |  | ||||||
|             该 span 通过指定 left 和 translate 可以实现文字中线和父元素对齐,从而实现文字和 slider 档位对齐,作为 slider 刻度。 |  | ||||||
|             此外,注意 x 轴 padding 应该设为 slider 上按钮半径大小,因为 slider 实际开始位置不是该元素最左端,而是滑块在最左端时的中心点。 |  | ||||||
|           --> |  | ||||||
|           <div |           <div | ||||||
|             class="-bottom-6 flex w-full flex-nowrap justify-between px-2 text-sm text-gray-500" |             class="-bottom-6 flex w-full flex-nowrap justify-between px-2 text-sm text-gray-500" | ||||||
|           > |           > | ||||||
|  | @ -149,14 +143,16 @@ | ||||||
|       </div> |       </div> | ||||||
|     </div> |     </div> | ||||||
| 
 | 
 | ||||||
|  |     <script type="text/javascript" src="./static/echarts.min.js"></script> | ||||||
|  |     <script type="text/javascript" src="./heatmapData.js"></script> | ||||||
|  |     <script type="text/javascript" src="./data.js"></script> | ||||||
|  | 
 | ||||||
|     <script type="text/javascript"> |     <script type="text/javascript"> | ||||||
|       window._AMapSecurityConfig = { |       window._AMapSecurityConfig = { | ||||||
|         securityJsCode: "0bc2f7560c1da34a09c921a92fce4502", |         securityJsCode: data.gaode.securityJsCode, | ||||||
|       }; |       }; | ||||||
|     </script> |     </script> | ||||||
|     <script src="https://webapi.amap.com/maps?v=2.0&key=13471667a960ce7a08b3dfdd9a4fb193"></script> |     <script src="https://webapi.amap.com/maps?v=2.0&key=13471667a960ce7a08b3dfdd9a4fb193"></script> | ||||||
|     <script type="text/javascript" src="./static/echarts.min.js"></script> |  | ||||||
|     <script type="text/javascript" src="./heatmapData.js"></script> |  | ||||||
| 
 | 
 | ||||||
|     <script> |     <script> | ||||||
|       var chartEle = document.getElementById("linegraph"); |       var chartEle = document.getElementById("linegraph"); | ||||||
|  | @ -184,33 +180,7 @@ | ||||||
|         xAxis: { |         xAxis: { | ||||||
|           type: "category", |           type: "category", | ||||||
|           boundaryGap: false, |           boundaryGap: false, | ||||||
|           data: [ |           data: data.chart.xAxis, | ||||||
|             "0", |  | ||||||
|             "1", |  | ||||||
|             "2", |  | ||||||
|             "3", |  | ||||||
|             "4", |  | ||||||
|             "5", |  | ||||||
|             "6", |  | ||||||
|             "7", |  | ||||||
|             "8", |  | ||||||
|             "9", |  | ||||||
|             "10", |  | ||||||
|             "11", |  | ||||||
|             "12", |  | ||||||
|             "13", |  | ||||||
|             "14", |  | ||||||
|             "15", |  | ||||||
|             "16", |  | ||||||
|             "17", |  | ||||||
|             "18", |  | ||||||
|             "19", |  | ||||||
|             "20", |  | ||||||
|             "21", |  | ||||||
|             "22", |  | ||||||
|             "23", |  | ||||||
|             "24", |  | ||||||
|           ], |  | ||||||
|         }, |         }, | ||||||
|         yAxis: { |         yAxis: { | ||||||
|           type: "value", |           type: "value", | ||||||
|  | @ -232,11 +202,7 @@ | ||||||
|             name: "Water", |             name: "Water", | ||||||
|             type: "line", |             type: "line", | ||||||
|             smooth: true, |             smooth: true, | ||||||
|             data: [ |             data: data.chart.series, | ||||||
|               30000, 28000, 25000, 26000, 27000, 30000, 55000, 50000, 40000, |  | ||||||
|               39000, 38000, 39000, 27000, 25000, 30000, 32000, 31000, 25000, |  | ||||||
|               23000, 10000, 12000, 12300, 25000, 26000, 30000, |  | ||||||
|             ], |  | ||||||
|             markArea: { |             markArea: { | ||||||
|               itemStyle: { color: "rgba(255, 173, 177, 0.4)" }, |               itemStyle: { color: "rgba(255, 173, 177, 0.4)" }, | ||||||
|               data: [[{ name: "Now", xAxis: "0" }, { xAxis: "1" }]], |               data: [[{ name: "Now", xAxis: "0" }, { xAxis: "1" }]], | ||||||
|  | @ -253,42 +219,33 @@ | ||||||
| 
 | 
 | ||||||
|       var map = new AMap.Map("container", { |       var map = new AMap.Map("container", { | ||||||
|         resizeEnable: true, |         resizeEnable: true, | ||||||
|         center: [116.418261, 39.921984], // 配置地图中心的经纬度 |         center: data.center, | ||||||
|         zoom: 11, |         zoom: data.zoom, | ||||||
|       }); |       }); | ||||||
| 
 | 
 | ||||||
|       // heatmap.js document: |       // heatmap.js document: | ||||||
|       // http://www.patrick-wied.at/static/heatmapjs/docs.html |       // http://www.patrick-wied.at/static/heatmapjs/docs.html | ||||||
|       /* visible 热力图是否显示, 默认为 true |  | ||||||
|       * opacity 热力图的透明度, 分别对应 heatmap.js的minOpacity和maxOpacity |  | ||||||
|       * radius 热力图的每个点的半径大小 |  | ||||||
|       * gradient  {JSON} 热力图的渐变区间 . gradient如下所示 |  | ||||||
|       *	{ |  | ||||||
|       .2:'rgb(0, 255, 255)', |  | ||||||
|       .5:'rgb(0, 110, 255)', |  | ||||||
|       .8:'rgb(100, 0, 255)' |  | ||||||
|       } |  | ||||||
|       其中 key 表示插值的位置, 0-1 |  | ||||||
|       value 为颜色值 |  | ||||||
|       */ |  | ||||||
|       var heatmap; |       var heatmap; | ||||||
|       var playing = false; |       var playing = false; | ||||||
|       map.plugin(["AMap.HeatMap"], function () { |       map.plugin(["AMap.HeatMap"], function () { | ||||||
|         heatmap = new AMap.HeatMap(map, { |         heatmap = new AMap.HeatMap(map, { | ||||||
|           radius: 25, //给定半径 |           radius: 25, // 每个点的半径大小 | ||||||
|           opacity: [0, 0.8], |           opacity: [0, 0.8], | ||||||
|           /*, |  | ||||||
|           gradient: { |           gradient: { | ||||||
|                  0.5: 'blue', |             0.1: "rgb(255, 255, 255)", | ||||||
|                  0.65: 'rgb(117,211,248)', |             0.2: "rgb(225, 225, 255)", | ||||||
|                  0.7: 'rgb(0, 255, 0)', |             0.3: "rgb(195, 195, 255)", | ||||||
|                  0.9: '#ffea00', |             0.4: "rgb(175, 175, 255)", | ||||||
|                  1.0: 'red' |             0.5: "rgb(155, 155, 255)", | ||||||
|              } |             0.6: "rgb(135, 135, 255)", | ||||||
|               */ |             0.7: "rgb(115, 115, 255)", | ||||||
|  |             0.8: "rgb( 95,  95, 255)", | ||||||
|  |             0.9: "rgb( 75,  75, 255)", | ||||||
|  |             1.0: "rgb( 55,  55, 255)", | ||||||
|  |           }, | ||||||
|         }); |         }); | ||||||
|         heatmap.setDataSet({ |         heatmap.setDataSet({ | ||||||
|           max: 100, |           max: 1000, | ||||||
|           data: heatmapData[0], |           data: heatmapData[0], | ||||||
|         }); |         }); | ||||||
|       }); |       }); | ||||||
|  | @ -308,14 +265,16 @@ | ||||||
|               name: "Now", |               name: "Now", | ||||||
|               xAxis: value.toString(), |               xAxis: value.toString(), | ||||||
|             }, |             }, | ||||||
|             { xAxis: (parseInt(value) + 1).toString() }, |             { | ||||||
|  |               xAxis: (parseInt(value) + 1).toString(), | ||||||
|  |             }, | ||||||
|           ], |           ], | ||||||
|         ]; |         ]; | ||||||
|         chart.setOption(option); |         chart.setOption(option); | ||||||
| 
 | 
 | ||||||
|         heatmap.setDataSet({ |         heatmap.setDataSet({ | ||||||
|           data: heatmapData[value], |           data: heatmapData[value], | ||||||
|           max: 100, |           max: 1000, | ||||||
|         }); |         }); | ||||||
|       } |       } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue