Python 2.7 使用gdal在S3中保存图像
我正在进行一个项目,需要使用Gdal python库将图像保存到S3。 更具体地说,我收到一个表示该图像的np数组,我想将其发送到我拥有的S3存储桶 我该怎么做?我是一个安静的新手,在格达尔的网站上找不到答案 我们将不胜感激 您有两个选择 我假设您已经在您的机器上设置了AWS凭据,因为boto3正在使用它。如果不是,我认为这超出了这个问题的范围 最简单的方法是将数据集保存到磁盘上的文件中,然后将其上载 我假设磁盘上没有数据集?如果数据集中已有tif文件,则可以忽略createcopy部分Python 2.7 使用gdal在S3中保存图像,python-2.7,amazon-s3,gdal,Python 2.7,Amazon S3,Gdal,我正在进行一个项目,需要使用Gdal python库将图像保存到S3。 更具体地说,我收到一个表示该图像的np数组,我想将其发送到我拥有的S3存储桶 我该怎么做?我是一个安静的新手,在格达尔的网站上找不到答案 我们将不胜感激 您有两个选择 我假设您已经在您的机器上设置了AWS凭据,因为boto3正在使用它。如果不是,我认为这超出了这个问题的范围 最简单的方法是将数据集保存到磁盘上的文件中,然后将其上载 我假设磁盘上没有数据集?如果数据集中已有tif文件,则可以忽略createcopy部分 imp
import boto3
# If you only have your dataset in memory, save your dataset in a tif file on disk
driver = gdal.GetDriverByName('GTiff')
driver.CreateCopy('path_to_tif_file.tif', your_dataset)
s3 = boto3.client('s3')
s3.upload_file('path_to_tif_file.tif', 'bucket_name', 'path_on_s3.tif')
如果您不想将tif文件保存在磁盘上
您还可以将数据集直接上载到S3,不过这稍微复杂一些
import boto3
def put_tif_from_gdal_mem_dataset(key, dataset, bucket_name):
# Load the dataset into the virtual filesystem
temp_name = '/vsimem/current.tif'
tiff_driver = gdal.GetDriverByName('GTiff')
tiff_driver.CreateCopy(temp_name, dataset)
# Read the raw data from the virtual filesystem
f = gdal.VSIFOpenL(temp_name, 'rb')
gdal.VSIFSeekL(f, 0, 2) # seek to end
size = gdal.VSIFTellL(f)
gdal.VSIFSeekL(f, 0, 0) # seek to beginning
data = gdal.VSIFReadL(1, size, f)
gdal.VSIFCloseL(f)
# Upload the raw data to s3
s3.put_object(Key=key, Bucket=bucket_name, Body=data, ContentLength=size)
gdal.Unlink(temp_name)
put_tif_from_gdal_mem_dataset('path_on_s3.tif', your_dataset, 'bucket_name')
所以你需要它成为GeoTiff,或者为什么你必须使用GDAL来完成这个任务?如果它只是一个numpy数组,您还可以使用一些更简单的图像库来保存它?或者是你需要保存到s3的GDAL数据集?我需要保存的是GDAL数据集我正试图用MRF格式做类似的事情,但遇到了错误。表示错误6:MRF PNG不支持数据类型。不过,我可以使用tif使此工作流正常工作。有什么想法吗?