maomaobj commited on
Commit
67e5611
·
verified ·
1 Parent(s): 6b8464c

将“苹果产销流向图谱分析系统”,修改为“苹果产销流向图谱分析” - Follow Up Deployment

Browse files
Files changed (1) hide show
  1. index.html +428 -342
index.html CHANGED
@@ -3,413 +3,499 @@
3
  <head>
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>果园种植面积AI遥感分析</title>
7
  <script src="https://cdn.tailwindcss.com"></script>
8
- <link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" />
9
- <script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>
10
- <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
11
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
12
  <style>
13
  .map-container {
14
- height: calc(100vh - 220px);
 
 
 
 
15
  }
16
- .sidebar {
17
- background-color: rgba(255, 255, 255, 0.9);
18
- backdrop-filter: blur(5px);
19
  }
20
- .map-overlay {
21
- position: absolute;
22
- z-index: 1000;
23
- pointer-events: none;
24
  }
25
- .progress-bar {
26
- height: 4px;
27
- background: linear-gradient(90deg, #4f46e5 0%, #10b981 50%, #f59e0b 100%);
28
- animation: progress 2s ease-in-out infinite;
29
- background-size: 200% 100%;
30
  }
31
- @keyframes progress {
32
- 0% { background-position: 0% 50%; }
33
- 50% { background-position: 100% 50%; }
34
- 100% { background-position: 0% 50%; }
35
  }
36
- .orchard-boundary {
37
- stroke: #ef4444;
38
- stroke-width: 2;
39
- fill: rgba(239, 68, 68, 0.2);
40
  }
41
  </style>
42
  </head>
43
- <body class="bg-gray-100 font-sans">
44
- <div class="flex flex-col h-screen">
45
- <!-- 顶部导航栏 -->
46
- <header class="bg-white shadow-sm">
47
- <div class="max-w-7xl mx-auto px-4 py-3 sm:px-6 lg:px-8 flex justify-between items-center">
48
- <div class="flex items-center">
49
- <div class="w-10 h-10 rounded-full bg-gradient-to-r from-blue-600 to-green-500 flex items-center justify-center text-white">
50
- <i class="fas fa-satellite-dish text-xl"></i>
51
- </div>
52
- <h1 class="ml-3 text-xl font-bold text-gray-800">果园种植面积AI遥感分析</h1>
53
- </div>
54
- <div class="flex items-center space-x-4">
55
- <div class="text-sm text-gray-600">
56
- <i class="fas fa-calendar-alt mr-1"></i>
57
- <span id="current-date">2023年11月15日</span>
58
- </div>
59
- <div class="text-sm text-gray-600">
60
- <i class="fas fa-map-marker-alt mr-1"></i>
61
- <span>陕西省延安市</span>
62
- </div>
63
  </div>
 
 
 
 
64
  </div>
65
- </header>
66
 
67
- <!-- 主内容区 -->
68
- <main class="flex-1 flex overflow-hidden">
69
- <!-- 左侧图层控制面板 -->
70
- <div class="sidebar w-64 p-4 border-r border-gray-200 overflow-y-auto">
71
- <h2 class="text-lg font-semibold text-gray-800 mb-4 flex items-center">
72
- <i class="fas fa-layer-group mr-2 text-blue-600"></i>
73
- 图层控制
74
  </h2>
75
-
76
  <div class="space-y-3">
77
- <div class="bg-gray-50 p-3 rounded-lg">
78
- <h3 class="text-sm font-medium text-gray-700 mb-2">基础底图</h3>
79
- <div class="space-y-2">
80
- <label class="flex items-center space-x-2 cursor-pointer">
81
- <input type="radio" name="base-map" class="form-radio text-blue-600" checked>
82
- <span class="text-gray-700">卫星影像</span>
83
- </label>
84
- <label class="flex items-center space-x-2 cursor-pointer">
85
- <input type="radio" name="base-map" class="form-radio text-blue-600">
86
- <span class="text-gray-700">地形图</span>
87
- </label>
88
- <label class="flex items-center space-x-2 cursor-pointer">
89
- <input type="radio" name="base-map" class="form-radio text-blue-600">
90
- <span class="text-gray-700">行政区划</span>
91
- </label>
92
  </div>
 
93
  </div>
94
-
95
- <div class="bg-gray-50 p-3 rounded-lg">
96
- <h3 class="text-sm font-medium text-gray-700 mb-2">遥感指数</h3>
97
- <div class="space-y-2">
98
- <label class="flex items-center space-x-2 cursor-pointer">
99
- <input type="checkbox" class="form-checkbox text-green-600" checked>
100
- <span class="text-gray-700">NDVI植被指数</span>
101
- </label>
102
- <label class="flex items-center space-x-2 cursor-pointer">
103
- <input type="checkbox" class="form-checkbox text-green-600">
104
- <span class="text-gray-700">EVI增强植被指数</span>
105
- </label>
106
- <label class="flex items-center space-x-2 cursor-pointer">
107
- <input type="checkbox" class="form-checkbox text-green-600">
108
- <span class="text-gray-700">NDWI水体指数</span>
109
- </label>
110
  </div>
 
111
  </div>
112
-
113
- <div class="bg-gray-50 p-3 rounded-lg">
114
- <h3 class="text-sm font-medium text-gray-700 mb-2">AI识别结果</h3>
115
- <div class="space-y-2">
116
- <label class="flex items-center space-x-2 cursor-pointer">
117
- <input type="checkbox" class="form-checkbox text-red-600" checked>
118
- <span class="text-gray-700">果园边界</span>
119
- </label>
120
- <label class="flex items-center space-x-2 cursor-pointer">
121
- <input type="checkbox" class="form-checkbox text-red-600">
122
- <span class="text-gray-700">置信度热图</span>
123
- </label>
124
  </div>
 
125
  </div>
126
-
127
- <div class="bg-gray-50 p-3 rounded-lg">
128
- <h3 class="text-sm font-medium text-gray-700 mb-2">透明度调节</h3>
129
- <div class="mt-2">
130
- <input type="range" min="0" max="100" value="50" class="w-full h-2 bg-gray-200 rounded-lg appearance-none cursor-pointer">
131
  </div>
 
 
 
 
 
 
 
 
132
  </div>
133
  </div>
134
- </div>
135
 
136
- <!-- 中央地图区域 -->
137
- <div class="flex-1 relative">
138
- <div id="map" class="map-container w-full h-full"></div>
139
-
140
- <!-- 地图控件 -->
141
- <div class="absolute top-4 right-4 z-1000">
142
- <div class="bg-white rounded-lg shadow-md p-2 flex flex-col space-y-2">
143
- <button class="p-2 text-gray-700 hover:bg-gray-100 rounded" title="放大">
144
- <i class="fas fa-plus"></i>
145
- </button>
146
- <button class="p-2 text-gray-700 hover:bg-gray-100 rounded" title="缩小">
147
- <i class="fas fa-minus"></i>
148
- </button>
149
- <button class="p-2 text-gray-700 hover:bg-gray-100 rounded" title="全图">
150
- <i class="fas fa-globe"></i>
151
- </button>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
152
  </div>
153
  </div>
154
-
155
- <!-- 比例尺 -->
156
- <div class="absolute bottom-4 left-4 z-1000 bg-white p-2 rounded shadow-md">
157
- <div id="scale" class="text-xs text-gray-700">1:10,000</div>
158
- </div>
159
-
160
- <!-- 坐标显示 -->
161
- <div class="absolute bottom-4 right-4 z-1000 bg-white p-2 rounded shadow-md">
162
- <div id="coordinates" class="text-xs text-gray-700">经度: 109.48, 纬度: 36.58</div>
163
- </div>
164
  </div>
165
 
166
- <!-- 右侧AI控制面板 -->
167
- <div class="sidebar w-72 p-4 border-l border-gray-200 overflow-y-auto">
168
- <h2 class="text-lg font-semibold text-gray-800 mb-4 flex items-center">
169
- <i class="fas fa-robot mr-2 text-purple-600"></i>
170
- AI识别控制
171
- </h2>
172
-
173
- <div class="space-y-4">
174
- <div class="bg-gray-50 p-4 rounded-lg">
175
- <h3 class="text-sm font-medium text-gray-700 mb-3">模型选择</h3>
176
- <select class="w-full border border-gray-300 rounded-md px-3 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500">
177
- <option>U-Net v1 (推荐)</option>
178
- <option>U-Net v2</option>
179
- <option>DeepLab V2</option>
180
- <option>DeepLab V3+</option>
181
- <option>PSPNet</option>
182
- </select>
 
183
  </div>
184
-
185
- <div class="bg-gray-50 p-4 rounded-lg">
186
- <h3 class="text-sm font-medium text-gray-700 mb-3">识别参数</h3>
187
- <div class="space-y-3">
188
- <div>
189
- <label class="block text-xs text-gray-500 mb-1">置信度阈值</label>
190
- <input type="range" min="50" max="95" value="80" class="w-full">
191
- <div class="text-xs text-gray-500 text-right">80%</div>
 
 
192
  </div>
193
- <div>
194
- <label class="block text-xs text-gray-500 mb-1">最小地块面积</label>
195
- <div class="flex">
196
- <input type="number" value="0.5" class="w-3/4 border border-gray-300 rounded-l-md px-2 py-1">
197
- <span class="w-1/4 bg-gray-200 text-center text-xs flex items-center justify-center rounded-r-md">公顷</span>
198
- </div>
199
  </div>
200
  </div>
201
- </div>
202
-
203
- <div class="bg-gray-50 p-4 rounded-lg">
204
- <h3 class="text-sm font-medium text-gray-700 mb-3">识别状态</h3>
205
- <div class="space-y-2">
206
- <div class="flex items-center justify-between text-sm">
207
- <span class="text-gray-600">模型加载</span>
208
- <span class="text-green-600"><i class="fas fa-check-circle"></i> 完成</span>
 
209
  </div>
210
- <div class="flex items-center justify-between text-sm">
211
- <span class="text-gray-600">图像预处理</span>
212
- <span class="text-green-600"><i class="fas fa-check-circle"></i> 完成</span>
 
 
 
 
 
 
 
 
213
  </div>
214
- <div class="flex items-center justify-between text-sm">
215
- <span class="text-gray-600">AI识别</span>
216
- <span class="text-blue-600"><i class="fas fa-sync-alt animate-spin"></i> 进行中</span>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
217
  </div>
218
- <div class="progress-bar rounded-full mt-1"></div>
219
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
220
  </div>
221
-
222
- <button class="w-full bg-blue-600 hover:bg-blue-700 text-white py-2 px-4 rounded-md flex items-center justify-center space-x-2">
223
- <i class="fas fa-play"></i>
224
- <span>重新识别</span>
225
- </button>
226
-
227
- <div class="bg-gray-50 p-4 rounded-lg">
228
- <h3 class="text-sm font-medium text-gray-700 mb-3">导出结果</h3>
229
- <div class="grid grid-cols-2 gap-2">
230
- <button class="bg-white border border-green-500 text-green-600 py-1 px-2 rounded text-sm flex items-center justify-center space-x-1">
231
- <i class="fas fa-file-excel"></i>
232
- <span>Excel</span>
233
- </button>
234
- <button class="bg-white border border-blue-500 text-blue-600 py-1 px-2 rounded text-sm flex items-center justify-center space-x-1">
235
- <i class="fas fa-file-code"></i>
236
- <span>GeoJSON</span>
237
- </button>
238
- <button class="bg-white border border-purple-500 text-purple-600 py-1 px-2 rounded text-sm flex items-center justify-center space-x-1">
239
- <i class="fas fa-file-pdf"></i>
240
- <span>PDF报告</span>
241
- </button>
242
- <button class="bg-white border border-orange-500 text-orange-600 py-1 px-2 rounded text-sm flex items-center justify-center space-x-1">
243
- <i class="fas fa-image"></i>
244
- <span>图片</span>
245
- </button>
246
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
247
  </div>
248
  </div>
249
  </div>
250
- </main>
251
 
252
- <!-- 底部统计面板 -->
253
- <footer class="bg-white border-t border-gray-200">
254
- <div class="max-w-7xl mx-auto px-4 py-3 sm:px-6 lg:px-8">
255
- <div class="grid grid-cols-1 md:grid-cols-4 gap-4">
256
- <div class="bg-blue-50 p-3 rounded-lg">
257
- <div class="text-xs text-blue-600 font-medium">识别总面积</div>
258
- <div class="text-xl font-bold text-blue-800">1,245.67 <span class="text-sm">公顷</span></div>
259
- <div class="text-xs text-gray-500 mt-1">较上月 <span class="text-green-600">+2.3%</span></div>
260
- </div>
261
- <div class="bg-green-50 p-3 rounded-lg">
262
- <div class="text-xs text-green-600 font-medium">平均地块面积</div>
263
- <div class="text-xl font-bold text-green-800">3.45 <span class="text-sm">公顷</span></div>
264
- <div class="text-xs text-gray-500 mt-1">较上月 <span class="text-red-600">-0.8%</span></div>
265
- </div>
266
- <div class="bg-purple-50 p-3 rounded-lg">
267
- <div class="text-xs text-purple-600 font-medium">识别地块数</div>
268
- <div class="text-xl font-bold text-purple-800">361 <span class="text-sm">块</span></div>
269
- <div class="text-xs text-gray-500 mt-1">较上月 <span class="text-green-600">+5.1%</span></div>
270
- </div>
271
- <div class="bg-yellow-50 p-3 rounded-lg">
272
- <div class="text-xs text-yellow-600 font-medium">识别置信度</div>
273
- <div class="text-xl font-bold text-yellow-800">86.7 <span class="text-sm">%</span></div>
274
- <div class="text-xs text-gray-500 mt-1">较上月 <span class="text-green-600">+1.2%</span></div>
275
  </div>
 
276
  </div>
277
-
278
- <div class="mt-4">
279
- <canvas id="trendChart" height="120"></canvas>
 
 
 
 
 
 
 
 
 
 
280
  </div>
281
  </div>
282
- </footer>
283
  </div>
284
 
285
  <script>
286
- // 设置当前日期
287
- const now = new Date();
288
- document.getElementById('current-date').textContent = `${now.getFullYear()}年${now.getMonth()+1}月${now.getDate()}日`;
289
-
290
  // 初始化地图
291
- const map = L.map('map').setView([36.58, 109.48], 12);
 
292
 
293
- // 添加底图
294
- L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
295
- attribution: '&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
296
- }).addTo(map);
297
-
298
- // 模拟果园边界数据 (实际应用中应从API获取)
299
- const orchardBoundary = {
300
- "type": "FeatureCollection",
301
- "features": [
302
- {
303
- "type": "Feature",
304
- "properties": {},
305
- "geometry": {
306
- "type": "Polygon",
307
- "coordinates": [[
308
- [109.45, 36.56], [109.46, 36.56], [109.46, 36.57],
309
- [109.45, 36.57], [109.45, 36.56]
310
- ]]
311
- }
312
- },
313
- {
314
- "type": "Feature",
315
- "properties": {},
316
- "geometry": {
317
- "type": "Polygon",
318
- "coordinates": [[
319
- [109.47, 36.58], [109.48, 36.58], [109.48, 36.59],
320
- [109.47, 36.59], [109.47, 36.58]
321
- ]]
322
- }
323
- },
324
- {
325
- "type": "Feature",
326
- "properties": {},
327
- "geometry": {
328
- "type": "Polygon",
329
- "coordinates": [[
330
- [109.49, 36.57], [109.50, 36.57], [109.50, 36.58],
331
- [109.49, 36.58], [109.49, 36.57]
332
- ]]
333
- }
 
 
 
 
334
  }
335
- ]
 
336
  };
