python-3.x - 将投影栅格保存为变量而不是文件 Python
问题描述
我想重新投影一个栅格并继续处理该重新投影的栅格,而不是从文件中再次加载它。
要投影我使用的栅格gdal
:
# Source
src = gdal.Open(vv_path, gdalconst.GA_ReadOnly)
src_proj = src.GetProjection()
src_geotrans = src.GetGeoTransform()
# We want a section of source that matches this:
match_ds = gdal.Open(sn2_red_path, 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 = os.path.join(sn1_processed_path,'vv.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
aa = gdal.ReprojectImage(src, dst, src_proj, match_proj, gdalconst.GRA_NearestNeighbour)
del dst # Flush
或rasterio
从这里
在这两种情况下,投影栅格都保存到一个文件中,我必须再次加载它才能处理它。是否可以将投影栅格也保存为变量?
解决方案
您可以使用VRT数据集:
src = gdal.Open(“reference.tif”)
dst = gdal.Warp(“warped.vrt”, src, format=“vrt”, dstSRS=“EPSG:3857”)
这样只会VRT
创建一个小文件,您可以dst
在下游处理中使用数据集,此时将实际执行变形。
您甚至可以VRT
在内存中创建自身,因此根本不会将任何内容写入磁盘:
dst = gdal.Warp(“”, src, format=“vrt”, dstSRS=“EPSG:3857”)
如果您的数据集完全适合内存,您可以使用vsimem
虚拟文件系统驱动程序在内存中创建实际的数据集,如果您想在下游的多个功能中使用它,则只需执行一次处理:
dst = gdal.Warp(“/vsimem/result_inmemory.tif”, src, format=“tif”, dstSRS=“EPSG:3857”)
这样处理将立即执行,但随后您可以使用数据集对象将其写入磁盘,然后执行附加处理。
推荐阅读
- laravel - Sendgrid 不在服务器上发送邮件
- python - 如何在 matplotlib 中将 3D 轨迹动画更改为分散版本?
- pandas - 在多列上对熊猫数据框行进行排名
- amazon-web-services - 在 DynamoDB 中设计基于 Dynamo db 数据模型角色的访问控制
- c++ - 即使分配了内存,Memcpy 分段错误
- rest - 在 relativityone 中使用 REST API 获取并显示缓存转换的本机文档?
- html - 如何拉伸 flexbox 以填充整个容器
- scala - 如何规范化火花(scala)中的列中的全角字符
- r - 合并列并按字母顺序排列其内容
- vb.net - 禁用所有按钮的最佳方法,直到在文本框字段中输入密码?