尚未检测到更新。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