PDAL 信息“request_payer”

问题描述 投票:0回答:1

也许我太笨了,但是是否可以在对 s3 的 pdal 信息调用中添加“request_payer”?

例如:

此地址位于 AWS 上的“request_payer”防火墙后面:

s3://usgs-lidar/Projects/CA_CarrHirzDeltaFires_2019_B19/CA_CarrHirzDeltaFires_1_2019/LAZ/USGS_LPC_CA_CarrHirzDeltaFires_2019_B19_10TDK0479244992.laz

理想情况下,我想运行下面的命令并获得摘要结果:

pdal info --summary s3://usgs-lidar/Projects/CA_CarrHirzDeltaFires_2019_B19/CA_CarrHirzDeltaFires_1_2019/LAZ/USGS_LPC_CA_CarrHirzDeltaFires_2019_B19_10TDK0479244992.laz

我只是不知道如何告诉

pdal info

我正在尝试通过 Ubuntu 命令行执行此操作;然而,如果有人知道如何通过 python 做到这一点,那也将不胜感激

我尝试将

AWS_REQUEST_PAYER=requester
设置为环境变量,但我的印象是 AWS S3 无法将
AWS_REQUEST_PAYER
识别为有效的变量。

AWS_REQUEST_PAYER=requester pdal info --summary s3://usgs-lidar/Projects/CA_CarrHirzDeltaFires_2019_B19/CA_CarrHirzDeltaFires_1_2019/LAZ/USGS_LPC_CA_CarrHirzDeltaFires_2019_B19_10TDK0479244992.laz

我还探索了

boto3
和可能的替代方案,但我不确定它会有什么帮助。

我对一段不需要付费请求的数据进行了测试

pdal info --summary s3://usgs-lidar/Projects/CA_CarrHirzDeltaFires_2019_B19/CA_CarrHirzDeltaFires_1_2019/LAZ/USGS_LPC_CA_CarrHirzDeltaFires_2019_B19_10TDK0479244992.laz
,得到了预期的结果。

amazon-s3 gis geospatial point-clouds pdal
1个回答
0
投票

上述的目标是仅从 S3 上的点云读取

metadata
信息。我想要读取的数据位于
request-payer
桶中。我需要执行此操作 40 万次以上,并且我想避免仅仅为了元数据而下载整个文件的需要。我的错误是假设对 S3 的
pdal info
调用只会检索
metadata
;但是,由于 LAZ 上的结构,我现在认为 PDAL 需要此请求的整个文件。这否定了仅针对标头信息对 S3 的“快速”调用。

解决方法

我降低了对可以轻松从点云标题中提取的信息的期望,而是专注于获取范围和点数。这样做时,我只需要文件中的前 10KB 数据。这允许我执行 0-10000 字节的范围请求并使用任意数量的工具,

s3fs, boto3, or awscli
进行操作。

虽然不漂亮,但能满足我的需求

  1. 下载前 10kb
  2. 节省懒惰
  3. 使用
    laspy
    解析标头以获取点数和范围

类似:

part_laz = s3.get_object(Bucket=BUCKET, Key=KEY, RequestPayer="requester", Range="bytes=0-10000")
body = part_laz["Body"].read()
with open(part_laz_file, "wb") as f:
     f.write(body)            
    
with laspy.open(part_laz_file) as plaz:  
     header = plaz.header
© www.soinside.com 2019 - 2024. All rights reserved.