我在內存中有一個位圖,我想將它作爲柵格加載到PostgreSQL中。如何從內存中的位圖(而不是從文件中)將光柵加載到PostgreSQL中
一個不利的選擇是將位圖保存到文件中,然後使用raster2pgsql,但由於我們的 有幾個以高速生成圖像的相機,我們不能將它們保存到文件中以便插入數據庫。
我正在尋找一個解決方案,直接從內存中加載位圖。有什麼建議麼?
我在Windows 7上使用PostGIS2.0使用PostgrSQL 9.2。 圖像是純灰色級別,如果它很重要。
我在內存中有一個位圖,我想將它作爲柵格加載到PostgreSQL中。如何從內存中的位圖(而不是從文件中)將光柵加載到PostgreSQL中
一個不利的選擇是將位圖保存到文件中,然後使用raster2pgsql,但由於我們的 有幾個以高速生成圖像的相機,我們不能將它們保存到文件中以便插入數據庫。
我正在尋找一個解決方案,直接從內存中加載位圖。有什麼建議麼?
我在Windows 7上使用PostGIS2.0使用PostgrSQL 9.2。 圖像是純灰色級別,如果它很重要。
假設您不需要轉換圖像(比如說,通過一些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/更多的運氣)
感謝您的回覆。我正在用C++編寫(Visual Studio 2010,Windows 7)。正如答覆中所假定的,不需要轉換圖像,但我需要定義其位置和SRID。使用libpq的lo_write時,我不知道如何完成這個任務。我認爲應該有這樣的工作。我將研究raster2pgsql代碼。生成的SQL從文件讀取數據,所以它不好。 –
您是否嘗試過的文件名「 - 」與raster2pgsql和管道輸出呢?順便說一句 - 如果你沒有磁盤I/O來保存到一個平面文件,那麼你不太可能在保存數據庫並且隨後查詢它的時候有很多樂趣。 –