[GRASS-dev] [GRASS GIS] #3485: Introduce a new 64-bit integer raster data type
GRASS GIS
trac at osgeo.org
Fri Feb 16 08:31:59 PST 2018
#3485: Introduce a new 64-bit integer raster data type
--------------------------+---------------------------
Reporter: mlennert | Owner: grass-dev@…
Type: enhancement | Status: new
Priority: normal | Milestone: 8.0.0
Component: LibRaster | Version: svn-trunk
Resolution: | Keywords: raster 64-bit
CPU: Unspecified | Platform: Unspecified
--------------------------+---------------------------
Comment (by mmetz):
Replying to [comment:2 mlennert]:
> Replying to [comment:1 mmetz]:
> > Replying to [ticket:3485 mlennert]:
> > > From #3084:
> > >
> > > "Most importantly, a GRASS raster format for 64-bit signed integer.
Note that GDAL does not support 64-bit signed or unsigned integers. The
reason is probably that a portable implementation of 64-bit integers is
not so easy. Regarding GRASS raster processing, the need for 64-bit
integers usually arises only for raster maps with more than 2,147,483,647
cells which in turn usually requires Large File Support (LFS). Therefore
the check for the availability of a 64-bit integer could be coupled to
LFS. If support for 64-bit signed integer raster maps (say, LCELL) could
be added to GRASS, users would need to stick to GRASS since GDAL raster
export of 64-bit integers is not available. Interesting idea."
> >
> > A 64 bit signed integer type has been added to trunk with r72230.
Various other projects, e.g. GDAL, SQLite, HDF5, Python also have some 64
bit signed integer type. In order to avoid namespace collision, the new
type has been defined as grass_int64 and LCELL. GRASS libraries and
modules do not yet make use of this type. Defining a 64 bit signed integer
type has been tested on Linux + gcc, FreeBSD + clang, and MS Windows + gcc
(mingw).
>
> Great, thanks a lot, Markus !
>
> What is the roadmap from here, not in terms of calendar, but in terms of
tasks that need to be done to actually be able to use this new integer
type ?
>
Regarding internal variables, e.g. cell count, the first task would be to
use the new 64 bit int type there instead of e.g. long which is sometimes
32 bit and sometimes 64 bit. I think there are still some places where int
is used for cell counts.
Making such variables 64 bit integer would be a bug fix, considering that
large raster data are nowadays commonly processed.
Further on, some ifdefs like
{{{
#ifdef HAVE_LONG_LONG_INT
...
#endif
}}}
could be removed. Such ifdefs would need to be kept for printing messages,
unless the length modifier j is available on all supported systems (no
idea here).
A different issue is the introduction of a new LCELL raster map type. It
should not be too difficult, but it would be a lot of work to add the
corresponding functions, essentially cloning all the CELL type related
functions and adjusting for LCELL.
Replying to [comment:3 rouault]:
> Related GDAL ticket: https://trac.osgeo.org/gdal/ticket/7052
Regarding nodata, GRASS does not have a global nodata type, but we would
need new fns like
{{{
int Rast_is_l_null_value(const LCELL * lcellVal);
void Rast_set_l_null_value(LCELL * lcellVals, int numVals);
}}}
Still, such 64 bit integer GRASS raster maps could not be exported via
GDAL.
--
Ticket URL: <https://trac.osgeo.org/grass/ticket/3485#comment:4>
GRASS GIS <https://grass.osgeo.org>
More information about the grass-dev
mailing list