当前位置: 首页 > 面试题库 >

如何对网格进行投影和重新采样以与GDAL python匹配另一个网格?

仉明知
2023-03-14
问题内容

澄清:我以某种方式忽略了关键方面:不使用os.system或子进程-仅使用python API。

我正在尝试将NOAA
GTX偏移网格的一部分转换为垂直基准面转换,而不是完全遵循在GDAL中使用python进行此操作的方法。我想要一个网格(在本例中为“测深归因网格”,但它可能是一个geotif),并将其用作我想要做的模板。如果我能做到这一点,我感觉它将极大地帮助人们使用此类数据。

这就是我绝对不能正常工作的东西。在生成的目标数据集(dst_ds)上运行gdalinfo时,它与源网格BAG不匹配。

from osgeo import gdal, osr

bag = gdal.Open(bag_filename)
gtx = gdal.Open(gtx_filename)

bag_srs = osr.SpatialReference()
bag_srs.ImportFromWkt(bag.GetProjection())

vrt = gdal.AutoCreateWarpedVRT(gtx, None, bag_srs.ExportToWkt(), gdal.GRA_Bilinear,  0.125)

dst_ds = gdal.GetDriverByName('GTiff').Create(out_filename, bag.RasterXSize, bag.RasterYSize,
                                            1, gdalconst.GDT_Float32)
dst_ds.SetProjection(bag_srs.ExportToWkt())
dst_ds.SetGeoTransform(vrt.GetGeoTransform())

def warp_progress(pct, message, user_data):
  return 1

gdal.ReprojectImage(gtx, dst_ds, None, None, gdal.GRA_NearestNeighbour, 0, 0.125, warp_progress, None)

示例文件(但重叠的两个网格但投影位置不同的两个网格都可以):

  • http://surveys.ngdc.noaa.gov/mgg/NOS/coast/F00001-F02000/F00574/BAG/ F00574_MB_2m_MLLW_2of3.bag
  • http://vdatum.noaa.gov/download/data/VDatum_National.zip MENHMAgome01_8301 / mllw.gtx

命令行等效于我要执行的操作:

gdalwarp -tr 2 -2 -te 369179 4773093 372861 4775259 -of VRT -t_srs EPSG:2960 \
     MENHMAgome01_8301/mllw.gtx  mllw-2960-crop-resample.vrt
gdal_translate mllw-2960-crop-resample.{vrt,tif}

问题答案:

感谢杰米的答案。

#!/usr/bin/env python

from osgeo import gdal, gdalconst

# Source
src_filename = 'MENHMAgome01_8301/mllw.gtx'
src = gdal.Open(src_filename, gdalconst.GA_ReadOnly)
src_proj = src.GetProjection()
src_geotrans = src.GetGeoTransform()

# We want a section of source that matches this:
match_filename = 'F00574_MB_2m_MLLW_2of3.bag'
match_ds = gdal.Open(match_filename, gdalconst.GA_ReadOnly)
match_proj = match_ds.GetProjection()
match_geotrans = match_ds.GetGeoTransform()
wide = match_ds.RasterXSize
high = match_ds.RasterYSize

# Output / destination
dst_filename = 'F00574_MB_2m_MLLW_2of3_mllw_offset.tif'
dst = gdal.GetDriverByName('GTiff').Create(dst_filename, wide, high, 1, gdalconst.GDT_Float32)
dst.SetGeoTransform( match_geotrans )
dst.SetProjection( match_proj)

# Do the work
gdal.ReprojectImage(src, dst, src_proj, match_proj, gdalconst.GRA_Bilinear)

del dst # Flush


 类似资料:
  • 我有一个纹理网格,它有一个特定的三角形列表,这些三角形对应于网格上的面,在运行时使用如下代码重新着色: 它的工作很好,但我原本打算这些脸是一个明亮的蓝色。不幸的是,着色似乎与我在Unity中分配给网格的材质纹理混合在一起。在这里你可以看到纹理上的绿草和看起来相当绿的“蓝”混在一起: 我试过玩灯光,但这似乎不是问题。我得到的网格着色需要使用特定的着色器,所以我为网格分配了着色器。 有没有办法在运行时

  • 问题内容: 如何使用jQuery或纯JavaScript将用户从一个页面重定向到另一页面? 问题答案: 一个不只是简单地使用jQuery进行重定向 jQuery不是必需的,[ ]它将最好模拟HTTP重定向。 比使用更好,因为它不会将原始页面保留在会话历史记录中,这意味着用户不会陷入永无休止的后退按钮惨败中。 如果要模拟某人单击链接,请使用 如果要模拟HTTP重定向,请使用 例如:

  • 问题内容: 在Pandas DataFrame中,我可以使用函数将列值与另一列进行匹配。 例如:假设我们有一个DataFrame: 和另一个DataFrame: 我可以使用的功能相匹配的列值对的列值 例如: 产量: PySpark DataFrame中的等效操作是什么? 上面的代码给我一条错误消息: 问题答案: 这种操作在spark中称为“左半联接”:

  • 当我试图运行我的代码(在底部)时,我得到了下面的错误。 soo是this. this方法适用于配置和win10toos 就我所知,它们是一样的,只是一个更小,在一条线上。 主代码

  • 问题内容: 我对熊猫的温度和辐射有一个时间序列。时间分辨率通常为1分钟。 如何将其降采样为一个小时的分辨率,以计算温度的小时 平均值 和 辐射的小时 总和 ? 问题答案: 使用pandas 0.18,重新采样API发生了变化(请参阅docs)。因此,对于> = 0.18的熊猫,答案是: 旧答案: 我正在回答我的问题,以反映与时间序列相关的变化(所有其他答案均已过时)。 使用> = 0.8的熊猫,答

  • 我在Android编程领域相对来说是个新手,我遇到了一些麻烦。问题是我在MainActivity中定义了一个gridview,它由几个imageViews组成。这些ImageViews有一个onClicklistener,它用另一个gridView打开另一个活动。当在这个网格中选择一个元素(图像)时,我想更新我的MainActivity中的gridview来采用所选择的元素,但实际上我不知道如何实