You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python裁剪TIFF文件:基于多边形坐标的技术求助

TIFF文件按GeoJSON多边形裁剪的实现方案

现有一份TIFF文件,需要根据给定的GeoJSON格式多边形坐标对其进行裁剪。之前找到的代码仅能实现固定尺寸的分块裁剪,无法满足按自定义多边形裁剪的需求,以下是具体的解决方案:

示例GeoJSON数据:

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "properties": {},
      "geometry": {
        "coordinates": [
          [
            [
              26.323586194745644,
              51.5136424962856
            ],
            [
              26.318436259612497,
              51.51043743329282
            ],
            [
              26.32558894729766,
              51.50830059935572
            ],
            [
              26.333599957503935,
              51.51168387347343
            ],
            [
              26.323586194745644,
              51.5136424962856
            ]
          ]
        ],
        "type": "Polygon"
      }
    }
  ]
}

实现思路

使用rasterio的栅格掩膜(mask)功能,结合geopandas读取GeoJSON中的多边形几何信息,直接对TIFF文件进行裁剪,同时保留原文件的投影、数据类型等元数据。

步骤与代码

1. 安装依赖库

确保已安装所需库:

pip install rasterio geopandas

2. 完整裁剪代码

import rasterio
from rasterio.mask import mask
import geopandas as gpd
from shapely.geometry import mapping

# 输入文件路径
tiff_path = "images/B12.tiff"
geojson_path = "你的GeoJSON文件路径.json"  # 也可直接使用内存中的GeoJSON字符串
output_path = "result/cropped_B12.tif"

# 读取GeoJSON中的多边形
gdf = gpd.read_file(geojson_path)
# 获取第一个多边形的几何信息(多多边形可遍历features批量处理)
geometries = [mapping(gdf.iloc[0]['geometry'])]

# 读取TIFF文件并执行裁剪
with rasterio.open(tiff_path) as src:
    # 强制坐标系一致,避免裁剪偏移
    if gdf.crs != src.crs:
        gdf = gdf.to_crs(src.crs)
        geometries = [mapping(gdf.iloc[0]['geometry'])]
    
    # 裁剪并自动适配多边形边界范围
    out_image, out_transform = mask(src, geometries, crop=True)
    # 更新元数据为裁剪后的尺寸与变换参数
    out_meta = src.meta.copy()
    out_meta.update({
        "height": out_image.shape[1],
        "width": out_image.shape[2],
        "transform": out_transform
    })

    # 保存裁剪结果
    with rasterio.open(output_path, "w", **out_meta) as dest:
        dest.write(out_image)

3. 关键说明

  • 坐标系一致性:必须保证TIFF和GeoJSON的坐标系(CRS)相同,否则裁剪结果会出现偏移,代码中已加入自动转换逻辑。
  • 多多边形处理:如果GeoJSON包含多个多边形,只需遍历gdf中的每个feature,将几何信息依次加入geometries列表即可。
  • 原代码说明:你之前找到的代码是将TIFF分割为固定尺寸的瓦片,并非按自定义多边形裁剪,因此无法满足需求。

内容的提问来源于stack exchange,提问作者Tip-Rok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 08:00:56