3-D bedrock depth mapping from HVSR and borehole data.
Bedrock Mapping is a PyQt5 desktop application (and library) for interpolating bedrock topography from Horizontal-to-Vertical Spectral Ratio (HVSR) measurements and geotechnical borehole logs. It is part of the HV Analyze Pro suite and is accessible via Tools → 3-D Bedrock Mapping in the main application.
| Category | Capabilities |
|---|---|
| Data Input | Load HVSR stations (frequency → depth) and borehole CSV files; drag-and-drop support |
| Interpolation | IDW, Ordinary Kriging, RBF, Natural Neighbor — fully configurable |
| Map View | Interactive Folium web-map with station/borehole markers and contour overlays |
| 2-D View | Cross-section and contour plots via matplotlib |
| 3-D View | Mesh visualisation with Plotly and PyVista; layer toggling and opacity control |
| Google Earth Export | KML / KMZ output with per-layer contours, legends, and colour ramps |
| Other Exports | CSV tables, PNG / SVG images, COLLADA 3-D meshes |
| Settings | Global Settings dialog — units, colour maps, contour intervals, opacity per layer |
| Layer Panel | Collapsible panel with per-layer visibility, legends, and settings |
The package is already bundled inside the HV Analyze Pro application. No separate installation is needed.
# Clone the repository
git clone https://github.com/your-org/bedrock-mapping.git
cd bedrock-mapping
# Create a virtual environment and install
python -m venv .venv
.venv\Scripts\activate # Windows
# source .venv/bin/activate # Linux / macOS
pip install -e ".[gui,dev]"| Package | Purpose |
|---|---|
| numpy, scipy, pandas | Numerical computing and data handling |
| matplotlib | 2-D plotting |
| plotly | Interactive 3-D visualisation |
| pyvista | 3-D mesh rendering |
| folium | Interactive web mapping |
| pykrige | Kriging interpolation |
| pyproj | Coordinate-system transforms |
| shapely | Geometric boundary operations |
| Pillow | Image processing |
| PyQt5 (optional) | GUI framework |
from bedrock_mapping import BedrockMappingWindow
# Launch as a standalone window
from PyQt5.QtWidgets import QApplication
import sys
app = QApplication(sys.argv)
window = BedrockMappingWindow()
window.show()
sys.exit(app.exec_())bedrock_mapping/
├── __init__.py # Package entry — exports BedrockMappingWindow
├── bedrock_window.py # Main application window
├── state.py # Centralised application state
├── core/ # Computation & data models
│ ├── interpolation.py # IDW, Kriging, RBF, Natural Neighbor
│ ├── bedrock.py # Depth-to-bedrock calculations
│ ├── boundaries.py # Boundary detection
│ ├── visualization_2d.py # 2-D cross-section helpers
│ ├── models/ # HVSRStation, Borehole, StationCollection
│ ├── io/ # KML/KMZ readers & writers
│ └── visualization/ # 3-D mesh, COLLADA export, plotter
├── widgets/ # PyQt5 UI components
│ ├── data_loader.py # Data import widget
│ ├── map_widget.py # Folium map integration
│ ├── view_2d.py # Matplotlib 2-D view
│ ├── view_3d_*.py # 3-D Plotly / matplotlib views
│ ├── layer_panel.py # Collapsible layer visibility
│ ├── export_widget.py # Export orchestrator
│ └── export_map_modules/ # Modular GE / CSV / image builders
└── utils/ # Coordinate helpers, bridges
This project is licensed under the GNU General Public License v3.0. See LICENSE for the full text.