关于 gis
gis 是面向跨应用地理空间工作流的技能参考,介绍 digitalmodel.gis 模块。内容涵盖支持的坐标系和格式、空间操作,以及在 QGIS 与 Blender 中使用数据的方法。
主要功能
- 01支持的 CRS 与 UTM 分区检测
- 02GeoJSON、KML、Shapefile、GeoTIFF、CSV 和 WKT
- 03QGIS 项目与样式导出
- 04Blender 井位标记与地形网格
- 05半径、边界框、多边形和最近 N 项查询
- 06水深数据来源与故障排查指引
适用场景
- 01将井位数据转换为 QGIS 项目
- 02为 Blender 准备水深地形
- 03检查坐标参考系兼容性
- 04通过空间查询查找附近要素
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ vamseeachanta/ workspace-hub --skill gis安装后在 Claude Code 中输入/gis确认已加载。
详细介绍
GIS 技能 — 集成参考
跨应用地理空间技能,涵盖 digitalmodel.gis 模块(WRK-020)支持的 CRS、数据格式和应用集成步骤。
1. 支持的坐标参考系统
| EPSG | 名称 | 用例 |
|---|---|---|
| EPSG:4326 | WGS84 地理坐标系 | GeoJSON、GPS、BSEE 井数据的默认设置 |
| EPSG:3857 | Web Mercator(Pseudo-Mercator) | 瓦片地图(Google Maps、OpenStreetMap) |
| EPSG:32601–32660 | UTM 1N–60N 带 | 北半球米级精度作业 |
| EPSG:32701–32760 | UTM 1S–60S 带 | 南半球米级精度作业 |
| EPSG:4269 | NAD83 | 美国陆上监管数据 |
根据经度自动检测 UTM 带:
from digitalmodel.gis.core.crs import get_utm_epsg
epsg = get_utm_epsg(longitude=-1.5, latitude=57.0) # returns "EPSG:32630"
2. 支持的数据格式
| 格式 | 扩展名 | 处理器 | 备注 |
|---|---|---|---|
| GeoJSON | .geojson, .json | io.geojson_handler.GeoJSONHandler | 无需额外依赖;RFC 7946 |
| KML / KMZ | .kml, .kmz | io.kml_handler.KMLHandler | 纯标准库 xml.etree |
| Shapefile | .shp + .dbf + .shx | io.shapefile_handler.ShapefileHandler | 需要 geopandas/fiona |
| GeoTIFF | .tif, .tiff | io.geotiff_handler.GeoTIFFHandler | 需要 rasterio |
| CSV + lat/lon | .csv | layers.feature_layer.FeatureLayer | 使用标准 pandas read |
| WKT | 嵌入在 .qgs / .csv 中 | core.geometry | 用于 QGIS 项目文件 |
3. 应用集成
3.1 QGIS
从 WellLayer 生成可直接打开的 .qgs 项目文件:
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 Processing Python 控制台中加载 GeoTIFF 水深图层:
iface.addRasterLayer("/path/to/bathymetry.tif", "Bathymetry")
3.2 Blender — 井位标记
生成 Blender Python 脚本,在 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 — 地形 / 水深网格
将 GeoTIFF 转换为 Blender 可直接导入的 OBJ 网格:
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
在 Blender 中:File > Import > Wavefront (.obj) — 选择 terrain.obj。
默认比例:1 m = 0.001 个 Blender 单位(km 比例)。使用
--scale-xy 和 --scale-z 覆盖。
3.4 QGIS — 将地形导入为 CSV 点云
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 模块
# Access BSEE well locations with CRS support
from worldenergydata.bsee import load_wells
wells_df = load_wells() # lat/lon columns in WGS84
4. 水深数据来源
| 来源 | 分辨率 | 格式 | 备注 |
|---|---|---|---|
| GEBCO 2023 | 15 角秒(约 500 m) | GeoTIFF | 全球,可免费下载 |
| 通过 GEE 获取 GEBCO | 可配置 | GeoTIFF 导出 | 参见 google-earth-engine 技能 |
| NOAA NCEI | 1 角秒(美国沿海) | GeoTIFF | ETOPO 系列 |
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/dashboard
6. 故障诊断
| 错误 | 原因 | 修复方法 |
|---|---|---|
ImportError: rasterio not installed | 缺少 rasterio | pip install rasterio |
CRS mismatch in spatial join | 图层使用不同的 CRS | gdf.to_crs("EPSG:32631") |
| Blender 中 OBJ 网格 Z 轴翻转 | 深度值为负 | 使用 --scale-z -0.001 进行反转 |
| QGIS 无法打开 .qgs 文件 | QGIS 版本不匹配 | 改用 Layer > Add Vector Layer 打开 |
| 大型 OBJ 导致 Blender 运行缓慢 | 栅格为全分辨率 | 使用 --subsample 4 或更大的值 |
评论
支持 Markdown