我正在使用ruby1.9 中的GDAL 1.7.1 来生成 GeoTIFF 文件。在本教程中,他们建议使用 GDALClose() 关闭数据集并将任何剩余内容刷新到文件系统。同样的情况也发生在数据集的析构函数中。问题是 ruby 绑定依赖于这种析构机制来关闭数据集,我需要文件的结果已经在生成它的过程中。由于 ruby 是垃圾收集的,因此如果不退出 ruby 进程,我似乎无法可靠地关闭我的文件。现在我修补了我的 GDAL 版本以支持 GDALClose 方法,但这似乎不是一个好的长期解决方案。
require 'gdal/gdal'
[...]
# open the driver for geotiff format
driver = Gdal::Gdal.get_driver_by_name('GTiff')
# create a new file
target_map = driver.create(output_path,
xsize,
ysize, 3,
Gdal::Gdalconst::GDT_UINT16, ["PHOTOMETRIC=RGB"])
# write band data
3.times do |i|
band = target_map.band(i + 1)
target_map.write_band(i + 1, mapped_data)
end
# now I would like to use the file in output_path, but at this point
# large parts of the data still resides in memory it seems until
# target_map is destroyed
file = File.open( output_path, "r" )
[...]
ruby 或 swig 中是否有一些东西可以强制调用析构函数,我可能忽略了?