gis
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseGIS Skill — Integration Reference
GIS技能 —— 集成参考
Cross-application geospatial skill covering supported CRS, data formats, and
application integration steps for the module (WRK-020).
digitalmodel.gis跨应用地理空间技能,涵盖模块(WRK-020)支持的CRS、数据格式以及应用集成步骤。
digitalmodel.gis1. Supported Coordinate Reference Systems
1. 支持的坐标参考系统
| 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:
python
from digitalmodel.gis.core.crs import get_utm_epsg
epsg = get_utm_epsg(longitude=-1.5, latitude=57.0) # returns "EPSG:32630"| EPSG | 名称 | 使用场景 |
|---|---|---|
| EPSG:4326 | WGS84地理坐标系 | GeoJSON、GPS、BSEE油井数据的默认坐标系 |
| EPSG:3857 | Web墨卡托(伪墨卡托) | 瓦片地图(谷歌地图、OpenStreetMap) |
| EPSG:32601–32660 | UTM 1N–60N区 | 北半球米级精度作业 |
| EPSG:32701–32760 | UTM 1S–60S区 | 南半球米级精度作业 |
| EPSG:4269 | NAD83 | 美国陆上监管数据 |
根据经度自动检测UTM时区:
python
from digitalmodel.gis.core.crs import get_utm_epsg
epsg = get_utm_epsg(longitude=-1.5, latitude=57.0) # returns "EPSG:32630"2. Supported Data Formats
2. 支持的数据格式
| Format | Extensions | Handler | Notes |
|---|---|---|---|
| GeoJSON | .geojson, .json | | No extra deps; RFC 7946 |
| KML / KMZ | .kml, .kmz | | Pure stdlib xml.etree |
| Shapefile | .shp + .dbf + .shx | | Requires geopandas/fiona |
| GeoTIFF | .tif, .tiff | | Requires rasterio |
| CSV + lat/lon | .csv | | Standard pandas read |
| WKT | embedded in .qgs / .csv | | Used in QGIS project files |
| 格式 | 扩展名 | 处理器 | 备注 |
|---|---|---|---|
| GeoJSON | .geojson, .json | | 无需额外依赖;符合RFC 7946标准 |
| KML / KMZ | .kml, .kmz | | 仅使用标准库xml.etree |
| Shapefile | .shp + .dbf + .shx | | 需要依赖geopandas/fiona |
| GeoTIFF | .tif, .tiff | | 需要依赖rasterio |
| CSV + 经纬度 | .csv | | 标准pandas读取 |
| WKT | 嵌入在.qgs / .csv中 | | 用于QGIS项目文件 |
3. Application Integration
3. 应用集成
3.1 QGIS
3.1 QGIS
Generate a ready-to-open project file from a :
.qgsWellLayerpython
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 styleLoad a GeoTIFF bathymetry layer inside QGIS Processing Python console:
python
iface.addRasterLayer("/path/to/bathymetry.tif", "Bathymetry")从生成可直接打开的项目文件:
WellLayer.qgspython
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在QGIS处理Python控制台中加载GeoTIFF水深测量图层:
python
iface.addRasterLayer("/path/to/bathymetry.tif", "Bathymetry")3.2 Blender — Well Markers
3.2 Blender —— 油井标记
Generate a Blender Python script that positions well cylinders in 3D:
python
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")生成Blender Python脚本,在3D场景中放置油井柱体:
python
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
In Blender: Text editor > Open add_wells.py > Run Script
undefinedundefined3.3 Blender — Terrain / Bathymetry Mesh
3.3 Blender —— 地形/水深测量网格
Convert a GeoTIFF to an OBJ mesh that Blender can import directly:
bash
python scripts/gis/geotiff-to-blender.py bathymetry.tif --output terrain.obj将GeoTIFF转换为Blender可直接导入的OBJ网格:
bash
python scripts/gis/geotiff-to-blender.py bathymetry.tif --output terrain.objOptional: subsample to reduce vertex count
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`.python scripts/gis/geotiff-to-blender.py bathymetry.tif --output terrain.obj --subsample 4
在Blender中:**文件 > 导入 > Wavefront (.obj)** —— 选择`terrain.obj`。
默认缩放比例:1米 = 0.001 Blender单位(千米级比例)。可通过`--scale-xy`和`--scale-z`参数覆盖。3.4 QGIS — Import Terrain as CSV Point Cloud
3.4 QGIS —— 将地形作为CSV点云导入
bash
python scripts/gis/geotiff-to-blender.py bathymetry.tif --output points.csvbash
python scripts/gis/geotiff-to-blender.py bathymetry.tif --output points.csvQGIS: Layer > Add Layer > Add Delimited Text Layer > select points.csv
QGIS操作:图层 > 添加图层 > 添加分隔文本图层 > 选择points.csv
Set X=x, Y=y, Z=z, CRS = source CRS of the GeoTIFF
设置X=x、Y=y、Z=z,CRS = GeoTIFF的源CRS
undefinedundefined3.5 worldenergydata.gis Module
3.5 worldenergydata.gis模块
python
undefinedpython
undefinedAccess BSEE well locations with CRS support
访问支持CRS的BSEE油井位置数据
from worldenergydata.bsee import load_wells
wells_df = load_wells() # lat/lon columns in WGS84
---from worldenergydata.bsee import load_wells
wells_df = load_wells() # lat/lon columns in WGS84
---4. Bathymetry Sources
4. 水深测量数据源
| 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 |
| 来源 | 分辨率 | 格式 | 备注 |
|---|---|---|---|
| GEBCO 2023 | 15角秒(约500米) | GeoTIFF | 全球覆盖,可免费下载 |
| GEBCO via GEE | 可配置 | GeoTIFF导出 | 参见google-earth-engine技能 |
| NOAA NCEI | 1角秒(美国沿海区域) | GeoTIFF | ETOPO系列 |
5. digitalmodel.gis Module Map
5. digitalmodel.gis模块结构
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/dashboarddigitalmodel/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/dashboard6. Failure Diagnosis
6. 故障排查
| Error | Cause | Fix |
|---|---|---|
| rasterio absent | |
| Layers in different CRS | |
| OBJ mesh flipped Z in Blender | Depth values negative | Use |
| QGIS .qgs file not opening | QGIS version mismatch | Open via Layer > Add Vector Layer instead |
| Large OBJ causes Blender slowdown | Full-resolution raster | Use |
| 错误 | 原因 | 修复方案 |
|---|---|---|
| 未安装rasterio | |
| 图层使用的CRS不一致 | |
| OBJ mesh flipped Z in Blender | 深度值为负 | 使用 |
| QGIS .qgs file not opening | QGIS版本不匹配 | 改用图层 > 添加矢量图层方式打开 |
| Large OBJ causes Blender slowdown | 全分辨率栅格数据 | 使用 |