【问题标题】:Generating Elevation Profile生成高程剖面
【发布时间】:2019-08-21 02:12:37
【问题描述】:

方法

我有一个点数组 [[lon1, lat1], [lon2, lat2], ..., [lonN, latN]]。我正在遍历这些点并在每个点上生成高程:

for point in points:
    ...
    alt = ds_band.ReadAsArray(px, py, 1, 1)
    # push the alt to an array

在哪里, ds_band 是栅格波段 px 是 x_offset py 是 y_offset

问题

小 DSM 文件(~80 MB)与大 DSM 文件(~5 GB)

从小的 DSM 文件中获取海拔信息相当快。但是,从大型 DSM 文件中获取海拔信息需要更长的时间。 对于大约相同数量的点 (33370),在小型 DSM 文件中需要 1.983694553 秒。但在大型 DSM 文件中,需要 9.140556812 秒。

时间仅用于获取海拔高度。它不包括打开 DSM 文件等其他操作。

问题

有没有比我现在做的更好的方法来获取多个点的高度?有没有办法优化 ReadAsArray?

附: Python/GDAL 的新手。谢谢!

【问题讨论】:

  • 我不介意等待 10 秒加载。但也许你把它矢量化了。
  • @FChm 我也不介意,但客户会。 :D。通过矢量化你的意思是矢量化光栅文件?你能详细说明吗?对不起,这个领域的新手。还在学习中
  • 9.34 秒包括打开文件,还是仅仅获取海拔?取决于该解决方案可能没有优化 ReadAsArray。
  • 嗨@lusitanica,9.34 秒包括打开文件的时间和生成积分的时间。但是这些时间非常小,如果我们只计算获取海拔的时间,那么它大约是 9.14 秒。道歉。我应该在问题中指定这一点。将更新问题。

标签: python profile gdal elevation


【解决方案1】:

除了确保您的输入文件易于处理之外,您无能为力。

大多数地理空间格式都没有针对随机访问进行优化。

如果您需要快速随机访问:

  • 确保您使用的是未压缩的输入文件 - 大多数格式都有某种形式(最终是可选的)压缩,查看 GDAL 驱动程序页面以获取有关如何禁用文件格式压缩的信息,未压缩的 GeoTIFF 是一个非常好的选择这个
  • 如果您的点往往靠得很近,请确保输入文件是平铺的并且它们适合一个平铺
  • 如果您总是一遍又一遍地使用同一个文件,您可以使用vmtouch 将其锁定在内存中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-28
    • 2021-02-16
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    • 2012-04-06
    相关资源
    最近更新 更多