[GRASS5] New dig 5.0 format with categories and z-coordinate

Radim Blazek Radim.Blazek at dhv.cz
Thu Sep 7 09:25:20 EDT 2000


Proposal for new dig 5.0 format with categories and z-coordinate.

General:
Each element may have none, 1 or more categories (cats).
More cats are distinguished by category numbers (cat_num).
Only one cat with cat_num=1 will be used at this stage
and multi-category support on modules level will be added in
future.
Z-coordinate will be optional and both 2d and 3d files may
be written.

Implementation steps:

1. Define new dig format:
    like 4.x but in:
    - head : Add type field for 2d/3d 
    - body : - between element type and number of coordinates is inserted:
                 - number of categories 0-255        (1 byte)
                 - category number(s)   1-65535      (n_cats * 2 bytes)
                 - category(s)          1-4294967295 (n_cats * 4 bytes)
             - for 3d files z coordinate is written in the same style as x,y

2. Define new structures and write functions:
    #define CENTROID        0x08
    #define FILE_CENTROID      3
    typedef unsigned char   VCNCATS;
    typedef unsigned short  VCCATNUM;
    typedef unsigned int    VCCAT;
 
    struct line_cats {
       VCNCATS  n_cats;      /* number of vector categories on one element */
       int      alloc_cats;  /* size of allocated space */
       VCCATNUM *cat_num;    /* pointer to field of category numbers */
       VCCAT    *cat;        /* pointer to field of categories */
    };

    struct line_pnts {
       double *x;
       double *y;
       double *z;             /* null for 2d */
       int     n_points;
       int     alloc_points;
    };

    struct line_cats *Vect__new_cats_struct (void);
    int Vect_append_cat ( struct line_cats *, VCCATNUM, VCCAT);
    int Vect_read_next_cats_line ( struct Map_info *, struct line_cats *,struct line_pnts *);
    long Vect_write_cats_line ( struct Map_info *, int type, struct line_cats *, struct ine_pnts );
          ( for backward compatibility this function duplicates cats to dig_att file
           so that old modules can work with new dig files )
 
    Vect_read_next_line( ) - rewrite to read both 4.x and 5.0 2d/3d
         and of course all functions called by these and some others.

3. Rewrite v.build to support both dig 4.0 and 5.0.
   Write v.dig module for conversion from built dig_plus to dig5.0.
 
4. Request for testing on other platforms. Result of v.dig and v.support
   should be the same as original dig_plus and all modules should work
   with dig in 5.0 correctly.
 
5. Rewrite all modules which read from dig_plus (level2) or from
   other sources (v.in.*) to new dig format.
 
6. Rewrite remaining modules which read from dig file. Here is the problem
   because if module writes dig5.0, it must also read in dig5.0 format and
   so imput file must be converted by v.support and v.dig first.


David D Gray, Radim Blazek

---------------------------------------- 
If you want to unsubscribe from GRASS Development Team mailing list write to:
minordomo at geog.uni-hannover.de with
subject 'unsubscribe grass5'



More information about the grass-dev mailing list