API 文档

V1.0 · 核心几何层

🧊 体素 API

GET /api/v1/voxel/{voxel_id}

查询单个体素的详细信息

GET /api/v1/voxel/116.397_39.908_50_10_20_5
POST /api/v1/voxel/query

范围查询体素,支持多细节层级

{"bounds":{"min_lon":116.39,"max_lon":116.40,"min_lat":39.90,"max_lat":39.91},"lod":0,"limit":1000}
POST /api/v1/voxel/aggregate

体素聚合统计

{"bounds":{"min_lon":116.39,"max_lon":116.40,"min_lat":39.90,"max_lat":39.91},"group_by":"occupancy","metrics":["count","avg"]}

🔲 网格 API

GET /api/v1/grid

按坐标查询网格

GET /api/v1/grid?lon=116.397&lat=39.908&alt=50
GET /api/v1/grid/{grid_id}

网格详情

GET /api/v1/grid/chengdu_gaoxin_grid_104055_30555_0

📍 轨迹 API

GET /api/v1/trajectory/task/{task_id}

按任务查询轨迹

GET /api/v1/trajectory/task/task_001?start_time=2024-01-01&end_time=2024-01-02
GET /api/v1/trajectory/device/{device_id}

按设备查询轨迹

GET /api/v1/trajectory/device/drone_001?time_range=3600
WS /api/v1/trajectory/device/{device_id}/realtime

实时轨迹推送(WebSocket)

wss://hyperaispace.com/api/v1/trajectory/device/drone_001/realtime

🧠 语义 API

POST /api/v1/semantic/search

语义搜索

{"label":"building","bounds":{"min_lon":116.39,"max_lon":116.40,"min_lat":39.90,"max_lat":39.91},"min_confidence":0.8}

🗺️ 地图服务

GET /api/v1/map/tile/{z}/{x}/{y}.pbf

矢量瓦片

GET /api/v1/map/tile/12/1234/5678.pbf
POST /api/v1/map/update

增量地图更新

{"source_id":"drone_001","voxels":[{"lon":116.397,"lat":39.908,"alt":50,"occupancy":0.5,"label":"building"}]}

🏠 室内导航

GET /api/v1/indoor/building/{building_id}

获取建筑室内地图

GET /api/v1/indoor/building/shopping_mall_001
POST /api/v1/indoor/route

室内路径规划

{"start":{"lon":116.397,"lat":39.908,"floor":1},"end":{"poi_id":"starbucks_001"}}
.try-note { font-size:0.78rem; color:#94a3b8; margin:6px 0; line-height:1.6; } .try-url { display:flex; align-items:center; gap:6px; margin:6px 0; } .try-url .m { font-size: 0.75rem; font-weight:700; color:#a78bfa; } .url-input { flex:1; background:rgba(0,0,0,0.4); border:1px solid rgba(255,255,255,0.1); border-radius:6px; color:var(--text); padding:6px 10px; font-size:0.78rem; font-family:monospace; min-width:0; } .ws-snippet { background:rgba(0,0,0,0.4); border-radius:6px; padding:8px 10px; font-size:0.75rem; overflow-x:auto; } .try-area .result { white-space:pre-wrap; word-break:break-word; } .send-btn:disabled { opacity:0.6; cursor:default; } .try-area .result.ok::before { content:'成功'; font-weight:700; margin-right:6px; } .try-area .result.err::before { content:'失败'; font-weight:700; margin-right:6px; }