Skip to content

Commit a7760b9

Browse files
author
CzNd
committed
增加地图(待改)
1 parent 93ae988 commit a7760b9

3 files changed

Lines changed: 71 additions & 1 deletion

File tree

backend/app/api/routes/data_analysis.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
from app.models import GPSRecord
1414
import math
1515
from typing import List, Tuple, Optional
16+
from fastapi.responses import FileResponse
1617

1718
router = APIRouter(prefix="/analysis", tags=["analysis"])
1819

@@ -508,4 +509,14 @@ def get_gps_records_corrected(
508509
}
509510
}
510511
except Exception as e:
511-
return {"error": str(e)}
512+
return {"error": str(e)}
513+
514+
@router.get("/jinan-geojson")
515+
def get_jinan_geojson():
516+
"""
517+
返回济南市geojson地图数据
518+
"""
519+
geojson_path = Path("app/data/json/370100_full.json")
520+
if not geojson_path.exists():
521+
return JSONResponse(status_code=404, content={"error": "济南市geojson文件不存在"})
522+
return FileResponse(str(geojson_path), media_type="application/json")

backend/data/json/370100_full.json

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.

frontend/src/components/Traffic_analysis/PassengerCountChart.tsx

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ export default function PassengerCountChart() {
1717
const [loading, setLoading] = useState(false)
1818
const [interval, setInterval] = useState<'15min' | '1h'>('15min')
1919
const [date, setDate] = useState(formatDate(new Date('2013-09-12')))
20+
const [mapLoaded, setMapLoaded] = useState(false)
21+
const [mapOption, setMapOption] = useState<any>(null)
2022

2123
useEffect(() => {
2224
setLoading(true)
@@ -27,6 +29,55 @@ export default function PassengerCountChart() {
2729
.finally(() => setLoading(false))
2830
}, [interval])
2931

32+
useEffect(() => {
33+
fetch('/370100_full.json')
34+
.then(res => res.json())
35+
.then(geoJson => {
36+
// 注册地图
37+
// @ts-ignore
38+
import('echarts').then(echarts => {
39+
echarts.registerMap('jinan', geoJson)
40+
setMapLoaded(true)
41+
setMapOption({
42+
title: { text: '济南市地图', left: 'center' },
43+
tooltip: { trigger: 'item' },
44+
visualMap: {
45+
min: 0,
46+
max: 100,
47+
left: 'left',
48+
top: 'bottom',
49+
text: ['高', '低'],
50+
inRange: { color: ['#e0ffff', '#006edd'] },
51+
show: true
52+
},
53+
series: [
54+
{
55+
name: '区域数据',
56+
type: 'map',
57+
map: 'jinan',
58+
roam: true,
59+
label: { show: true },
60+
data: [
61+
{ name: '历下区', value: 50 },
62+
{ name: '市中区', value: 80 },
63+
{ name: '槐荫区', value: 60 },
64+
{ name: '天桥区', value: 70 },
65+
{ name: '历城区', value: 90 },
66+
{ name: '长清区', value: 40 },
67+
{ name: '章丘区', value: 30 },
68+
{ name: '济阳区', value: 20 },
69+
{ name: '莱芜区', value: 10 },
70+
{ name: '钢城区', value: 15 },
71+
{ name: '平阴县', value: 25 },
72+
{ name: '商河县', value: 35 }
73+
]
74+
}
75+
]
76+
})
77+
})
78+
})
79+
}, [])
80+
3081
const statOption = {
3182
title: { text: `${interval === '15min' ? '15分钟' : '1小时'}乘客数量分布`, left: 'center' },
3283
tooltip: { trigger: 'axis' },
@@ -82,6 +133,13 @@ export default function PassengerCountChart() {
82133
) : (
83134
<ReactECharts style={{height: 400}} option={statOption} notMerge={true} lazyUpdate={true} />
84135
)}
136+
{/* 新增济南市地图展示 */}
137+
<Text mt={8} mb={2} fontWeight="bold">济南市地图:</Text>
138+
{mapLoaded && mapOption ? (
139+
<ReactECharts style={{height: 500}} option={mapOption} notMerge={true} lazyUpdate={true} />
140+
) : (
141+
<Text>地图加载中...</Text>
142+
)}
85143
</>
86144
)
87145
}

0 commit comments

Comments
 (0)