GIS Skill — Integration Reference
Cross-application geospatial skill covering supported CRS, data formats, and application integration steps for the digitalmodel.gis module (WRK-020).
- Supported Coordinate Reference Systems
EPSG Name Use case
EPSG:4326 WGS84 geographic Default for GeoJSON, GPS, BSEE well data
EPSG:3857 Web Mercator (Pseudo-Mercator) Tile maps (Google Maps, OpenStreetMap)
EPSG:32601–32660 UTM Zone 1N–60N Northern hemisphere metre-accurate work
EPSG:32701–32760 UTM Zone 1S–60S Southern hemisphere metre-accurate work
EPSG:4269 NAD83 US onshore regulatory data
Auto-detect UTM zone from longitude:
from digitalmodel.gis.core.crs import get_utm_epsg epsg = get_utm_epsg(longitude=-1.5, latitude=57.0) # returns "EPSG:32630"
- Supported Data Formats
Format Extensions Handler Notes
GeoJSON .geojson, .json io.geojson_handler.GeoJSONHandler
No extra deps; RFC 7946
KML / KMZ .kml, .kmz io.kml_handler.KMLHandler
Pure stdlib xml.etree
Shapefile .shp + .dbf + .shx io.shapefile_handler.ShapefileHandler
Requires geopandas/fiona
GeoTIFF .tif, .tiff io.geotiff_handler.GeoTIFFHandler
Requires rasterio
CSV + lat/lon .csv layers.feature_layer.FeatureLayer
Standard pandas read
WKT embedded in .qgs / .csv core.geometry
Used in QGIS project files
- Application Integration
3.1 QGIS
Generate a ready-to-open .qgs project file from a WellLayer :
from digitalmodel.gis.integrations.qgis_export import QGISExporter from digitalmodel.gis.layers.well_layer import WellLayer
layer = WellLayer.from_csv("wells.csv", lat_col="lat", lon_col="lon") exporter = QGISExporter(layer) exporter.generate_project("wells.qgs") # open in QGIS 3.x exporter.generate_well_qml("wells_style.qml") # well marker style
Load a GeoTIFF bathymetry layer inside QGIS Processing Python console:
iface.addRasterLayer("/path/to/bathymetry.tif", "Bathymetry")
3.2 Blender — Well Markers
Generate a Blender Python script that positions well cylinders in 3D:
from digitalmodel.gis.integrations.blender_export import BlenderExporter from digitalmodel.gis.layers.well_layer import WellLayer
layer = WellLayer.from_csv("wells.csv", lat_col="lat", lon_col="lon") exporter = BlenderExporter(layer) exporter.write_well_script("add_wells.py")
In Blender: Text editor > Open add_wells.py > Run Script
3.3 Blender — Terrain / Bathymetry Mesh
Convert a GeoTIFF to an OBJ mesh that Blender can import directly:
python scripts/gis/geotiff-to-blender.py bathymetry.tif --output terrain.obj
Optional: subsample to reduce vertex count
python scripts/gis/geotiff-to-blender.py bathymetry.tif --output terrain.obj --subsample 4
In Blender: File > Import > Wavefront (.obj) — select terrain.obj .
Scale defaults: 1 m = 0.001 Blender units (km scale). Override with --scale-xy and --scale-z .
3.4 QGIS — Import Terrain as CSV Point Cloud
python scripts/gis/geotiff-to-blender.py bathymetry.tif --output points.csv
QGIS: Layer > Add Layer > Add Delimited Text Layer > select points.csv
Set X=x, Y=y, Z=z, CRS = source CRS of the GeoTIFF
3.5 worldenergydata.gis Module
Access BSEE well locations with CRS support
from worldenergydata.bsee import load_wells wells_df = load_wells() # lat/lon columns in WGS84
- Bathymetry Sources
Source Resolution Format Notes
GEBCO 2023 15 arc-sec (~500 m) GeoTIFF Global, free download
GEBCO via GEE configurable GeoTIFF export See google-earth-engine skill
NOAA NCEI 1 arc-sec (coastal US) GeoTIFF ETOPO series
- digitalmodel.gis Module Map
digitalmodel/gis/ coordinates.py — CoordinatePoint dataclass, batch transforms core/ crs.py — CRS definitions, get_utm_epsg() geometry.py — GeoPoint, GeoBoundingBox, GeoPolygon spatial_query.py — radius, bbox, polygon, nearest-N queries coordinate_transformer.py io/ geojson_handler.py — GeoJSON read/write kml_handler.py — KML/KMZ read/write shapefile_handler.py — Shapefile (optional geopandas) geotiff_handler.py — GeoTIFF read/write/to_xyz (optional rasterio) layers/ feature_layer.py — FeatureLayer (pandas-backed GIS collection) well_layer.py — WellLayer (well-specific subclass) integrations/ blender_export.py — Blender script generator for well markers qgis_export.py — QGIS .qgs project + .qml style generator folium_maps.py — Folium/Leaflet HTML maps google_earth_export.py— Styled KML for Google Earth plotly_maps.py — Plotly mapbox scatter/dashboard
- Failure Diagnosis
Error Cause Fix
ImportError: rasterio not installed
rasterio absent pip install rasterio
CRS mismatch in spatial join
Layers in different CRS gdf.to_crs("EPSG:32631")
OBJ mesh flipped Z in Blender Depth values negative Use --scale-z -0.001 to invert
QGIS .qgs file not opening QGIS version mismatch Open via Layer > Add Vector Layer instead
Large OBJ causes Blender slowdown Full-resolution raster Use --subsample 4 or higher