Changeset 22476


Ignore:
Timestamp:
Jun 1, 2011, 4:36:41 PM (13 years ago)
Author:
jorgearevalo
Message:

Added alternative version of GDALPolygonize, named GDALFPolygonize, using 32b float buffers instead of int32 ones. The floating point numbers comparison function implemented is the last one from http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm. Related ticket #4005.

Location:
trunk/gdal/alg
Files:
2 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/gdal/alg/GNUmakefile

    r21236 r22476  
    77                thinplatespline.o llrasterize.o gdalrasterize.o gdalgeoloc.o \
    88                gdalgrid.o gdalcutline.o gdalproximity.o rasterfill.o \
    9                 gdalrasterpolygonenumerator.o gdalsievefilter.o \
    10                 gdalwarpkernel_opencl.o polygonize.o contour.o
     9                gdalrasterpolygonenumerator.o \
     10                gdalsievefilter.o gdalwarpkernel_opencl.o polygonize.o \
     11                gdalrasterfpolygonenumerator.o fpolygonize.o \
     12                contour.o
    1113
    1214ifeq ($(HAVE_GEOS),yes)
  • trunk/gdal/alg/gdal_alg.h

    r18227 r22476  
    8888                char **papszOptions,
    8989                GDALProgressFunc pfnProgress,
     90                void * pProgressArg );
     91
     92CPLErr CPL_DLL CPL_STDCALL
     93GDALFPolygonize( GDALRasterBandH hSrcBand,
     94                GDALRasterBandH hMaskBand,
     95                OGRLayerH hOutLayer, int iPixValField,
     96                char **papszOptions,
     97                GDALProgressFunc pfnProgress,
    9098                void * pProgressArg );
    9199
  • trunk/gdal/alg/gdal_alg_priv.h

    r20078 r22476  
    118118};
    119119
     120/************************************************************************/
     121/*                          Polygon Enumerator                          */
     122/*                                                                      */
     123/*              Buffers has float values instead og GInt32              */
     124/************************************************************************/
     125class GDALRasterFPolygonEnumerator
     126
     127{
     128private:
     129    void     MergePolygon( int nSrcId, int nDstId );
     130    int      NewPolygon( float fValue );
     131
     132public:  // these are intended to be readonly.
     133
     134    GInt32   *panPolyIdMap;
     135    float    *pafPolyValue;
     136
     137    int      nNextPolygonId;
     138    int      nPolyAlloc;
     139
     140    int      nConnectedness;
     141
     142public:
     143             GDALRasterFPolygonEnumerator( int nConnectedness=4 );
     144            ~GDALRasterFPolygonEnumerator();
     145
     146    void     ProcessLine( float *pafLastLineVal, float *pafThisLineVal,
     147                          GInt32 *panLastLineId,  GInt32 *panThisLineId,
     148                          int nXSize );
     149
     150    void     CompleteMerges();
     151
     152    void     Clear();
     153};
    120154
    121155typedef void* (*GDALTransformDeserializeFunc)( CPLXMLNode *psTree );
     
    126160void GDALUnregisterTransformDeserializer(void* pData);
    127161
     162/************************************************************************/
     163/*      Float comparison function.                                      */
     164/************************************************************************/
     165
     166/**
     167 * Units in the Last Place. This specifies how big an error we are willing to
     168 * accept in terms of the value of the least significant digit of the floating
     169 * point number’s representation. MAX_ULPS can also be interpreted in terms of
     170 * how many representable floats we are willing to accept between A and B.
     171 */
     172#define MAX_ULPS 10
     173
     174GBool equals(float A, float B);
     175
    128176#endif /* ndef GDAL_ALG_PRIV_H_INCLUDED */
  • trunk/gdal/alg/makefile.vc

    r21236 r22476  
    2020        gdalgrid.obj gdalcutline.obj gdalproximity.obj rasterfill.obj \
    2121        gdalsievefilter.obj gdalrasterpolygonenumerator.obj polygonize.obj \
    22         contour.obj
     22        gdalrasterfpolygonenumerator.o fpolygonize.o \
     23        gdalrasterdpolygonenumerator.obj dpolygonize.obj contour.obj
    2324
    2425default:        $(OBJ)
Note: See TracChangeset for help on using the changeset viewer.