[gdal-dev] Re: Java wrapper of GDAL/OGR application
Even Rouault
even.rouault at mines-paris.org
Tue May 4 14:14:29 EDT 2010
Miguel,
I took the liberty to CC the gdal-dev mailing list as other may have the same
questions/interests or ideas to help you.
The migration of applications to Java was mainly an easy way to test the
GDAL/OGR Java API, but not an aim per se. So I've no real plans to migrate
gdal_grid and gdal_contour at the moment, but we'd be happy to get your
contribution.
The key to migrate an application is to make sure that the core API used by
each utility are available by SWIG bindings.
* For gdal_grid, the core API is GDALGridCreate(), which hasn't been mapped to
SWIG bindings.
The C prototype of the function :
CPLErr
GDALGridCreate( GDALGridAlgorithm eAlgorithm, const void *poOptions,
GUInt32 nPoints,
const double *padfX, const double *padfY, const double *padfZ,
double dfXMin, double dfXMax, double dfYMin, double dfYMax,
GUInt32 nXSize, GUInt32 nYSize, GDALDataType eType, void
*pData,
GDALProgressFunc pfnProgress, void *pProgressArg );
The only thing that will be difficult to map is the poOptions. Depending on
the value of the eAlgorithm parameter, poOptions points to a different C
structure. I can't imagine something harder to map with SWIG... A solution
would be to have a variant of GDALGridCreate (or a wrapper for it) that would
accept an array of strings to pass the options and transform it into the
appropriate C structure. Then the mapping to SWIG would be doable.
* For gdal_rasterize, the core API is GDALRasterizeGeometries(), which hasn't
been mapped to SWIG either. But GDALRasterizeLayers() has been mapped. See
http://gdal.org/java/org/gdal/gdal/gdal.html#RasterizeLayer%28org.gdal.gdal.Dataset,
%20int[],%20org.gdal.ogr.Layer,%20double[],%20java.util.Vector,
%20org.gdal.gdal.ProgressCallback%29
As far as I see, the only reason for using RasterizeGeometries() instead of
RasterizeLayers() in the C++ program is because of the -i option that needs
to invert the geometries of the source layer. However I think this could be
workaround by using an intermediate in-memory layer with the MEM driver that
would hold the inverted geometries.
Or, other solution, map RasterizeGeometries() to SWIG. This should be
moderately involved. Basically this will involve writing a typemap for (int
nGeomCount, OGRGeometryH *pahGeometries). You could take inspiration of the
typemap for (int object_list_count, GDALRasterBandShadow **poObjects) to do
so.
In conclusion, the translation of gdal_rasterize.cpp to Java should be doable
with a moderate effort. gdal_grid is another story... I'd note that the
performance of gdal_grid is known to be not good when a big number of points
are used. In the event this is improved, an alternate API to GDALGridCreate()
might be necessary (for example passing a quadtree of points instead of an
array of coordinates, or any data structure that has efficient spatial lookup
capability)
Best regards,
Even
Le Tuesday 04 May 2010 17:07:44 Miguel Angel Manso (UPM), vous avez écrit :
> Dear Even,
>
> My name is Miguel A. Manso from Technical University of Madrid (UPM)
> Topographic, GEdesy and Cartography Engieniering scholl.
>
> I'm old user of Gdal/OGr library and lover and defender of open source.
>
> I've see that you are an active player in Java wrapper of Gdal/Ogr, and
> almost of apps has been migrated to java from c++.
>
> I'm interesting on two apps that have not yet migrated: gdal_grid and
> gdal_contour
>
> Do you have plans to migrate?
>
> Can you help us (student and i) to do it?
>
> Thank you for your attentions.
> Best regards,
> Miguel A.
More information about the gdal-dev
mailing list