์ค์๊ฐ ์ ๋ฐ ๊ด๋ฆฌ ๋ฐ ํญํด ์ต์ ํ ์์คํ
์ ๋ฐ_ํด์ปคํค.pdf - ํ๋ก์ ํธ ์์ธ ๋ฐํ ์๋ฃ ๋ค์ด๋ก๋
์ค์๊ฐ ์ ๋ฐ ๊ด๋ฆฌ ์์คํ ์ ์ฃผ์ ๊ธฐ๋ฅ์ ์๊ฐํ๋ ๋ฐ๋ชจ ์์์ ๋๋ค.
์ค์๊ฐ ์ ๋ฐ ์์น ์ถ์ ๋ฐ ์ง๋ ๋ชจ๋ํฐ๋ง
์ ๋ฐ ๊ฒฝ๋ก ์๋ฎฌ๋ ์ด์
๋ฐ ์๊ฐ ์ ์ด
์์ฑ ์ธ์ ๊ธฐ๋ฐ AI ์ฑ๋ด ์ธํฐํ์ด์ค
์ถฉ๋ ํํผ ์๊ณ ๋ฆฌ์ฆ ๊ธฐ๋ฐ ๊ฒฝ๋ก ์ต์ ํ
CCTV ๋ฐ LiDAR ์ผ์ ๋ฐ์ดํฐ ๋ชจ๋ํฐ๋ง
๋ฐ์ํ ๋์์ธ - ๋ชจ๋ฐ์ผ ์ต์ ํ ๋์๋ณด๋
๋ชจ๋ฐ์ผ ์์ฑ ์ธ์ ์ฑ๋ด
ํฐ์น ๊ธฐ๋ฐ ์ง๋ ์ธํฐํ์ด์ค
# ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ๋ก ์ด๋
cd awesome-ship-naivgator
# ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๊ธฐํ (์ฒ์ ํ ๋ฒ๋ง)
./setup_database.sh
# ๋๋ ์๋์ผ๋ก:
# sqlite3 ship_routes.db < ship_routes_init.sqlโ
๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ผ: ship_routes.db (191์ค์ SQL ๋คํ์์ ์์ฑ)
- ์ ๋
init_all_data.py๋ฅผ ์คํํ์ง ๋ง์ธ์! - ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ด๋ฏธ
ship_routes.dbํ์ผ๋ก ์ ๊ณต๋ฉ๋๋ค - Git์์ ํด๋ก ํ ๋ฐ๋ก ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค
# Python ๊ฐ์ํ๊ฒฝ ์์ฑ ๋ฐ ํ์ฑํ
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# ์์กด์ฑ ์ค์น
pip install -r requirements.txt
# ํ๊ฒฝ ๋ณ์ ์ค์
cp .env.example .env
# .env ํ์ผ์์ OPENAI_API_KEY ๋ฑ ํ์ ํค ์ค์
# ์๋ฒ ์คํ
python app.pyโ Backend: http://localhost:8000 ๐ API Docs: http://localhost:8000/docs
# Frontend ๋๋ ํ ๋ฆฌ๋ก ์ด๋ (์ ํฐ๋ฏธ๋)
cd awesome-ship-naivgator/frontend
# ์์กด์ฑ ์ค์น
npm install
# ๊ฐ๋ฐ ์๋ฒ ์คํ
npm startโ Frontend: http://localhost:3000
- ์ ๋ฐ ์์น ์ถ์ : ์ค์๊ฐ ์ ๋ฐ ์์น ๋ฐ ์ด๋ ๊ฒฝ๋ก ์๊ฐํ
- Live/Demo ๋ชจ๋:
- Live: ์ค์ EUM API ๋ฐ์ดํฐ ์ฐ๋
- Demo: ์๋ฎฌ๋ ์ด์ ๋ฐ์ดํฐ๋ก ํ ์คํธ
- ์ง๋ ์ปจํธ๋กค:
- ์ค ์ธ/์์
- ์ ๋ฐ ์ ํ ๋ฐ ์ ๋ณด ํ์ธ
- ๊ฒฝ๋ก ํ์/์จ๊น
-
CCTV ์์:
- 8๊ฐ CCTV ์ฅ์น ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ
- ์ง๋์ CCTV ์์น ๋ง์ปค ํ์
- ์ ํํ CCTV ์์ ํ์ ์ฌ์
-
LiDAR ํต๊ณ:
- 5๊ฐ LiDAR ์ผ์ ๋ฐ์ดํฐ
- ์ ๋ฐ ๋ฐ๋ ๋ฐ ์ฅ์ ๋ฌผ ๊ฐ์ง
- ํํธ๋งต ์๊ฐํ
- ๊ธฐ๋ณธ ์ ๋ณด: ์ ๋ฐ๋ช , ์ ํ, ์๋, ๋ฐฉํฅ
- ํ์ฌ ์์น: ์๋/๊ฒฝ๋ ์ขํ
- ์ํ ์ ๋ณด: ์ดํญ ์ํ, ๋ชฉ์ ์ง
- ์ผ์ ์ฐ๋: ์ ๋ฐ๋ณ ์ผ์ ๋ฐ์ดํฐ ์ฐ๊ฒฐ
- ์์/๋์ฐฉ ์ง์ ์ค์ : ์ง๋ ํด๋ฆญ์ผ๋ก ์์น ์ง์
- ์ต์ ๊ฒฝ๋ก ๊ณ์ฐ: A* ์๊ณ ๋ฆฌ์ฆ ๊ธฐ๋ฐ ๊ฒฝ๋ก ์ต์ ํ
- ์ถฉ๋ ํํผ:
- ์ฅ์ ๋ฌผ ์๋ ํํผ
- ๋ค๋ฅธ ์ ๋ฐ๊ณผ์ ์ถฉ๋ ๋ฐฉ์ง
- ์์ ๊ฑฐ๋ฆฌ 0.5ํด๋ฆฌ ์ ์ง
- ๊ฒฝ๋ก ์๋ฎฌ๋ ์ด์
:
- ์๊ฐ๋ณ ์์น ๋ฏธ๋ฆฌ๋ณด๊ธฐ
- ์์ ๋์ฐฉ ์๊ฐ ๊ณ์ฐ
- ์๋ฎฌ๋ ์ด์ ์ฌ์/์ผ์์ ์ง
- ์๋ ์กฐ์ : 1x, 2x, 4x ๋ฐฐ์
- ํน์ ์๊ฐ๋ ์ด๋: ํ์๋ผ์ธ ์ฌ๋ผ์ด๋
- SOS ์๋ฆผ: ์ค์๊ฐ ๊ธด๊ธ ์ ํธ ์์
- ๊ธด๊ธ ๋ฉ์์ง: ์ ๋ฐ๋ณ ๊ธด๊ธ ์ํฉ ์ ํ
- ์์น ๊ธฐ๋ฐ ์๋ฆผ: ์ง๋์ SOS ๋ง์ปค ํ์
- ์ ๋ฐ๊ฐ ํต์ : ์ค์๊ฐ ๋ฉ์์ง ์ก์์
- ์ฝ์ง ์์ ๋ฉ์์ง ์นด์ดํธ
- ์ ๋ฐ๋ณ ๋ฉ์์ง ํํฐ๋ง
- ์๋ฆผ ์์คํ : ์ ๋ฉ์์ง ํ์ ์๋ฆผ
- ์ ๋ฐ ๋ฐ๋ ์๊ฐํ: ๊ตฌ์ญ๋ณ ์ ๋ฐ ์ง์ค๋ ํ์
- ๊ทธ๋๋์ธํธ ์ปฌ๋ฌ๋งต:
- ๋ฎ์ ๋ฐ๋ (ํ๋) โ ๋์ ๋ฐ๋ (๋นจ๊ฐ)
- ์ ์ถํญ ํต๊ณ: ๊ตฌ์ญ๋ณ ์ ๋ฐ ํตํ๋ ๋ถ์
- ํญํด ๋ณด๊ณ ์:
- ์ ๋ฐ๋ณ ์ดํญ ๊ธฐ๋ก
- ๊ฒฝ๋ก ์ด๋ ฅ
- ์ด๋ฒคํธ ๋ก๊ทธ
- PDF ๋ด๋ณด๋ด๊ธฐ: ๋ณด๊ณ ์ ๋ค์ด๋ก๋
- ํต๊ณ ๋ถ์:
- ํ๊ท ์๋
- ์ด ์ดํญ ๊ฑฐ๋ฆฌ
- ์ ๋ฐ ์๊ฐ
- ํ๊ตญ์ด ์์ฑ ์ธ์: Web Speech API ํ์ฉ
- ์ค์๊ฐ ํ ์คํธ ๋ณํ: ์์ฑ โ ํ ์คํธ ์๋ ๋ณํ
- ์์ฑ ๋ ๋ฒจ ํ์: ๋ง์ดํฌ ์ ๋ ฅ ์๊ฐํ
- ์๋ ์นจ๋ฌต ๊ฐ์ง: ๋ง์ด ๋๋๋ฉด ์๋ ์ข ๋ฃ
- OpenAI GPT ์ฐ๋: ์์ฐ์ด ์ดํด ๋ฐ ์๋ต
- ์ ๋ฐ๋ณ ๋ง์ถค ๋ํ: ์ ํํ ์ ๋ฐ ์ปจํ ์คํธ ๋ฐ์
- ์ค์๊ฐ ์๋ต: ๋น ๋ฅธ ๋ต๋ณ ์์ฑ
- ๋ ๊ฐ์ง ๋ชจ๋:
- ์์ฉ O (Flexible): AI๊ฐ ์ต์ ์๊ฐ ์ถ์ฒ
- ์์ฉ X (Fixed): ์ฌ์ฉ์ ์ง์ ์๊ฐ ์ฌ์ฉ
- ์ถฉ๋ ํํผ ๊ณ์ฐ: ๋ค๋ฅธ ์ ๋ฐ๊ณผ์ ์ถฉ๋ ์๊ฐ ์์ธก
- ๋น์ฉ ์ต์ ํ: ์ง์ฐ vs ์ฐํ ๋น์ฉ ๋น๊ต
- ๋ชฉ์ ์ง ์ค์ : ์๋/๊ฒฝ๋ ์ ๋ ฅ
- ๊ณํ ํ์ : ์ ๋ฐ์ ํญํด ๊ณํ ์ ์ก
- ์ค์๊ฐ ๋๊ธฐํ: ๋์๋ณด๋์ ์ฐ๋
- ํ์ฌ ๊ฒฝ๋ก ์กฐํ: ์ ๋ฐ์ ํ์ฌ ํญ๋ก ํ์
- ์จ์ดํฌ์ธํธ ๋ฆฌ์คํธ: ๊ฒฝ์ ์ง ์ขํ ๋ชฉ๋ก
- ์ง๋ ์ค๋ฒ๋ ์ด: ๊ฒฝ๋ก๋ฅผ ์ง๋์ ์ค๋ฒ๋ ์ด
- ํ์ฌ ๋ ์จ: ์์น๋ณ ๋ ์จ ๋ฐ์ดํฐ
- ์๋ณด ์ ๋ณด: ์๊ฐ๋๋ณ ๋ ์จ ์์ธก
- ํด์ ์ ๋ณด: ํ๊ณ , ํ์ ๋ฑ
- ๊ธด๊ธ ์ ํธ ์ ์ก: ์ฆ์ SOS ์ ํ
- ์์น ์ ๋ณด ํฌํจ: ํ์ฌ ์์น ์๋ ์ ์ก
- ์ฐ์ ์์ ์ฒ๋ฆฌ: ๊ธด๊ธ ๋ฉ์์ง ์ต์ฐ์ ํ์
- ์ด์ ๊ตฌ์ญ ์ง์ : ์กฐ์ ํ ํด์ญ ์ค์
- ๊ธ์ง ๊ตฌ์ญ ํ์ธ: ์กฐ์ ๊ธ์ง ๊ตฌ์ญ ์ฒดํฌ
- ๊ตฌ์ญ ์ ์ฅ: ์ค์ ์ ์ฅ ๋ฐ ๊ณต์
- ์ ๋ฐ์ง ์ง์ : ์ ๋ฐ ์ ๋ฐ ์์น ์ค์
- ์์ ๊ฑฐ๋ฆฌ ํ์ธ: ๋ค๋ฅธ ์ ๋ฐ๊ณผ์ ๊ฐ๊ฒฉ ์ฒดํฌ
- ์ ๋ฐ ์๊ฐ ์ค์ : ์ ๋ฐ ์์/์ข ๋ฃ ์๊ฐ
- ์ฌ์ฉ ๊ฐ๋ฅํ ๋ช ๋ น์ด: ์ฑ๋ด ๊ธฐ๋ฅ ์ ์ฒด ๋ชฉ๋ก
- ๋์๋ง: ๊ฐ ๊ธฐ๋ฅ๋ณ ์ฌ์ฉ๋ฒ
- ์์ ๋ํ: ์ํ ์์ฑ ๋ช ๋ น์ด
- ์ฝ์ง ์์ ๋ฉ์์ง: ์ ๋ฉ์์ง ํ์ธ
- ๋ฉ์์ง ํ์คํ ๋ฆฌ: ๊ณผ๊ฑฐ ๋ํ ๋ด์ญ
- ํํฐ๋ง: ์ ๋ฐ๋ณ, ๋ ์ง๋ณ ํํฐ
- ์ ๋ฐ ์ ํ: ์์ ์ ๋ฐ ์ง์
- ๋ฉ์์ง ์์ฑ: ํ ์คํธ ๋ฉ์์ง ์ ๋ ฅ
- ์ฆ์ ์ ์ก: ์ค์๊ฐ ๋ฉ์์ง ์ ๋ฌ
- ์๋ ์ถฉ๋ ์์ธก:
- ์์ ๊ฑฐ๋ฆฌ ์นจ๋ฒ ๊ฐ์ง (0.5ํด๋ฆฌ)
- ์ถฉ๋ ์์ ์๊ฐ ๊ณ์ฐ
- ์ํ๋ ํ๊ฐ
- ์ค์๊ฐ ์๋ฆผ:
- ํ์ ๊ฒฝ๊ณ ์ฐฝ
- ์ํ ์ ๋ฐ ์ ๋ณด ํ์
- ์ถ์ฒ ํํผ ๋ฐฉ์
- ์ค๋ณต ๊ฒฝ๊ณ ๋ฐฉ์ง:
- ์ด๋ฏธ ๊ฒฝ๊ณ ํ ์ ๋ฐ ์ถ์
- ์ค๋งํธ ์๋ฆผ ์ฃผ๊ธฐ ์กฐ์
"์ ๋ฐ 001์ ์ถํญ ์๊ฐ์ ์ถ์ฒํด์ค"
"ํ์ฌ ๊ฒฝ๋ก๋ฅผ ๋ณด์ฌ์ค"
"๋ ์จ ์ ๋ณด ์๋ ค์ค"
"SOS ์ ํธ ๋ณด๋ด์ค"
"๋ฉ์์ง ํ์ธํด์ค"
"EUM003 ์ ๋ฐ์๊ฒ ๋ฉ์์ง ๋ณด๋ด์ค"
- Framework: FastAPI + Uvicorn
- Database: SQLite (SQLAlchemy ORM)
- AI/ML: OpenAI GPT-4 API
- Navigation: A* Pathfinding, Pyvisgraph
- Geospatial: Shapely, Geopy
- Data Processing: NumPy, Matplotlib
- Framework: React 18
- Mapping: React-Leaflet (OpenStreetMap)
- UI Components: Custom CSS
- HTTP Client: Axios
- Routing: React Router v6
- Voice: Web Speech API
- API Communication: REST API
- Real-time Updates: Polling (5์ด ๊ฐ๊ฒฉ)
- CORS: Flask-CORS
- Environment: Python-dotenv
GET /api/ships # ์ ์ฒด ์ ๋ฐ ๋ชฉ๋ก
GET /api/ships/{id} # ํน์ ์ ๋ฐ ์ ๋ณด
POST /api/ships # ์ ๋ฐ ๋ฑ๋ก
PUT /api/ships/{id} # ์ ๋ฐ ์ ๋ณด ์์
GET /api/eum/ships # EUM ์ ๋ฐ ๋ฐ์ดํฐ
GET /api/eum/ships/realtime/{mode} # ์ค์๊ฐ ์์น (live/demo)
GET /api/eum/cctv # CCTV ๋ชฉ๋ก
GET /api/eum/lidar # LiDAR ๋ชฉ๋ก
POST /api/route/plan # ๊ฒฝ๋ก ์์ฑ
GET /api/route/{ship_id} # ์ ๋ฐ ๊ฒฝ๋ก ์กฐํ
POST /api/route/optimize # ์ถํญ ์๊ฐ ์ต์ ํ
POST /api/simulation/start # ์๋ฎฌ๋ ์ด์
์์
POST /api/simulation/stop # ์๋ฎฌ๋ ์ด์
์ค์ง
GET /api/simulation/status # ์๋ฎฌ๋ ์ด์
์ํ
GET /api/simulation/ship-route/{ship_id} # ์๋ฎฌ๋ ์ด์
๊ฒฝ๋ก
GET /api/messages # ๋ฉ์์ง ๋ชฉ๋ก
POST /api/messages # ๋ฉ์์ง ์ ์ก
GET /api/messages/unread-count # ์ฝ์ง ์์ ๋ฉ์์ง ์
GET /api/sos/active # ํ์ฑ SOS ์๋ฆผ
POST /api/sos # SOS ์ ํธ ์ ์ก
POST /api/chatbot/process # ์์ฑ/ํ
์คํธ ์ฒ๋ฆฌ
POST /api/chatbot/recommend-departure # ์ถํญ ์๊ฐ ์ถ์ฒ
POST /api/chatbot/send-plan # ํญํด ๊ณํ ์ ์ก
์ ์ฒด API ๋ฌธ์: http://localhost:8000/docs (์๋ฒ ์คํ ํ)
awesome-ship-navigator/
โ
โโโ app.py # FastAPI ๋ฉ์ธ ์๋ฒ
โโโ chatbot_service.py # AI ์ฑ๋ด ์๋น์ค
โโโ core_optimizer_latlng.py # ๊ฒฝ๋ก ์ต์ ํ ์์ง
โโโ database.py # ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค์
โโโ models.py # ๋ฐ์ดํฐ ๋ชจ๋ธ
โโโ ship_routes.db # SQLite ๋ฐ์ดํฐ๋ฒ ์ด์ค
โโโ requirements.txt # Python ์์กด์ฑ
โโโ .env # ํ๊ฒฝ ๋ณ์ (API ํค)
โ
โโโ frontend/
โ โโโ src/
โ โ โโโ components/
โ โ โ โโโ ChatBot.js # AI ์ฑ๋ด UI
โ โ โ โโโ MapViewReal.js # ์ค์๊ฐ ์ง๋
โ โ โ โโโ ShipInfo.js # ์ ๋ฐ ์ ๋ณด ํจ๋
โ โ โ โโโ SensorInfo.js # ์ผ์ ๋ฐ์ดํฐ ํจ๋
โ โ โ โโโ FunctionModals.js # ์ฑ๋ด ๊ธฐ๋ฅ ๋ชจ๋ฌ
โ โ โ โโโ Emergency.js # ๊ธด๊ธ์ํฉ ๊ด๋ฆฌ
โ โ โ โโโ Messages.js # ๋ฉ์์ง ์ผํฐ
โ โ โ โโโ ReportGenerator.js # ๋ณด๊ณ ์ ์์ฑ
โ โ โโโ App.js # ๋ฉ์ธ ์ฑ
โ โ โโโ App.css # ์คํ์ผ
โ โ โโโ data/
โ โ โโโ obstacles_latlng.json # ์ฅ์ ๋ฌผ ๋ฐ์ดํฐ
โ โโโ public/
โ โโโ package.json
โ
โโโ README.md
- Grid-based Pathfinding: ๊ทธ๋ฆฌ๋ ๊ธฐ๋ฐ ์ต๋จ ๊ฒฝ๋ก ํ์
- Obstacle Avoidance: ์ฅ์ ๋ฌผ ์๋ ํํผ
- Safety Buffer: 0.5ํด๋ฆฌ ์์ ๊ฑฐ๋ฆฌ ์ ์ง
# ํตํฉ ๋น์ฉ ํจ์
Total Cost (๋ถ) = ์ถํญ ์ง์ฐ ์๊ฐ + ์ฐํ ์๊ฐ
Detour Time = ์ถ๊ฐ ๊ฑฐ๋ฆฌ (ํด๋ฆฌ) / ์๋ (๋
ธํธ) ร 60์ต์ ํ ์ ๋ต:
- ์ถํญ ์๊ฐ ์กฐ์ (-30 ~ +120๋ถ)
- ๋์ฒด ๊ฒฝ๋ก ์์ฑ (ํํผ ๋ฐ๊ฒฝ ์กฐ์ )
- ์ต์ ๋น์ฉ ์๋ฃจ์ ์ ํ
- ์์ ๊ฑฐ๋ฆฌ: 0.5 nautical miles
- ์๊ฐ ๊ธฐ๋ฐ ์์น ์ถ์
- ๊ตฌ๊ฐ๋ณ ์ถฉ๋ ์์ธก
- ์ ์ ์ฅ์ ๋ฌผ๋ง ์ง์ (์ฌ, ์์ด)
- 2D ํญํด (์์ฌ ๊ณ ๋ ค ์ํจ)
- ํญํด ์ค ์ผ์ ์๋ ์ ์ง
- ๊ธฐ์/ํด๋ฅ ์ํฅ ๋ฏธ๋ฐ์
- ๋์ ์ฅ์ ๋ฌผ ์ง์ (์ด๋ ์ ๋ฐ)
- ์ค์๊ฐ ๊ฒฝ๋ก ์ฌ๊ณํ
- ๊ธฐ์/ํด๋ฅ ๋ฐ์ดํฐ ํตํฉ
- AIS ๋ฐ์ดํฐ ์ฐ๋
- ๋ชจ๋ฐ์ผ ์ฑ ๊ฐ๋ฐ
- WebSocket ์ค์๊ฐ ํต์
Issues์ Pull Requests๋ฅผ ํ์ํฉ๋๋ค!
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature) - Commit your Changes (
git commit -m 'Add some AmazingFeature') - Push to the Branch (
git push origin feature/AmazingFeature) - Open a Pull Request
MIT License
ํ๋ก์ ํธ ๊ด๋ จ ๋ฌธ์๋ Issues๋ฅผ ํตํด ๋จ๊ฒจ์ฃผ์ธ์.
์์คํ
์ SQLite ๋ฐ์ดํฐ๋ฒ ์ด์ค(ship_routes.db)๋ฅผ ์ฌ์ฉํ๋ฉฐ, ๋ค์ ํ
์ด๋ธ๋ค๋ก ๊ตฌ์ฑ๋ฉ๋๋ค:
CREATE TABLE ships (
id INTEGER PRIMARY KEY,
ship_id VARCHAR UNIQUE, -- ์ ๋ฐ ID (์: EUM001)
name VARCHAR, -- ์ ๋ฐ๋ช
(์: ํด์ฑํธ)
type VARCHAR, -- ์ ๋ฐ ์ ํ (์ด์ , ํ๋ฌผ์ ๋ฑ)
pol VARCHAR, -- ์ถ๋ฐํญ
pol_addr VARCHAR, -- ์ถ๋ฐํญ ์ฃผ์
length FLOAT, -- ์ ๋ฐ ๊ธธ์ด (m)
breath FLOAT, -- ์ ๋ฐ ๋๋น (m)
depth FLOAT, -- ์ ๋ฐ ๊น์ด (m)
gt FLOAT, -- ์ดํค์
latitude FLOAT, -- ํ์ฌ ์๋
longitude FLOAT, -- ํ์ฌ ๊ฒฝ๋
speed FLOAT, -- ์๋ (๋
ธํธ)
course FLOAT, -- ๋ฐฉํฅ (๋)
fishing_area_lat FLOAT, -- ์กฐ์
๊ตฌ์ญ ์๋
fishing_area_lng FLOAT, -- ์กฐ์
๊ตฌ์ญ ๊ฒฝ๋
docking_lat FLOAT, -- ์ ๋ฐ ์์น ์๋
docking_lng FLOAT, -- ์ ๋ฐ ์์น ๊ฒฝ๋
created_at DATETIME,
updated_at DATETIME
);CREATE TABLE ship_routes_simulation (
id INTEGER PRIMARY KEY,
ship_id VARCHAR UNIQUE, -- ์ ๋ฐ ID
ship_name VARCHAR, -- ์ ๋ฐ๋ช
departure_time VARCHAR, -- ์ถํญ ์๊ฐ (ISO 8601)
arrival_time VARCHAR, -- ๋์ฐฉ ์๊ฐ (ISO 8601)
path TEXT, -- ๊ฒฝ๋ก ์ขํ (JSON)
speed_knots FLOAT, -- ์๋ (๋
ธํธ)
direction VARCHAR, -- ๋ฐฉํฅ
created_at DATETIME
);CREATE TABLE cctv_devices (
id INTEGER PRIMARY KEY,
name VARCHAR, -- CCTV ์ด๋ฆ
latitude VARCHAR, -- ์๋
longitude VARCHAR, -- ๊ฒฝ๋
address VARCHAR, -- ์ฃผ์
created_at DATETIME
);CREATE TABLE lidar_devices (
id INTEGER PRIMARY KEY,
name VARCHAR, -- LiDAR ์ด๋ฆ
latitude VARCHAR, -- ์๋
longitude VARCHAR, -- ๊ฒฝ๋
address VARCHAR, -- ์ฃผ์
created_at DATETIME
);CREATE TABLE messages (
id INTEGER PRIMARY KEY,
sender_id VARCHAR, -- ๋ฐ์ ์ ID
sender_name VARCHAR, -- ๋ฐ์ ์ ์ด๋ฆ
recipient_id VARCHAR, -- ์์ ์ ID
recipient_name VARCHAR, -- ์์ ์ ์ด๋ฆ
message TEXT, -- ๋ฉ์์ง ๋ด์ฉ
message_type VARCHAR, -- ๋ฉ์์ง ์ ํ
is_read BOOLEAN, -- ์ฝ์ ์ฌ๋ถ
created_at DATETIME,
read_at DATETIME
);CREATE TABLE sos_alerts (
id INTEGER PRIMARY KEY,
ship_id VARCHAR, -- ์ ๋ฐ ID
ship_name VARCHAR, -- ์ ๋ฐ๋ช
latitude FLOAT, -- ์๋
longitude FLOAT, -- ๊ฒฝ๋
message TEXT, -- SOS ๋ฉ์์ง
status VARCHAR, -- ์ํ (active/resolved)
created_at DATETIME,
resolved_at DATETIME
);CREATE TABLE weather_data (
id INTEGER PRIMARY KEY,
date VARCHAR UNIQUE, -- ๋ ์ง
temperature FLOAT, -- ์จ๋ (ยฐC)
wind_speed FLOAT, -- ํ์ (m/s)
wind_direction FLOAT, -- ํํฅ (๋)
humidity FLOAT, -- ์ต๋ (%)
created_at DATETIME
);sqlite3 ship_routes.db < ship_routes_init.sql./setup_database.sh# ์๋ฎฌ๋ ์ด์
๊ฒฝ๋ก ์์ฑ
python generate_ship_routes.py
# ๋๋ ๊ฐ๋ณ ์ ๋ฐ ๊ฒฝ๋ก ์์ฑ
python generate_ship001_routes.py์ด๊ธฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ ๋ค์์ด ํฌํจ๋ฉ๋๋ค:
- ์ ๋ฐ: 10๊ฐ (EUM001 ~ EUM010)
- CCTV ์ฅ์น: 8๊ฐ
- LiDAR ์ฅ์น: 5๊ฐ
- ์๋ฎฌ๋ ์ด์ ๊ฒฝ๋ก: 9๊ฐ (์ ๋ฐ 2~10)
- ์ด๊ธฐ ๋ฉ์์ง: 0๊ฐ (์ฌ์ฉ์ ์์ฑ)
Version: 5.0 | Last Updated: October 2024 | Status: Production Ready โ
