geoai 库提供了一套完整的地理空间数据处理工具,其中影像切片(Tile)功能是其核心能力之一。本文档详细介绍 geoai 库中与切片相关的主要方法及其使用场景。
核心切片方法
geoai.export_geotiff_tiles
功能定位:将大型GeoTIFF影像切割成固定大小的瓦片,用于深度学习训练样本生成。
方法签名:
geoai.export_geotiff_tiles( in_raster: str, out_folder: str, in_class_data: str = None, tile_size: int = 512, stride: int = 256, skip_empty_tiles: bool = False, buffer_radius: int = 0, all_touched: bool = True, create_overview: bool = False, apply_augmentation: bool = False, augmentation_count: int = 2, quiet: bool = False)参数说明:
in_raster | |||
out_folder | |||
in_class_data | |||
tile_size | |||
stride | |||
skip_empty_tiles | |||
buffer_radius | |||
all_touched | |||
create_overview | |||
apply_augmentation | |||
augmentation_count | |||
quiet |
返回值:无返回值,直接将瓦片写入输出目录。
输出结构:
out_folder/├── images/ # 影像瓦片目录│ ├── tile_000000.tif│ ├── tile_000001.tif│ └── ...├── labels/ # 标签瓦片目录(当提供in_class_data时)│ ├── tile_000000.tif│ ├── tile_000001.tif│ └── ...├── annotations/ # 标注文件目录(可选)│ ├── tile_000000.xml│ └── ...└── overview.png # 概览图(当create_overview=True时)使用示例:
import geoai# 基础用法:生成训练样本geoai.export_geotiff_tiles( in_raster="./data/image.tif", out_folder="./output", in_class_data="./data/buildings.geojson", tile_size=512, stride=256, skip_empty_tiles=True, apply_augmentation=True, augmentation_count=2)geoai.read_raster_metadata
功能定位:读取栅格影像的元数据信息,为切片前的预处理提供依据。
方法签名:
metadata = geoai.read_raster_metadata(raster_path: str)返回值结构:
driver | ||
width | ||
height | ||
count | ||
crs | ||
transform | ||
bounds | ||
resolution | ||
nodata |
使用示例:
import geoaimetadata = geoai.read_raster_metadata("./data/image.tif")print(f"影像尺寸: {metadata.width} x {metadata.height}")print(f"坐标系: {metadata.crs}")print(f"分辨率: {metadata.resolution}")geoai.get_raster_info
功能定位:获取栅格影像的详细信息,包含统计数据。
方法签名:
info = geoai.get_raster_info(raster_path: str)返回值结构:
{'driver': 'GTiff','width': 1024,'height': 1024,'count': 4,'crs': 'EPSG:3857','resolution': (0.5, 0.5),'bounds': {'left': 120.0,'bottom': 30.0,'right': 121.0,'top': 31.0 },'band_stats': {1: {'min': 0, 'max': 255, 'mean': 128.5, 'std': 50.0},2: {'min': 0, 'max': 255, 'mean': 130.2, 'std': 48.0},3: {'min': 0, 'max': 255, 'mean': 125.8, 'std': 52.0} }}geoai.get_vector_info
功能定位:获取矢量数据的基本信息。
方法签名:
info = geoai.get_vector_info(vector_path: str)返回值结构:
driver | ||
feature_count | ||
crs | ||
geometry_type | ||
columns | ||
bounds |

切片策略与参数选择指南
瓦片尺寸选择
滑窗步长策略

重叠率计算公式:overlap_ratio = 1 - stride / tile_size
数据增强选项
当 apply_augmentation=True 时,支持以下增强方式:
• 水平翻转 (Horizontal Flip) • 垂直翻转 (Vertical Flip) • 旋转 (Rotation) • 亮度调整 (Brightness Adjustment) • 对比度调整 (Contrast Adjustment)
标准训练样本生成
import geoaifrom pathlib import Path# 配置路径BASE_DIR = Path("./data")RASTER_PATH = BASE_DIR / "image.tif"VECTOR_PATH = BASE_DIR / "buildings.geojson"OUTPUT_DIR = BASE_DIR / "training_samples"# 读取元数据metadata = geoai.read_raster_metadata(str(RASTER_PATH))print(f"准备切割影像: {metadata.width}x{metadata.height}")# 生成训练样本geoai.export_geotiff_tiles( in_raster=str(RASTER_PATH), out_folder=str(OUTPUT_DIR), in_class_data=str(VECTOR_PATH), tile_size=512, stride=256, skip_empty_tiles=True, all_touched=True, create_overview=True, apply_augmentation=True, augmentation_count=2, quiet=False)print(f"切片完成,输出目录: {OUTPUT_DIR}")批量处理多个影像
import geoaifrom pathlib import Pathinput_dir = Path("./images")output_dir = Path("./tiles")# 遍历所有tif文件for raster_file in input_dir.glob("*.tif"):print(f"处理: {raster_file.name}")# 创建对应输出目录 tile_dir = output_dir / raster_file.stem tile_dir.mkdir(parents=True, exist_ok=True)# 执行切片(无标签模式) geoai.export_geotiff_tiles( in_raster=str(raster_file), out_folder=str(tile_dir), tile_size=512, stride=512, # 无重叠 skip_empty_tiles=False, create_overview=True )内存优化
1. 分块读取:对于超大影像,geoai内部自动采用分块读取机制 2. 跳过空瓦片:设置 skip_empty_tiles=True减少无效计算3. 合理设置tile_size:避免一次加载过大的瓦片
并行处理
geoai内部已实现多线程并行处理,可通过环境变量控制:
export GEOAI_NUM_THREADS=8 # 设置并行线程数输出格式选择
切片后坐标信息丢失?
原因:输出格式不支持地理信息或未保留元数据。
解决方案:
• 使用GeoTIFF格式输出 • 确保输入影像包含正确的地理参考信息
标签与影像不匹配?
原因:矢量数据与栅格数据坐标系不一致。
解决方案:
# 切片前确保坐标统一import geopandas as gpdgdf = gpd.read_file(vector_path)with rasterio.open(raster_path) as src: raster_crs = src.crsif gdf.crs != raster_crs: gdf = gdf.to_crs(raster_crs) gdf.to_file(aligned_vector_path)内存不足错误?
原因:tile_size设置过大或影像尺寸超出内存限制。
解决方案:
• 减小tile_size(如从1024改为512) • 使用分块处理 • 增加系统内存
geoai 提供了一套完整的影像切片工具链,核心方法包括:
1. export_geotiff_tiles:核心切片方法,支持训练样本生成2. read_raster_metadata:读取栅格元数据3. get_raster_info:获取栅格详细信息(含统计)4. get_vector_info:获取矢量数据信息
合理选择参数(tile_size、stride、数据增强等)可显著提升训练样本质量和模型性能。
夜雨聆风