upsonyeon commited on
Commit
edb8a6e
ยท
verified ยท
1 Parent(s): 76c6b17

Upload 5 files

Browse files
Files changed (2) hide show
  1. README.md +21 -12
  2. app.py +12 -13
README.md CHANGED
@@ -1,19 +1,28 @@
1
  ---
2
- title: MoonlightBus
3
- emoji: ๐ŸŒ–
4
- colorFrom: indigo
5
  colorTo: purple
6
- sdk: docker
7
- app_port: 8501
8
- tags:
9
- - streamlit
10
  pinned: false
11
- short_description: ์งง์€๊ฑฐ๋ฆฌ๋ฅผ ์ปค๋ฒ„ํ•˜๋Š” ์ž์œจ ์ฃผํ–‰ ๊ตํ†ต์‹œ์Šคํ…œ
12
  ---
13
 
14
- # Welcome to Streamlit!
15
 
16
- Edit `/src/streamlit_app.py` to customize this app to your heart's desire. :heart:
17
 
18
- If you have any questions, checkout our [documentation](https://docs.streamlit.io) and [community
19
- forums](https://discuss.streamlit.io).
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
+ title: Smart Transit MVP
3
+ emoji: ๐ŸšŒ
4
+ colorFrom: blue
5
  colorTo: purple
6
+ sdk: streamlit
7
+ sdk_version: 1.35.0
8
+ app_file: app.py
 
9
  pinned: false
10
+ license: mit
11
  ---
12
 
13
+ # ๐ŸšŒ ์‹ฌ์•ผ ๋Œ€์ค‘๊ตํ†ต N๋ฒ„์Šค-DRT ํ†ตํ•ฉ ๋Œ€์‹œ๋ณด๋“œ (Smart Transit MVP)
14
 
15
+ ์˜คํ”ˆ์ŠคํŠธ๋ฆฌํŠธ๋งต(OSM)์˜ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ฐ€์ ธ์™€, **๊ฐ•๋‚จ์—ญ ์ผ๋Œ€**์˜ ์œ ํฅ/์ƒ์—… ์‹œ์„ค๊ณผ ์ฃผ๊ฑฐ/์•ˆ์ „ ์ทจ์•ฝ ์ง€์—ญ์„ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์‹ฌ์•ผ๋ฒ„์Šค(N๋ฒ„์Šค)๊ฐ€ ๋‹ฟ์ง€ ์•Š๋Š” ์‚ฌ๊ฐ์ง€๋Œ€๋ฅผ ์ฐพ์•„๋‚ด๊ณ , ์‹œ๊ฐ„๋Œ€๋ณ„ ์ˆ˜์š” ๋ณ€ํ™”์— ๋งž์ถฐ ๋‹ค์ด๋‚ด๋ฏนํ•˜๊ฒŒ ์›€์ง์ด๋Š” **DRT(์ˆ˜์š”์‘๋‹ตํ˜• ๋ฒ„์Šค) ํ™˜์Šน ๋ฃจํ”„ ๋…ธ์„ **์„ ์‹œ๊ฐํ™”ํ•˜๋Š” ๋Œ€์‹œ๋ณด๋“œ์ž…๋‹ˆ๋‹ค.
16
 
17
+ ## ๐Ÿš€ ์ฃผ์š” ๊ธฐ๋Šฅ
18
+ 1. **OSM ์‹ค์‹œ๊ฐ„ ์—ฐ๋™**: `Overpass API`๋ฅผ ํ†ตํ•ด ๊ฐ•๋‚จ์—ญ ์ผ๋Œ€์˜ ์ •๋ฅ˜์žฅ, ์‹๋‹น/ํŽ, CCTV/๊ฐ€๋กœ๋“ฑ, ์‹ค์ œ ์šดํ–‰ ์ค‘์ธ N๋ฒ„์Šค ๋…ธ์„ ๋ง์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
19
+ 2. **๋‹ค์ด๋‚ด๋ฏน ํƒ€์ž„๋ผ์ธ ๋ฃจํ”„**: ์‹œ๊ฐ„๋Œ€ ์Šฌ๋ผ์ด๋”๋ฅผ ์กฐ์ž‘ํ•˜๋ฉด, ํ•ซ์ŠคํŒŸ์ด ๋ฒˆํ™”๊ฐ€(์ƒ์—…์ง€๊ตฌ)์—์„œ ๊ณจ๋ชฉ๊ธธ(์ฃผ๊ฑฐ์ง€๊ตฌ)๋กœ ์ด๋™ํ•˜๋ฉฐ DRT ๋ฃจํ”„ ํ˜•ํƒœ๊ฐ€ ์ž๋™์œผ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.
20
+ 3. **N๋ฒ„์Šค ํ™˜์Šน ๊ตฌ์—ญ(Transfer Zone) ์‹œ๊ฐํ™”**: Convex Hull ์™ธ๊ณฝ์„  ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ด ํฌ๊ณ  ๋งค๋„๋Ÿฌ์šด 1๋ฐ”ํ€ด ์ˆœํ™˜ ๋…ธ์„ ์„ ๊ทธ๋ฆฌ๊ณ , ๊ธฐ์กด N๋ฒ„์Šค์™€ ๊ฒน์น˜๋Š” ๊ฒฝ๋กœ๋ฅผ '๊ธˆ์ƒ‰ ํ™˜์Šน ๊ตฌ๊ฐ„'์œผ๋กœ ๊ฐ•๋ ฌํ•˜๊ฒŒ ์‹œ๊ฐํ™”ํ•ฉ๋‹ˆ๋‹ค.
21
+
22
+ ## ๐Ÿ›  ์‹คํ–‰ ๋ฐฉ๋ฒ• (Local)
23
+ ์ด ํ”„๋กœ์ ํŠธ๋Š” Hugging Face Spaces ํ™˜๊ฒฝ์— ๋งž์ถฐ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ์ปฌ์—์„œ ์‹คํ–‰ํ•˜๋ ค๋ฉด ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.
24
+
25
+ ```bash
26
+ pip install -r requirements.txt
27
+ streamlit run app.py
28
+ ```
app.py CHANGED
@@ -2,7 +2,6 @@ import streamlit as st
2
  import pandas as pd
3
  import numpy as np
4
  import folium
5
- from folium.plugins import AntPath
6
  from streamlit_folium import st_folium
7
  import math
8
  import requests
@@ -244,29 +243,29 @@ with col1:
244
  location=[row['lat'], row['lon']], radius=2, color="gray", fill=True, fill_color="gray", tooltip="์ผ๋ฐ˜ ์ •๋ฅ˜์žฅ (์‹ฌ์•ผ๋ฒ„์Šค ๋ฏธ์šดํ–‰)"
245
  ).add_to(m)
