[postgis-users] A PostGIS-Raster data proposal

Mario Servin mservin at gmail.com
Tue Oct 24 14:10:16 PDT 2006


Sorry, my mistake.  I really mean ECW as Enhanced Compressed Wavelet

On 10/24/06, Mario Servin <mservin at gmail.com> wrote:
>
> 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/ba56e3ac/attachment.html>


More information about the postgis-users mailing list