fix: 修复3D地球坐标映射多个严重bug
## Bug修复详情 ### 1. 致命错误:球面距离计算 (calculateDistance) - 问题:使用勾股定理计算经纬度距离,在球体表面完全错误 - 修复:改用Haversine公式计算球面大圆距离 - 影响:赤道1度=111km,极地1度=19km,原计算误差巨大 ### 2. 经度范围规范化 (vector3ToLatLon) - 问题:Math.atan2返回[-180°,180°],转换后可能超出标准范围 - 修复:添加while循环规范化到[-180, 180]区间 - 影响:避免本初子午线附近返回360°的异常值 ### 3. 屏幕坐标转换支持非全屏 (screenToEarthCoords) - 问题:假设Canvas永远全屏,非全屏时点击偏移严重 - 修复:新增domElement参数,使用getBoundingClientRect()计算相对坐标 - 影响:嵌入式3D地球组件也能精准拾取 ### 4. 地球旋转时经纬度映射错误 - 问题:Raycaster返回世界坐标,未考虑地球自转 - 修复:使用earth.worldToLocal()转换到本地坐标空间 - 影响:地球旋转时经纬度显示正确跟随 ## 新增功能 - CelesTrak卫星数据采集器 - Space-Track卫星数据采集器 - 卫星可视化模块(500颗,实时SGP4轨道计算) - 海底光缆悬停显示info-card - 统一info-card组件 - 工具栏按钮(Stellarium风格) - 缩放控制(百分比显示) - Docker volume映射(代码热更新) ## 文件变更 - utils.js: 坐标转换核心逻辑修复 - satellites.js: 新增卫星可视化 - cables.js: 悬停交互支持 - main.js: 悬停/锁定逻辑 - controls.js: 工具栏UI - info-card.js: 统一卡片组件 - docker-compose.yml: volume映射 - restart.sh: 简化重启脚本
This commit is contained in:
135
restart.sh
135
restart.sh
@@ -1,134 +1,33 @@
|
||||
#!/bin/bash
|
||||
# Planet 重启脚本 - 停止并重启所有服务
|
||||
# Planet 重启脚本 - 使用 volume 映射,代码改动自动同步
|
||||
|
||||
set -e
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
cd "$SCRIPT_DIR"
|
||||
|
||||
# 颜色定义
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m'
|
||||
|
||||
echo -e "${BLUE}🔄 重启智能星球计划...${NC}"
|
||||
echo "🔄 重启智能星球计划..."
|
||||
echo ""
|
||||
|
||||
# 停止服务
|
||||
echo -e "${YELLOW}🛑 停止服务...${NC}"
|
||||
# 停止并重建容器(volume 映射会自动同步代码)
|
||||
echo "🛑 停止容器..."
|
||||
docker-compose down
|
||||
|
||||
# 停止后端
|
||||
if pgrep -f "uvicorn.*app.main:app" > /dev/null 2>&1; then
|
||||
pkill -f "uvicorn.*app.main:app" 2>/dev/null || true
|
||||
echo " ✅ 后端已停止"
|
||||
else
|
||||
echo " ℹ️ 后端未运行"
|
||||
fi
|
||||
echo "🚀 启动服务..."
|
||||
docker-compose up -d
|
||||
|
||||
# 停止前端
|
||||
if pgrep -f "vite" > /dev/null 2>&1; then
|
||||
pkill -f "vite" 2>/dev/null || true
|
||||
echo " ✅ 前端已停止"
|
||||
else
|
||||
echo " ℹ️ 前端未运行"
|
||||
fi
|
||||
# 等待服务就绪
|
||||
echo "⏳ 等待服务就绪..."
|
||||
sleep 10
|
||||
|
||||
# 停止 Docker 服务
|
||||
if command -v docker &> /dev/null && docker ps &> /dev/null 2>&1; then
|
||||
if command -v docker-compose &> /dev/null; then
|
||||
docker-compose down > /dev/null 2>&1 || true
|
||||
else
|
||||
docker compose down > /dev/null 2>&1 || true
|
||||
fi
|
||||
echo " ✅ Docker 容器已停止"
|
||||
fi
|
||||
|
||||
# 等待服务完全停止
|
||||
# 验证服务
|
||||
echo ""
|
||||
echo -e "${YELLOW}⏳ 等待进程退出...${NC}"
|
||||
sleep 2
|
||||
|
||||
# 检查端口是否已释放
|
||||
if lsof -i :8000 > /dev/null 2>&1 || netstat -tlnp 2>/dev/null | grep -q ":8000" || ss -tlnp 2>/dev/null | grep -q ":8000"; then
|
||||
echo -e "${YELLOW}⚠️ 端口 8000 仍被占用,强制杀死...${NC}"
|
||||
fuser -k 8000/tcp 2>/dev/null || true
|
||||
sleep 1
|
||||
fi
|
||||
|
||||
if lsof -i :3000 > /dev/null 2>&1 || netstat -tlnp 2>/dev/null | grep -q ":3000" || ss -tlnp 2>/dev/null | grep -q ":3000"; then
|
||||
echo -e "${YELLOW}⚠️ 端口 3000 仍被占用,强制杀死...${NC}"
|
||||
fuser -k 3000/tcp 2>/dev/null || true
|
||||
sleep 1
|
||||
fi
|
||||
echo "📊 服务状态:"
|
||||
docker ps --format "table {{.Names}}\t{{.Status}}"
|
||||
|
||||
echo ""
|
||||
echo -e "${GREEN}✅ 服务已停止${NC}"
|
||||
echo "✅ 完成!"
|
||||
echo " 前端: http://localhost:3000"
|
||||
echo " 后端: http://localhost:8000"
|
||||
echo ""
|
||||
|
||||
# 启动服务
|
||||
echo -e "${BLUE}🚀 启动服务...${NC}"
|
||||
|
||||
# 启动 Docker 服务
|
||||
if command -v docker &> /dev/null && docker ps &> /dev/null 2>&1; then
|
||||
echo -e "${BLUE}🗄️ 启动数据库...${NC}"
|
||||
if command -v docker-compose &> /dev/null; then
|
||||
docker-compose up -d postgres redis > /dev/null 2>&1 || true
|
||||
else
|
||||
docker compose up -d postgres redis > /dev/null 2>&1 || true
|
||||
fi
|
||||
echo -e "${YELLOW}⏳ 等待数据库就绪...${NC}"
|
||||
sleep 5
|
||||
fi
|
||||
|
||||
# 同步 Python 依赖
|
||||
echo -e "${BLUE}🐍 同步 Python 依赖...${NC}"
|
||||
cd "$SCRIPT_DIR/backend"
|
||||
uv sync > /dev/null 2>&1 || true
|
||||
cd "$SCRIPT_DIR"
|
||||
|
||||
# 初始化数据库
|
||||
echo -e "${BLUE}🗃️ 初始化数据库...${NC}"
|
||||
PYTHONPATH="$SCRIPT_DIR/backend" python "$SCRIPT_DIR/backend/scripts/init_admin.py" > /dev/null 2>&1 || true
|
||||
|
||||
# 启动后端
|
||||
echo -e "${BLUE}🔧 启动后端服务...${NC}"
|
||||
export PYTHONPATH="$SCRIPT_DIR/backend"
|
||||
cd "$SCRIPT_DIR/backend"
|
||||
nohup python -m uvicorn app.main:app --host 0.0.0.0 --port 8000 > /tmp/planet_backend.log 2>&1 &
|
||||
BACKEND_PID=$!
|
||||
cd "$SCRIPT_DIR"
|
||||
|
||||
echo -e "${YELLOW}⏳ 等待后端启动...${NC}"
|
||||
sleep 3
|
||||
|
||||
if curl -s http://localhost:8000/health > /dev/null 2>&1; then
|
||||
echo -e "${GREEN}✅ 后端已启动${NC}"
|
||||
else
|
||||
echo -e "${RED}❌ 后端启动失败${NC}"
|
||||
tail -10 /tmp/planet_backend.log
|
||||
fi
|
||||
|
||||
# 启动前端
|
||||
echo -e "${BLUE}🌐 启动前端服务...${NC}"
|
||||
cd "$SCRIPT_DIR/frontend"
|
||||
npm run dev > /tmp/planet_frontend.log 2>&1 &
|
||||
FRONTEND_PID=$!
|
||||
cd "$SCRIPT_DIR"
|
||||
|
||||
sleep 2
|
||||
|
||||
echo ""
|
||||
echo -e "${GREEN}========================================${NC}"
|
||||
echo -e "${GREEN}✅ 重启完成!${NC}"
|
||||
echo -e "${GREEN}========================================${NC}"
|
||||
echo ""
|
||||
echo -e "${BLUE}🌐 访问地址:${NC}"
|
||||
echo " 后端: http://localhost:8000"
|
||||
echo " API文档: http://localhost:8000/docs"
|
||||
echo " 前端: http://localhost:3000"
|
||||
echo ""
|
||||
echo -e "${BLUE}📝 日志:${NC}"
|
||||
echo " tail -f /tmp/planet_backend.log"
|
||||
echo " tail -f /tmp/planet_frontend.log"
|
||||
echo "💡 代码改动会自动同步,无需重启"
|
||||
|
||||
Reference in New Issue
Block a user