[postgis-users] A PostGIS-Raster data proposal

Mario Servin mservin at gmail.com
Tue Oct 24 14:06:05 PDT 2006


Hi,
I also saw many times this kind of posts, and I think your comments of today
are for the first time a positive contribution. As a matter of fact I never
thought a raster in the way you describe here, but now I discover that in
the past I would love to manage my scanned maps in this way!!. Also I recall
 that I used to get the number 2 point form your post but using ECW
(Encapsulated Compressed Wavelet)  and an API provided by ERMapper (I think
it was free). Now I have to check but maybe ERMapper also have something for
JPG2000. Is it bad idea to use ECW format?.

Mario Servin

On 10/24/06, Marshall, Steve <smarshall at wsi.com> wrote:
>
>  Over the past several months, I've seen a number of postings regarding
> support in PostGIS for raster data.  The email threads tend to look like
> this:
> ---
> Poster:
> I'd like to have support for raster data in PostGIS.
>
> Responder:
> If you are just going to put the whole image in the database, then take
> the complete image back out, what's the point.  Why do you think storing in
> the RDB would be better than managing raster data in files?
>
> Poster:
> I would not have to manage the interactions between the RDB and a
> file-based database, the images would follow transactional semantics, and
> the raster data would be network accessible.  Additionally, I could use
> PostGIS spatial queries to relate vector data to raster data, and maybe even
> write some additional raster manipulation functions, all of which would be
> built into the database.
>
> Responder:
> That stuff sounds neat, but the performance issues are unworkable.
> Performance with large images will be terrible if we use anything other than
> flat files.
> ---
> Generally, the debate ends here.  This time I'd like to see if the
> conversation could go in another direction.
>
> I think the "what's the point" response is basically valid for a naive
> implementation of images within a RDB.  If you are going to treat an image
> as a blob that can be extracted only in the same form that it was inserted,
> there is really not much point in using relational storage.  The raster data
> will need to be read into program memory buffers in one big chunk.  For
> large images, the data will likely need to be written into a temporary file
> so it can be incrementally processed using file seeks.  In this case, you'd
> be better off having the data in a file in the first place.
>
> However, if you support multiple modes of extraction, then the relational
> model really starts to become compelling.  For example, I could see
> extracting an image that is a subsector of the complete image (i.e. a
> smaller image that covers a smaller geographic region).  One could also
> imagine extracting a low-resolution version of the image for "zoomed-out"
> display.  Low-res images would cover the same geographic area, but with
> fewer pixels, so less processing for applications.  By extracting image
> subsets, large image processing could be done straight from the database,
> without bloating application memory or using an intermediate temporary file.
>
> The ability to do both resolution and sector types of subsetting are
> well-supported by the JPEG2000 image format.  In fact, these types of
> operations were some of the drivers behind the JPEG2000 design.  Given that
> JPEG2000 compresses well and is an open standard, it seems like a good
> format for storing raster data.  So is there some way to store JPEG2000 data
> in an intelligent way within a relational database?
>
> Essentially, I think you could store JPEG2000 in a database by defining a
> new data type (e.g. pgraster) that could hold the image data in JPEG2000
> format.  The data type might also populate some derived data when the object
> is written by interpreting the JPEG2000, such as a PostGIS GEOMETRY object
> to represent the bounding box of the raster.  This derived data would allow
> more optimal responses to spatial queries, but overall would not be
> mandatory to the implementation.  However, it would be mandatory to define a
> set of SQL functions that take a pgraster argument to allow one to extract
> different subsets of the JPEG2000 data.
>
> In terms of implementation, I think the pgraster implementation would
> require the following:
>
> 1. The underlying database storage would allow random access into the
> image data.
> 2. A fairly sophisticated JPEG2000 codec would need to be linked into the
> database server, so that different subsets of the data could be accessed.
> 3. The JPEG2000 codec would need to be integrated with the RDB storage so
> that one could use standard codec functions with a RDB storage model.
>
> I think #1 could be achieved by making the pgraster type "toastable", and
> using a PostgreSQL TOAST table for the underlying storage.  The data would
> not use TOAST compression, since the image should already be
> well-compressed.  We could use the internal PostgreSQL function
> heap_tuple_untoast_attr_slice() to extract subsets of the toasted data, so
> we do not need to detoast the entire image during processing.  Toast does
> not provide an API for a similar kind of seeking during writes, but I think
> it's the seeking on reads that will be the most significant to performance.
>
> I think #2 is potentially more problematic.  The publicly available
> JPEG2000 codecs do not seem to have the interfaces needed for extraction of
> parts of a JPEG2000 image.  The JasPer library only provides the encode and
> decode functions that produce or accept a jas_image_t type; it doesn't have
> any of partial extraction capabilities.  The Open JPEG codec is a bit
> tougher to get a handle on, but it also appears to only allow translation
> between an image type and a codestream.
>
> The code that really seems well-adapted to this problem is the Kakadu
> package written by David Taubman, one of the originators of JPEG 2000.
> Unfortunately, this library is not open source.  Kakadu has been included as
> an optional component of other open source projects, like GDAL.  However, I
> think Kakadu's license would come into conflict with the GPL used by
> PostGIS.   I'm not a lawyer, but I think this conflict could be overcome if
> PostGIS could be release under dual licenses, such as GPL or LGPL.  Whether
> or not its desirable to include of Kakadu in a PostGIS extension is another
> question.
>
> If anyone has knowledge of other JPEG 2000 codecs that have these
> low-level access capabilities, I'd be very happy to hear about them.   Also,
> if I've mischaracterized any of the codecs, I'd love to be corrected.
>
> In any event, I'm curious to see if there is significant interest in an
> implementation of JPEG2000 raster data type within PostGIS.  If so, I think
> I could dedicate a significant amount of my time over the next several
> months, as well as perhaps some funding from my employer, depending upon
> whether some of the issues I raised above can be resolved.
>
> Steve Marshall
>
>
> _______________________________________________
> postgis-users mailing list
> postgis-users at postgis.refractions.net
> http://postgis.refractions.net/mailman/listinfo/postgis-users
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/postgis-users/attachments/20061024/3ae9e209/attachment.html>


More information about the postgis-users mailing list