1 /*!
2   \file include/vect/dig_defines.h
3 
4   Defines for diglib (part of vector library)
5 */
6 
7 /*! \brief Name of vector directory */
8 #define GV_DIRECTORY    "vector"
9 /*! \brief Format description, data location (OGR) */
10 #define GV_FRMT_ELEMENT "frmt"
11 /*! \brief Native format, coordinates */
12 #define GV_COOR_ELEMENT "coor"
13 /*! \brief Native format, header information */
14 #define GV_HEAD_ELEMENT "head"
15 /*! \brief Native format, link to database */
16 #define GV_DBLN_ELEMENT "dbln"
17 /*! \brief Native format, history file */
18 #define GV_HIST_ELEMENT "hist"
19 /*! \brief Native format, topology file */
20 #define GV_TOPO_ELEMENT "topo"
21 /*! \brief Native format, spatial index */
22 #define GV_SIDX_ELEMENT "sidx"
23 /*! \brief Native format, category index */
24 #define GV_CIDX_ELEMENT "cidx"
25 /*! \brief External format (OGR), feature index */
26 #define GV_FIDX_ELEMENT "fidx"
27 /*! \brief Color table */
28 #define GV_COLR_ELEMENT "colr"
29 /*! \brief Name of directory for alternative color tables */
30 #define GV_COLR2_DIRECTORY "vcolr2"
31 /*! \brief Name of the timestamp file */
32 #define GV_TIMESTAMP_ELEMENT "timestamp"
33 
34 /*! \brief Sizes of types used in portable format (different names used in
35   Vlib/ and diglib/ for the same thing)
36 
37   Assumptions:
38    - double =    8 byte IEEE
39    -  float =    4 byte IEEE
40    -   long =    4 byte int
41    -  short =    2 byte int
42 
43   \todo To be moved to gislib?
44 */
45 #define PORT_DOUBLE 8
46 #define PORT_FLOAT  4
47 #define PORT_LONG   4
48 #define PORT_INT    4
49 #define PORT_SHORT  2
50 #define PORT_CHAR   1
51 #define PORT_OFF_T  8
52 
53 /*! \brief replace by PORT_* in Vlib later and remove :
54 
55   \todo To be removed ?
56 */
57 #define DBL_SIZ  8
58 #define FLT_SIZ  4
59 #define LNG_SIZ  4
60 #define SHRT_SIZ 2
61 
62 /*! \brief Limits for portable types
63 
64   \todo To be moved to gislib?
65 */
66 #define PORT_DOUBLE_MAX 1.7976931348623157e+308
67 #define PORT_DOUBLE_MIN 2.2250738585072014e-308
68 #define PORT_FLOAT_MAX  3.40282347e+38F
69 #define PORT_FLOAT_MIN  1.17549435e-38F
70 #define PORT_LONG_MAX   2147483647L
71 #define PORT_LONG_MIN   (-2147483647L)
72 #define PORT_INT_MAX    2147483647
73 #define PORT_INT_MIN    (-2147483647)
74 #define PORT_SHORT_MAX  32767
75 #define PORT_SHORT_MIN  (-32768)
76 #define PORT_CHAR_MAX   127
77 #define PORT_CHAR_MIN   (-128)
78 
79 /*! \brief Geometry data formats supported by lib
80   Don't change GV_FORMAT_* values, this order is hardcoded in lib
81 */
82 /*! \brief GRASS native format */
83 #define GV_FORMAT_NATIVE           0
84 /*! \brief OGR format */
85 #define GV_FORMAT_OGR              1
86 /*! \brief OGR format (direct access) */
87 #define GV_FORMAT_OGR_DIRECT       2
88 /*! \brief PostGIS format */
89 #define GV_FORMAT_POSTGIS          3
90 
91 /*! \brief GRASS topology - native format */
92 #define GV_TOPO_NATIVE             0
93 /*! \brief Pseudo-topology - external simple features (OGR/PostGIS) format */
94 #define GV_TOPO_PSEUDO             1
95 /*! \brief PostGIS topology - external PostGIS format */
96 #define GV_TOPO_POSTGIS            2
97 
98 /*! \brief One table linked to vector map */
99 #define GV_1TABLE  0
100 /*! \brief More tables linked to vector map */
101 #define GV_MTABLE  1
102 
103 /*! \brief Read-only vector map open mode */
104 #define GV_MODE_READ  0
105 /*! \brief Write vector map open mode */
106 #define GV_MODE_WRITE 1
107 /*! \brief Read-write vector map open mode */
108 #define GV_MODE_RW    2
109 
110 /*! \brief Vector map open code */
111 #define VECT_OPEN_CODE   0x5522AA22
112 /*! \brief Vector map close code */
113 #define VECT_CLOSED_CODE 0x22AA2255
114 
115 /*! \brief Vector level - without topology */
116 #define LEVEL_1  1
117 /*! \brief Vector level - with 2D topology */
118 #define LEVEL_2  2
119 /*! \brief Vector level - with 3D topology (not implemented yet) */
120 #define LEVEL_3  3
121 
122 /*! \brief Topology levels - nothing to build */
123 #define GV_BUILD_NONE         0
124 /*! \brief Topology levels - basic level (without areas and isles) */
125 #define GV_BUILD_BASE         1
126 /*! \brief Topology levels - build areas */
127 #define GV_BUILD_AREAS        2
128 /*! \brief Topology levels - attach islands to areas */
129 #define GV_BUILD_ATTACH_ISLES 3
130 /*! \brief Topology levels - assign centroids to areas */
131 #define GV_BUILD_CENTROIDS    4
132 /*! \brief Topology levels - build everything (currently same as GV_BUILD_CENTROIDS) */
133 #define GV_BUILD_ALL          GV_BUILD_CENTROIDS
134 
135 /*! \brief Check if vector map is open */
136 #define VECT_OPEN(Map)   (Map->open == VECT_OPEN_CODE)
137 
138 /*! \brief Memory mode */
139 #define GV_MEMORY_ALWAYS 1
140 #define GV_MEMORY_NEVER  2
141 #define GV_MEMORY_AUTO   3
142 
143 /*! \brief Coordinates file head size */
144 #define GV_COOR_HEAD_SIZE 14
145 
146 #define GRASS_V_VERSION       "5.0"
147 /*! \brief The latest versions of files known by current version of
148     the library. Used for new files */
149 #define GV_COOR_VER_MAJOR  5
150 #define GV_COOR_VER_MINOR  1
151 #define GV_TOPO_VER_MAJOR  5
152 #define GV_TOPO_VER_MINOR  1
153 #define GV_SIDX_VER_MAJOR  5
154 #define GV_SIDX_VER_MINOR  1
155 #define GV_CIDX_VER_MAJOR  5
156 #define GV_CIDX_VER_MINOR  0
157 
158 /*! \brief The oldest versions of the library, which are capable to
159     read the files created by the current version */
160 #define GV_COOR_EARLIEST_MAJOR  5
161 #define GV_COOR_EARLIEST_MINOR	1
162 #define GV_TOPO_EARLIEST_MAJOR  5
163 #define GV_TOPO_EARLIEST_MINOR	1
164 #define GV_SIDX_EARLIEST_MAJOR  5
165 #define GV_SIDX_EARLIEST_MINOR	1
166 #define GV_CIDX_EARLIEST_MAJOR  5
167 #define GV_CIDX_EARLIEST_MINOR	0
168 
169 /*! \brief 2D/3D vector data */
170 #define WITHOUT_Z	0
171 #define WITH_Z		1
172 
173 /*! \brief Boundary side indicator left/right */
174 #define GV_LEFT	 1
175 #define GV_RIGHT 2
176 
177 /*! \brief Line direction indicator forward/backward */
178 #define GV_FORWARD  1
179 #define GV_BACKWARD 2
180 
181 /*! \brief Feature types used in memory on run time (may change) */
182 #define GV_POINT      0x01
183 #define GV_LINE	      0x02
184 #define GV_BOUNDARY   0x04
185 #define GV_CENTROID   0x08
186 #define GV_FACE       0x10
187 #define GV_KERNEL     0x20
188 #define GV_AREA	      0x40
189 #define GV_VOLUME     0x80
190 
191 #define GV_POINTS (GV_POINT | GV_CENTROID )
192 #define GV_LINES (GV_LINE | GV_BOUNDARY )
193 
194 /*! \brief Feature types used in store like 'coor' file or postgis type column (must not change) */
195 #define GV_STORE_POINT    1
196 #define GV_STORE_LINE     2
197 #define GV_STORE_BOUNDARY 3
198 #define GV_STORE_CENTROID 4
199 #define GV_STORE_FACE     5
200 #define GV_STORE_KERNEL   6
201 #define GV_STORE_AREA     7	/* used in category index file */
202 #define GV_STORE_VOLUME   8	/* used in category index file */
203 
204 /*! \brief Overlay operators */
205 #define GV_ON_AND     "AND"	/* intersect */
206 #define GV_ON_OVERLAP "OVERLAP"
207 
208 enum overlay_operator
209 {
210     GV_O_AND,
211     GV_O_OVERLAP
212 };
213 
214 typedef enum overlay_operator OVERLAY_OPERATOR;
215 
216 /*! \brief Maximum number of categories for one element */
217 #define GV_NCATS_MAX PORT_INT_MAX
218 /*! \brief Maximum field */
219 #define GV_FIELD_MAX PORT_INT_MAX
220 /*! \brief Maximum category value */
221 #define GV_CAT_MAX   PORT_INT_MAX
222 
223 /*! \brief GRASS ASCII vector format - point format */
224 #define GV_ASCII_FORMAT_POINT 0
225 /*! \brief GRASS ASCII vector format - standard format */
226 #define GV_ASCII_FORMAT_STD   1
227 /*! \brief GRASS ASCII vector format - well-known-text format */
228 #define GV_ASCII_FORMAT_WKT   2
229 
230 /*! \brief Simple feature types
231 
232   Taken from GDAL/OGR library (ogr/ogr_core.h)
233 */
234 typedef enum
235 {
236     SF_GEOMETRY = 0,                      /* unknown type, non-standard */
237     SF_POINT = 1,                         /* 0-dimensional geometric object */
238     SF_LINESTRING = 2,                    /* 1-dimensional geometric object with linear
239 					     interpolation between Points */
240     SF_POLYGON = 3,                       /* planar 2-dimensional geometric object defined
241 					     by 1 exterior boundary and 0 or more interior
242 					     boundaries */
243     SF_MULTIPOINT = 4,                    /* GeometryCollection of Points */
244     SF_MULTILINESTRING = 5,               /* GeometryCollection of LineStrings */
245     SF_MULTIPOLYGON = 6,                  /* GeometryCollection of Polygons */
246     SF_GEOMETRYCOLLECTION = 7,            /* geometric object that is a collection of 1
247 					     or more geometric objects  */
248     SF_NONE = 100,                        /* non-standard, for pure attribute records */
249     SF_LINEARRING = 101,                  /* non-standard */
250     SF_POINT25D = 0x80000001,             /* 2.5D extension as per 99-402 */
251     SF_LINESTRING25D = 0x80000002,        /* 2.5D extension as per 99-402 */
252     SF_POLYGON25D = 0x80000003,           /* 2.5D extension as per 99-402 */
253     SF_MULTIPOINT25D = 0x80000004,        /* 2.5D extension as per 99-402 */
254     SF_MULTILINESTRING25D = 0x80000005,   /* 2.5D extension as per 99-402 */
255     SF_MULTIPOLYGON25D = 0x80000006,      /* 2.5D extension as per 99-402 */
256     SF_GEOMETRYCOLLECTION25D = 0x80000007 /* 2.5D extension as per 99-402 */
257 } SF_FeatureType;
258 
259 #define HEADSTR	50
260 
261 /*! \brief GRASS-PostGIS data provider - default fid column */
262 #define GV_PG_FID_COLUMN      "fid"
263 /*! \brief GRASS-PostGIS data provider - default geometry column */
264 #define GV_PG_GEOMETRY_COLUMN "geom"
265