尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
A web-based 3D lunar terrain visualization and rover mission route-planning
tool built with Three.js, using a high-resolution
Digital Elevation Model (DEM) of Nobile Rim 2, one of NASA's Artemis III
candidate landing regions. Browse the terrain in real time, query the
elevation at any coordinate, plan a rover route, and analyze slope and
hazardous sections along the way.檢視完整 README ↗A web-based 3D lunar terrain visualization and rover mission route-planning tool built with Three.js, using a high-resolution Digital Elevation Model (DEM) of Nobile Rim 2, one of NASA's Artemis III candidate landing regions. Browse the terrain in real time, query the elevation at any coordinate, plan a rover route, and analyze slope and hazardous sections along the way.
A key), both labeled X/Y/Z and rotated to
show the Moon's global body-fixed reference frame (MOON_ME: Z = mean
rotational pole, X = toward the prime meridian, Y completes a right-handed
system) rather than the scene's local grid axes or a local compassDelete to remove it; you can also drag directly on the route's white
line to insert a new point exactly where you drop it, without selecting
anything firstCtrl+Z, up to 50 steps back| Item | Description |
|---|---|
| Terrain DEM | Nobile Rim 2 (Artemis III candidate landing region, site code DM2), a ~10 km × 10 km mission-area subset, 5 m/pixel, 2000×2000 grid, South Polar Stereographic projection (MOON_ME/DE421 reference frame) |
| Elevation range | approx. 303 m – 1647 m |
| DEM origin | NASA GSFC PGDA — Barker, M. K., et al., 2021, Planetary and Space Science, Vol. 203, 105119 (DOI: 10.1016/j.pss.2020.105119), pure LOLA laser-altimetry data |
| Moon overview texture | NASA CGI Moon Kit (December 2025 color + elevation maps), credit: NASA's Scientific Visualization Studio |
The source GeoTIFF DEM is converted by QGISDEM.py into the files this
project actually loads: public/heightmap_float32.bin (float32 elevation
grid) and public/heightmap_metadata.json (coordinate transform, extent,
and other metadata).
For the full data-source explanation, how to obtain other candidate
landing regions, data-quality/limitations notes, and licensing, see
DATA_SOURCES.md.
| Document | Contents |
|---|---|
DATA_SOURCES.md | The verified source and citation for the terrain data, how to obtain other candidate landing regions, data-quality/limitations notes, licensing |
TECHNICAL_OVERVIEW.md | Code and logic overview: project architecture, data pipeline, DEM cleaning algorithm, coordinate-transform formulas, route-safety-analysis logic, validation methodology |
QGISDEM.py, offline DEM pre-processing; requires rasterio,
numpy, scipy)npm install
npm run dev
Once started, the terminal prints a local URL (default
http://localhost:5173) — open it in a browser.
Other commands:
npm run build # Build for production (output to dist/)
npm run preview # Preview the production build
The build uses relative asset paths (base: "./" in vite.config.js), so
one build works at a site root or under any subpath (e.g. /terrain/).
Copy the entire contents of dist/ — index.html, assets/,
heightmap_float32.bin, heightmap_metadata.json and moon/ — into the
directory the site is served from. The DEM and texture files are resolved
relative to the page, so they cannot be left at the server root while the
app itself is served from a subpath.
DATA_SOURCES.md has the
full list of available sites and download steps)INPUT_DEM path in QGISDEM.pypython QGISDEM.py — it writes heightmap_float32.bin and
heightmap_metadata.json into public/| Action | Description |
|---|---|
| Left-click drag | Rotate the view (full 360°, including underneath the terrain) |
| Mouse wheel | Zoom |
| Right-click drag | Pan |
| Click the terrain | First click sets the start point; each click after that adds a waypoint in sequence; press R to clear the route and start over |
| Click a waypoint flag | Select/deselect that waypoint |
| Drag a waypoint flag | Move that waypoint's position |
| Click the terrain after selecting a waypoint | Insert a new waypoint after it |
| Drag the route's white line | Insert a new waypoint where you drop it |
Press Delete after selecting a waypoint | Remove that waypoint |
| Key | Function |
|---|---|
G | Show/hide the grid |
A | Show/hide the coordinate axes |
S | Show/hide the slope layer |
E | Show/hide the elevation-band layer |
R | Clear the current route |
Ctrl+Z | Undo the last waypoint change |
Delete / Backspace | Remove the selected waypoint |
Esc | Deselect the selected waypoint |
U | Show/hide the whole interface |
[ / ] | Shrink/enlarge the interface |
├── index.html # Entry point
├── src/
│ ├── main.js # Main program: scene setup, DEM loading,
│ │ # terrain picking, route planning/analysis
│ │ # (incl. undo, drag-to-insert), animation loop
│ ├── dem-cleaning.js # DEM elevation cleaning (pure functions)
│ ├── coordinate-transforms.js # Projected/local/geographic coordinate math
│ ├── loading-overlay.js # Full-screen loading overlay (with download %)
│ ├── view-gizmo.js # 3D direction gizmo, global MOON_ME frame
│ ├── ui-core.js # Shared panel UI (drag/resize, bilingual text, interface scaling)
│ ├── moon-overview.js # Moon overview inset
│ ├── markers.js # Marker (flag/dot) geometry construction utilities
│ └── utils.js # Shared formatting/validation helper functions
├── public/
│ ├── heightmap_float32.bin # Terrain elevation data
│ ├── heightmap_metadata.json # Terrain metadata
│ └── moon/ # Moon overview textures
├── QGISDEM.py # GeoTIFF DEM -> project binary format conversion script
├── DATA_SOURCES.md # Data source and acquisition guide
├── TECHNICAL_OVERVIEW.md # Code and logic technical overview
└── package.json