337
-
338
- // 添加果园边界到地图
339
- L.geoJSON(orchardBoundary, {
340
- style: {
341
- color: '#ef4444',
342
- weight: 2,
343
- opacity: 1,
344
- fillOpacity: 0.2,
345
- fillColor: '#ef4444'
 
 
 
 
 
 
 
 
 
 
 
 
346
  }
347
- }).addTo(map);
348
-
349
- // 更新比例尺
350
- function updateScale() {
351
- const scale = map.getScale();
352
- document.getElementById('scale').textContent = `1:${Math.round(scale).toLocaleString()}`;
353
- }
354
-
355
- // 更新坐标显示
356
- function updateCoordinates(e) {
357
- const lat = e.latlng.lat.toFixed(4);
358
- const lng = e.latlng.lng.toFixed(4);
359
- document.getElementById('coordinates').textContent = `经度: ${lng}, 纬度: ${lat}`;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
360
  }
361
-
362
- map.on('moveend', updateScale);
363
- map.on('mousemove', updateCoordinates);
364
- updateScale();
365
-
366
- // 初始化趋势图表
367
- const ctx = document.getElementById('trendChart').getContext('2d');
368
- const trendChart = new Chart(ctx, {
369
- type: 'line',
370
- data: {
371
- labels: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月'],
372
- datasets: [
373
- {
374
- label: '苹果园面积 (公顷)',
375
- data: [850, 880, 920, 950, 980, 1020, 1080, 1120, 1160, 1210, 1245],
376
- borderColor: '#3b82f6',
377
- backgroundColor: 'rgba(59, 130, 246, 0.1)',
378
- tension: 0.3,
379
- fill: true
380
- },
381
- {
382
- label: '其他果园面积 (公顷)',
383
- data: [420, 430, 440, 450, 460, 470, 480, 490, 500, 510, 520],
384
- borderColor: '#10b981',
385
- backgroundColor: 'rgba(16, 185, 129, 0.1)',
386
- tension: 0.3,
387
- fill: true
388
  }
389
- ]
390
  },
391
- options: {
392
- responsive: true,
393
- plugins: {
394
- legend: {
395
- position: 'top',
396
- },
397
- tooltip: {
398
- mode: 'index',
399
- intersect: false,
400
  }
401
  },
402
- scales: {
403
- y: {
404
- beginAtZero: false,
405
- title: {
406
- display: true,
407
- text: '面积 (公顷)'
408
- }
409
  }
410
  }
411
- }
 
 
 
 
 
 
 
 
412
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
413
  </script>
414
  <p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=maomaobj/pingguo1" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
415
  </html>
 
3
  <head>
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>产销流向图谱分析</title>
7
  <script src="https://cdn.tailwindcss.com"></script>
8
+ <script src="https://cdn.jsdelivr.net/npm/echarts@5.4.3/dist/echarts.min.js"></script>
9
+ <script src="https://cdn.jsdelivr.net/npm/china-map-data@1.0.0/dist/china.js"></script>
 
10
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
11
  <style>
12
  .map-container {
13
+ width: 100%;
14
+ height: 500px;
15
+ background-color: #f5f7fa;
16
+ border-radius: 8px;
17
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
18
  }
19
+ .analysis-card {
20
+ transition: all 0.3s ease;
 
21
  }
22
+ .analysis-card:hover {
23
+ transform: translateY(-5px);
24
+ box-shadow: 0 10px 15px rgba(0, 0, 0, 0.1);
 
25
  }
26
+ .ai-suggestion {
27
+ background: linear-gradient(135deg, #f5f7fa 0%, #e4e7eb 100%);
28
+ border-left: 4px solid #3b82f6;
 
 
29
  }
30
+ .heatmap-legend {
31
+ background: rgba(255, 255, 255, 0.8);
32
+ border-radius: 4px;
33
+ padding: 5px 10px;
34
  }
35
+ .flow-legend {
36
+ background: rgba(255, 255, 255, 0.8);
37
+ border-radius: 4px;
38
+ padding: 5px 10px;
39
  }
40
  </style>
41
  </head>
42
+ <body class="bg-gray-50">
43
+ <div class="container mx-auto px-4 py-6">
44
+ <!-- 标题区域 -->
45
+ <div class="flex justify-between items-center mb-6">
46
+ <div>
47
+ <h1 class="text-3xl font-bold text-gray-800">苹果产销流向图谱分析</h1>
48
+ <p class="text-gray-600">全国苹果产业链物流与价格动态监测平台</p>
49
+ </div>
50
+ <div class="flex space-x-4">
51
+ <div class="bg-blue-100 text-blue-800 px-4 py-2 rounded-lg flex items-center">
52
+ <i class="fas fa-calendar-alt mr-2"></i>
53
+ <span>2023年11月数据</span>
 
 
 
 
 
 
 
 
54
  </div>
55
+ <button class="bg-blue-600 hover:bg-blue-700 text-white px-4 py-2 rounded-lg flex items-center">
56
+ <i class="fas fa-download mr-2"></i>
57
+ <span>导出报告</span>
58
+ </button>
59
  </div>
60
+ </div>
61
 
62
+ <!-- 主内容区 -->
63
+ <div class="grid grid-cols-1 lg:grid-cols-4 gap-6">
64
+ <!-- 左侧产区选择器 -->
65
+ <div class="lg:col-span-1 bg-white rounded-lg shadow p-4">
66
+ <h2 class="text-xl font-semibold text-gray-800 mb-4 flex items-center">
67
+ <i class="fas fa-map-marker-alt text-blue-500 mr-2"></i>
68
+ 主产区选择
69
  </h2>
 
70
  <div class="space-y-3">
71
+ <div class="p-3 rounded-lg bg-blue-50 border border-blue-200 cursor-pointer hover:bg-blue-100 transition">
72
+ <div class="flex justify-between items-center">
73
+ <span class="font-medium text-blue-800">烟台产区</span>
74
+ <span class="text-sm text-blue-600">山东</span>
 
 
 
 
 
 
 
 
 
 
 
75
  </div>
76
+ <div class="mt-1 text-sm text-gray-600">月均出货量: 12.5万吨</div>
77
  </div>
78
+ <div class="p-3 rounded-lg border border-gray-200 cursor-pointer hover:bg-gray-50 transition">
79
+ <div class="flex justify-between items-center">
80
+ <span class="font-medium text-gray-800">渭南产区</span>
81
+ <span class="text-sm text-gray-600">陕西</span>
 
 
 
 
 
 
 
 
 
 
 
 
82
  </div>
83
+ <div class="mt-1 text-sm text-gray-600">月均出货量: 8.2万吨</div>
84
  </div>
85
+ <div class="p-3 rounded-lg border border-gray-200 cursor-pointer hover:bg-gray-50 transition">
86
+ <div class="flex justify-between items-center">
87
+ <span class="font-medium text-gray-800">洛川产区</span>
88
+ <span class="text-sm text-gray-600">陕西</span>
 
 
 
 
 
 
 
 
89
  </div>
90
+ <div class="mt-1 text-sm text-gray-600">月均出货量: 6.7万吨</div>
91
  </div>
92
+ <div class="p-3 rounded-lg border border-gray-200 cursor-pointer hover:bg-gray-50 transition">
93
+ <div class="flex justify-between items-center">
94
+ <span class="font-medium text-gray-800">静宁产区</span>
95
+ <span class="text-sm text-gray-600">甘肃</span>
 
96
  </div>
97
+ <div class="mt-1 text-sm text-gray-600">月均出货量: 5.3万吨</div>
98
+ </div>
99
+ <div class="p-3 rounded-lg border border-gray-200 cursor-pointer hover:bg-gray-50 transition">
100
+ <div class="flex justify-between items-center">
101
+ <span class="font-medium text-gray-800">昭通产区</span>
102
+ <span class="text-sm text-gray-600">云南</span>
103
+ </div>
104
+ <div class="mt-1 text-sm text-gray-600">月均出货量: 3.1万吨</div>
105
  </div>
106
  </div>
 
107
 
108
+ <div class="mt-6">
109
+ <h3 class="font-medium text-gray-700 mb-2 flex items-center">
110
+ <i class="fas fa-filter text-blue-500 mr-2"></i>
111
+ 筛选条件
112
+ </h3>
113
+ <div class="space-y-3">
114
+ <div>
115
+ <label class="block text-sm text-gray-600 mb-1">时间范围</label>
116
+ <select class="w-full p-2 border border-gray-300 rounded-md">
117
+ <option>近1个月</option>
118
+ <option>近3个月</option>
119
+ <option>近6个月</option>
120
+ <option selected>2023年全年</option>
121
+ </select>
122
+ </div>
123
+ <div>
124
+ <label class="block text-sm text-gray-600 mb-1">苹果品种</label>
125
+ <select class="w-full p-2 border border-gray-300 rounded-md">
126
+ <option selected>全部品种</option>
127
+ <option>红富士</option>
128
+ <option>嘎啦</option>
129
+ <option>黄元帅</option>
130
+ <option>国光</option>
131
+ </select>
132
+ </div>
133
+ <div>
134
+ <label class="block text-sm text-gray-600 mb-1">物流方式</label>
135
+ <select class="w-full p-2 border border-gray-300 rounded-md">
136
+ <option selected>全部方式</option>
137
+ <option>冷链运输</option>
138
+ <option>普通货运</option>
139
+ <option>铁路运输</option>
140
+ </select>
141
+ </div>
142
  </div>
143
  </div>
 
 
 
 
 
 
 
 
 
 
144
  </div>
145
 
146
+ <!-- 主地图区域 -->
147
+ <div class="lg:col-span-3">
148
+ <div class="bg-white rounded-lg shadow p-4">
149
+ <div class="flex justify-between items-center mb-4">
150
+ <h2 class="text-xl font-semibold text-gray-800 flex items-center">
151
+ <i class="fas fa-map text-blue-500 mr-2"></i>
152
+ 全国苹果物流流向图谱
153
+ </h2>
154
+ <div class="flex space-x-2">
155
+ <button class="px-3 py-1 bg-gray-100 hover:bg-gray-200 rounded-md text-sm flex items-center">
156
+ <i class="fas fa-layer-group mr-1"></i>
157
+ <span>图层控制</span>
158
+ </button>
159
+ <button class="px-3 py-1 bg-gray-100 hover:bg-gray-200 rounded-md text-sm flex items-center">
160
+ <i class="fas fa-search mr-1"></i>
161
+ <span>搜索城市</span>
162
+ </button>
163
+ </div>
164
  </div>
165
+ <div class="map-container" id="mainMap"></div>
166
+ <div class="flex justify-between mt-3 text-sm text-gray-600">
167
+ <div class="flow-legend">
168
+ <div class="flex items-center mb-1">
169
+ <span class="w-4 h-1 bg-green-500 mr-2"></span>
170
+ <span>价格差 < 0.5元/kg</span>
171
+ </div>
172
+ <div class="flex items-center mb-1">
173
+ <span class="w-6 h-1 bg-yellow-500 mr-2"></span>
174
+ <span>价格差 0.5-1元/kg</span>
175
  </div>
176
+ <div class="flex items-center">
177
+ <span class="w-8 h-1 bg-red-500 mr-2"></span>
178
+ <span>价格差 > 1元/kg</span>
 
 
 
179
  </div>
180
  </div>
181
+ <div class="heatmap-legend">
182
+ <div class="flex items-center">
183
+ <span class="text-xs mr-1">低</span>
184
+ <span class="w-4 h-4 bg-blue-100 mr-1"></span>
185
+ <span class="w-4 h-4 bg-blue-300 mr-1"></span>
186
+ <span class="w-4 h-4 bg-blue-500 mr-1"></span>
187
+ <span class="w-4 h-4 bg-blue-700 mr-1"></span>
188
+ <span class="w-4 h-4 bg-blue-900 mr-1"></span>
189
+ <span class="text-xs">高</span>
190
  </div>
191
+ <div class="text-center mt-1">销售热度</div>
192
+ </div>
193
+ </div>
194
+ </div>
195
+
196
+ <!-- 智能分析结果 -->
197
+ <div class="grid grid-cols-1 md:grid-cols-3 gap-4 mt-6">
198
+ <div class="analysis-card bg-white rounded-lg shadow p-4">
199
+ <div class="flex items-center mb-3">
200
+ <div class="bg-blue-100 text-blue-600 p-2 rounded-full mr-3">
201
+ <i class="fas fa-exchange-alt"></i>
202
  </div>
203
+ </div>
204
+ <h3 class="font-semibold text-gray-800 mb-2">枢纽市场识别</h3>
205
+ <ul class="text-sm text-gray-600 space-y-1">
206
+ <li class="flex items-center">
207
+ <span class="w-2 h-2 bg-blue-500 rounded-full mr-2"></span>
208
+ <span>北京新发地市场 (中转率82%)</span>
209
+ </li>
210
+ <li class="flex items-center">
211
+ <span class="w-2 h-2 bg-blue-500 rounded-full mr-2"></span>
212
+ <span>广州江南市场 (中转率76%)</span>
213
+ </li>
214
+ <li class="flex items-center">
215
+ <span class="w-2 h-2 bg-blue-500 rounded-full mr-2"></span>
216
+ <span>郑州万邦市场 (中转率68%)</span>
217
+ </li>
218
+ </ul>
219
+ </div>
220
+ <div class="analysis-card bg-white rounded-lg shadow p-4">
221
+ <div class="flex items-center mb-3">
222
+ <div class="bg-green-100 text-green-600 p-2 rounded-full mr-3">
223
+ <i class="fas fa-map-marked-alt"></i>
224
  </div>
 
225
  </div>
226
+ <h3 class="font-semibold text-gray-800 mb-2">潜在空白市场</h3>
227
+ <ul class="text-sm text-gray-600 space-y-1">
228
+ <li class="flex items-center">
229
+ <span class="w-2 h-2 bg-green-500 rounded-full mr-2"></span>
230
+ <span>南宁市 (需求缺口3.2万吨)</span>
231
+ </li>
232
+ <li class="flex items-center">
233
+ <span class="w-2 h-2 bg-green-500 rounded-full mr-2"></span>
234
+ <span>海口市 (价格溢价15%)</span>
235
+ </li>
236
+ <li class="flex items-center">
237
+ <span class="w-2 h-2 bg-green-500 rounded-full mr-2"></span>
238
+ <span>拉萨市 (运输成本高)</span>
239
+ </li>
240
+ </ul>
241
  </div>
242
+ <div class="analysis-card bg-white rounded-lg shadow p-4">
243
+ <div class="flex items-center mb-3">
244
+ <div class="bg-red-100 text-red-600 p-2 rounded-full mr-3">
245
+ <i class="fas fa-temperature-low"></i>
246
+ </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
247
  </div>
248
+ <h3 class="font-semibold text-gray-800 mb-2">冷链瓶颈路径</h3>
249
+ <ul class="text-sm text-gray-600 space-y-1">
250
+ <li class="flex items-center">
251
+ <span class="w-2 h-2 bg-red-500 rounded-full mr-2"></span>
252
+ <span>烟台-广州 (损耗率8.5%)</span>
253
+ </li>
254
+ <li class="flex items-center">
255
+ <span class="w-2 h-2 bg-red-500 rounded-full mr-2"></span>
256
+ <span>洛川-上海 (冷链覆盖率60%)</span>
257
+ </li>
258
+ <li class="flex items-center">
259
+ <span class="w-2 h-2 bg-red-500 rounded-full mr-2"></span>
260
+ <span>静宁-成都 (温度波动大)</span>
261
+ </li>
262
+ </ul>
263
  </div>
264
  </div>
265
  </div>
266
+ </div>
267
 
268
+ <!-- AI建议框 -->
269
+ <div class="mt-6 grid grid-cols-1 lg:grid-cols-4 gap-6">
270
+ <div class="lg:col-span-1"></div>
271
+ <div class="lg:col-span-3 ai-suggestion rounded-lg shadow p-4">
272
+ <div class="flex items-center mb-3">
273
+ <div class="bg-purple-100 text-purple-600 p-2 rounded-full mr-3">
274
+ <i class="fas fa-robot"></i>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
275
  </div>
276
+ <h3 class="font-semibold text-gray-800">AI供应链优化建议</h3>
277
  </div>
278
+ <div class="text-sm text-gray-700">
279
+ <p class="mb-2">基于当前数据分析,系统建议:</p>
280
+ <ol class="list-decimal pl-5 space-y-1">
281
+ <li>增加烟台至南宁的直达冷链线路,预计可降低运输成本12%</li>
282
+ <li>在广州江南市场增设临时仓储,缓解11-12月旺季拥堵</li>
283
+ <li>针对拉萨市场,建议采用铁路+公路联运模式,平衡成本与时效</li>
284
+ <li>静宁产区可考虑与成都本地经销商建立长期合作,减少中间环节</li>
285
+ </ol>
286
+ <div class="mt-3 flex justify-end">
287
+ <button class="px-3 py-1 bg-purple-600 hover:bg-purple-700 text-white rounded-md text-sm">
288
+ 生成详细优化方案
289
+ </button>
290
+ </div>
291
  </div>
292
  </div>
293
+ </div>
294
  </div>
295
 
296
  <script>
 
 
 
 
297
  // 初始化地图
298
+ const chartDom = document.getElementById('mainMap');
299
+ const myChart = echarts.init(chartDom);
300
 
301
+ // 模拟数据
302
+ const geoCoordMap = {
303
+ '烟台': [121.39, 37.52],
304
+ '渭南': [109.49, 34.50],
305
+ '洛川': [109.42, 35.76],
306
+ '北京': [116.40, 39.90],
307
+ '上海': [121.47, 31.23],
308
+ '广州': [113.26, 23.12],
309
+ '成都': [104.06, 30.67],
310
+ '郑州': [113.62, 34.75],
311
+ '武汉': [114.30, 30.60],
312
+ '南京': [118.78, 32.04],
313
+ '杭州': [120.15, 30.28],
314
+ '西安': [108.93, 34.27],
315
+ '长沙': [112.93, 28.23],
316
+ '南宁': [108.32, 22.82],
317
+ '海口': [110.20, 20.05],
318
+ '拉萨': [91.11, 29.97]
319
+ };
320
+
321
+ const heatData = [
322
+ {name: '北京', value: 95},
323
+ {name: '上海', value: 90},
324
+ {name: '广州', value: 88},
325
+ {name: '成都', value: 75},
326
+ {name: '郑州', value: 70},
327
+ {name: '武汉', value: 68},
328
+ {name: '南京', value: 65},
329
+ {name: '杭州', value: 63},
330
+ {name: '西安', value: 60},
331
+ {name: '长沙', value: 58},
332
+ {name: '南宁', value: 45},
333
+ {name: '海口', value: 40},
334
+ {name: '拉萨', value: 30}
335
+ ];
336
+
337
+ const convertData = function (data) {
338
+ const res = [];
339
+ for (let i = 0; i < data.length; i++) {
340
+ const geoCoord = geoCoordMap[data[i].name];
341
+ if (geoCoord) {
342
+ res.push({
343
+ name: data[i].name,
344
+ value: geoCoord.concat(data[i].value)
345
+ });
346
  }
347
+ }
348
+ return res;
349
  };
350
+
351
+ const series = [{
352
+ name: '销售热度',
353
+ type: 'scatter',
354
+ coordinateSystem: 'geo',
355
+ data: convertData(heatData),
356
+ symbolSize: function (val) {
357
+ return val[2] / 5;
358
+ },
359
+ label: {
360
+ formatter: '{b}',
361
+ position: 'right',
362
+ show: false
363
+ },
364
+ itemStyle: {
365
+ color: '#1e90ff'
366
+ },
367
+ emphasis: {
368
+ label: {
369
+ show: true
370
+ }
371
  }
372
+ }, {
373
+ name: '热力图',
374
+ type: 'heatmap',
375
+ coordinateSystem: 'geo',
376
+ data: convertData(heatData),
377
+ pointSize: 10,
378
+ blurSize: 15
379
+ }];
380
+
381
+ // 添加流向数据
382
+ const flowData = [
383
+ {from: '烟台', to: '北京', value: 5, priceDiff: 0.3},
384
+ {from: '烟台', to: '上海', value: 4, priceDiff: 0.8},
385
+ {from: '烟台', to: '广州', value: 6, priceDiff: 1.2},
386
+ {from: '渭南', to: '北京', value: 3, priceDiff: 0.4},
387
+ {from: '渭南', to: '成都', value: 4, priceDiff: 0.6},
388
+ {from: '渭南', to: '郑州', value: 2, priceDiff: 0.2},
389
+ {from: '洛川', to: '上海', value: 3, priceDiff: 0.7},
390
+ {from: '洛川', to: '广州', value: 2, priceDiff: 1.1},
391
+ {from: '洛川', to: '武汉', value: 2, priceDiff: 0.5},
392
+ {from: '北京', to: '南京', value: 2, priceDiff: 0.4},
393
+ {from: '北京', to: '杭州', value: 2, priceDiff: 0.5},
394
+ {from: '广州', to: '南宁', value: 1, priceDiff: 0.8},
395
+ {from: '广州', to: '海口', value: 1, priceDiff: 1.3},
396
+ {from: '郑州', to: '长沙', value: 1, priceDiff: 0.6},
397
+ {from: '郑州', to: '西安', value: 1, priceDiff: 0.3}
398
+ ];
399
+
400
+ flowData.forEach(item => {
401
+ series.push({
402
+ name: `${item.from} → ${item.to}`,
403
+ type: 'lines',
404
+ zlevel: 1,
405
+ effect: {
406
+ show: true,
407
+ period: 6,
408
+ trailLength: 0.7,
409
+ color: '#fff',
410
+ symbolSize: 3
411
+ },
412
+ lineStyle: {
413
+ normal: {
414
+ width: item.value,
415
+ curveness: 0.2,
416
+ color: getLineColor(item.priceDiff)
417
+ }
418
+ },
419
+ data: [{
420
+ coords: [geoCoordMap[item.from], geoCoordMap[item.to]],
421
+ value: item.value
422
+ }]
423
+ });
424
+ });
425
+
426
+ function getLineColor(priceDiff) {
427
+ if (priceDiff < 0.5) return '#10B981'; // 绿色
428
+ if (priceDiff < 1) return '#F59E0B'; // 黄色
429
+ return '#EF4444'; // 红色
430
  }
431
+
432
+ // 配置项
433
+ const option = {
434
+ tooltip: {
435
+ trigger: 'item',
436
+ formatter: params => {
437
+ if (params.seriesType === 'scatter') {
438
+ return `${params.name}<br/>销售热度: ${params.value[2]}`;
439
+ } else if (params.seriesType === 'lines') {
440
+ const data = params.data;
441
+ return `${params.seriesName}<br/>流量: ${data.value}万吨<br/>价格差: ${flowData.find(f => f.from === params.seriesName.split(' ')[0] && f.to === params.seriesName.split(' ')[1]).priceDiff}元/kg`;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
442
  }
443
+ }
444
  },
445
+ geo: {
446
+ map: 'china',
447
+ roam: true,
448
+ label: {
449
+ emphasis: {
450
+ show: true
 
 
 
451
  }
452
  },
453
+ itemStyle: {
454
+ normal: {
455
+ areaColor: '#f5f7fa',
456
+ borderColor: '#d1d5db'
457
+ },
458
+ emphasis: {
459
+ areaColor: '#e5e7eb'
460
  }
461
  }
462
+ },
463
+ series: series
464
+ };
465
+
466
+ myChart.setOption(option);
467
+
468
+ // 响应窗口大小变化
469
+ window.addEventListener('resize', function() {
470
+ myChart.resize();
471
  });
472
+
473
+ // 产区选择交互
474
+ document.querySelectorAll('.p-3.rounded-lg').forEach(item => {
475
+ item.addEventListener('click', function() {
476
+ // 移除所有选中状态
477
+ document.querySelectorAll('.p-3.rounded-lg').forEach(el => {
478
+ el.classList.remove('bg-blue-50', 'border-blue-200');
479
+ el.classList.add('border-gray-200');
480
+ });
481
+
482
+ // 添加当前选中状态
483
+ this.classList.remove('border-gray-200');
484
+ this.classList.add('bg-blue-50', 'border-blue-200');
485
+
486
+ // 模拟地图更新
487
+ const region = this.querySelector('.font-medium').textContent.replace('产区', '');
488
+ highlightRegion(region);
489
+ });
490
+ });
491
+
492
+ function highlightRegion(region) {
493
+ // 这里应该更新地图高亮显示选定产区的流向
494
+ console.log(`高亮显示 ${region} 的流向`);
495
+
496
+ // 在实际应用中,这里会调用地图API更新显示
497
+ // 例如:myChart.dispatchAction({...});
498
+ }
499
  </script>
500
  <p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=maomaobj/pingguo1" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
501
  </html>