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