0

我想知道我是否可以在 python 中将 srtm dem 数据(.tif)切割成更小的部分。

我们知道我们可以通过

# importing package
from osgeo import gdal

# load tiff data
dataset=gdal.Open("srtm_input.tif")

# transformation data
im_geotrans = dataset.GetGeoTransform()

# calcualte boundaries
minx = im_geotrans[0]
miny = im_geotrans[3] + im_width*im_geotrans[4] + im_height*im_geotrans[5]
maxx = im_geotrans[0] + im_width*im_geotrans[1] + im_height*im_geotrans[2]
maxy = im_geotrans[3]

,minx和将给出经度miny和纬度的边界。maxxmaxy

minx我的问题是:如果我们以,minymaxxand的形式提供四个边界maxy(即经度和纬度),我可以使用 osgeo 来切割 dem 数据吗?

我可能没有清楚地解释这个问题,所以我在这里添加一张图片。

在此处输入图像描述

如果我已经拥有美国以下地区的 DEM 数据,并且我想获得具有精确经度和纬度边界的红色阴影部分(红线)。我可以设法做到这一点osgeo.gdal吗?

4

1 回答 1

1

是的,你可以很容易地做到这一点。唯一的要求是在整个过程中保持坐标系一致。(例如,您的边界坐标应该与您的 srtm 数据集在同一坐标系中)您可以使用 gdal translate

我也举了一个使用 GeoPandas 来获取边界坐标的例子

from osgeo import gdal
import geopandas as gpd

# e.g. srtm.tif coordinates epsg:4326
dataset = gdal.Open("srtm_input.tif")

# path to where you want the clipped raster
outputSrtm = "path/to/your/clipped/srtm.tif"

# e.g. shapefile.shp coordinates epsg:4326
minx, miny, maxx, maxy = gpd.read_file("path/to/shapefile.shp").unary_union.bounds

ds = gdal.Translate(outputSrtm , dataset, 
                    projWin = [minx, maxy,
                               maxx, miny]) # OR [ulx, uly, lrx, lry]
ds = None

于 2021-02-11T15:01:15.747 回答