246
 
247
- # ์‹ค์ œ N๋ฒ„์Šค ๋…ธ์„  (AntPath)
248
  colors = ['cyan', 'lime', 'yellow']
249
  for i, route in enumerate(real_bus_routes):
250
  if route['coords']:
251
- AntPath(
252
- locations=route['coords'], dash_array=[15, 20], delay=800,
253
- color='white', pulse_color=colors[i % len(colors)], weight=4, opacity=0.6,
254
  tooltip=f"์‹ค์ œ ์‹ฌ์•ผ๋ฒ„์Šค ๋…ธ์„ : {route['name']}"
255
  ).add_to(m)
256
 
257
- # DRT ๋ฃจํ”„ ๋…ธ์„  (AntPath - ๋ณด๋ผ์ƒ‰)
258
  if loop_coords:
259
- AntPath(
260
- locations=loop_coords, dash_array=[10, 15], delay=500,
261
- color='purple', pulse_color='magenta', weight=5, opacity=0.9,
262
  tooltip="๐Ÿ”ฅ ์‚ฌ๊ฐ์ง€๋Œ€ ํƒ€๊ฒŸ DRT ์ˆœํ™˜ ๋…ธ์„ "
263
  ).add_to(m)
264
 
265
- # [NEW] ํ™˜์Šน ๊ณต์œ  ๊ตฌ๊ฐ„ (Transfer Zone - ๋น›๋‚˜๋Š” ์˜ค๋ Œ์ง€์ƒ‰)
266
  if len(transfer_coords) >= 2:
267
- AntPath(
268
- locations=transfer_coords, dash_array=[1, 10], delay=300,
269
- color='orange', pulse_color='gold', weight=8, opacity=1.0,
270
  tooltip="๐Ÿ”„ N๋ฒ„์Šค โ†” DRT ํ™˜์Šน ๊ตฌ์—ญ (Transfer Zone)"
271
  ).add_to(m)
272
 
 
2
  import pandas as pd
3
  import numpy as np
4
  import folium
 
5
  from streamlit_folium import st_folium
6
  import math
7
  import requests
 
243
  location=[row['lat'], row['lon']], radius=2, color="gray", fill=True, fill_color="gray", tooltip="์ผ๋ฐ˜ ์ •๋ฅ˜์žฅ (์‹ฌ์•ผ๋ฒ„์Šค ๋ฏธ์šดํ–‰)"
244
  ).add_to(m)
245
 
246
+ # ์‹ค์ œ N๋ฒ„์Šค ๋…ธ์„  (PolyLine)
247
  colors = ['cyan', 'lime', 'yellow']
248
  for i, route in enumerate(real_bus_routes):
249
  if route['coords']:
250
+ folium.PolyLine(
251
+ locations=route['coords'], dash_array="15, 20",
252
+ color=colors[i % len(colors)], weight=4, opacity=0.6,
253
  tooltip=f"์‹ค์ œ ์‹ฌ์•ผ๋ฒ„์Šค ๋…ธ์„ : {route['name']}"
254
  ).add_to(m)
255
 
256
+ # DRT ๋ฃจํ”„ ๋…ธ์„  (PolyLine - ๋ณด๋ผ์ƒ‰)
257
  if loop_coords:
258
+ folium.PolyLine(
259
+ locations=loop_coords, dash_array="10, 15",
260
+ color='purple', weight=5, opacity=0.9,
261
  tooltip="๐Ÿ”ฅ ์‚ฌ๊ฐ์ง€๋Œ€ ํƒ€๊ฒŸ DRT ์ˆœํ™˜ ๋…ธ์„ "
262
  ).add_to(m)
263
 
264
+ # [NEW] ํ™˜์Šน ๊ณต์œ  ๊ตฌ๊ฐ„ (Transfer Zone - ์˜ค๋ Œ์ง€์ƒ‰ ๊ตต์€ ์„ )
265
  if len(transfer_coords) >= 2:
266
+ folium.PolyLine(
267
+ locations=transfer_coords, dash_array="1, 10",
268
+ color='orange', weight=8, opacity=1.0,
269
  tooltip="๐Ÿ”„ N๋ฒ„์Šค โ†” DRT ํ™˜์Šน ๊ตฌ์—ญ (Transfer Zone)"
270
  ).add_to(m)
271