我的内存中有一个位图,我想将其作为栅格加载到 PostgreSQL。
一个不利的选择是将位图保存到文件,然后使用 raster2pgsql,但正如我们 有多个相机可以高速生成图像,我们不能仅仅为了插入数据库而将它们保存到文件中。
我正在寻找直接从内存加载位图的解决方案。有什么建议吗?
我在 Windows 7 上使用 PostgrSQL 9.2 和 PostGIS2.0。 如果重要的话,图像是纯灰度级的。
最佳答案
假设您不需要转换图像(例如,通过某些 PostGIS 特定的 API),这正是 PostgreSQL 大对象 API 的用途。
您没有提到您正在使用的编程语言,因此很难更详细地说明。假设您使用的是 C,则可以使用 libpq
的 lo_write
等。请参阅 large objects in the manual .
如果这还不能解决问题,您可能必须打开到 raster2pgsql
工具的管道并进行流式写入。并非所有程序都可以处理从管道中读取数据,有些程序需要随机访问文件,在这种情况下,您可能不得不编写临时文件。快速查看 raster2pgsql 文档表明它只是写出 SQL,因此请查看它生成的 SQL 代码。看看是否可以将其作为库链接并在代码中使用它,或者对其进行调整以从管道中读取。您甚至可以创建一个可作为文件访问的共享内存区域(在 UNIX 上)并将其指向该区域。
我怀疑您会使用 GDAL 库来完成 raster2pgsql
在您的应用程序中所做的相同工作。
(顺便说一句,对于 PostGIS 特定的方面,您可能会在 https://gis.stackexchange.com/ 上运气更好)
关于postgresql - 如何将栅格从内存位图(而不是文件)加载到 PostgreSQL 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17065956/