-
Notifications
You must be signed in to change notification settings - Fork 13
/
bag_metadatatypes.h
319 lines (299 loc) · 12.1 KB
/
bag_metadatatypes.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
/*!
\file bag_metadatatypes.h
\brief Definition of the BAG metadata structures.
*/
//************************************************************************
//
// Open Navigation Surface Working Group, 2013
//
//************************************************************************
#ifndef BAG_METADATATYPES_H
#define BAG_METADATATYPES_H
#include "bag_c_types.h"
#include "bag_config.h"
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
//! Value to which floats and ints will be initialized.
#define INIT_VALUE -999
//! This structure contains the contents of the gmd:CI_ResponsibleParty node.
struct BagResponsibleParty
{
//! Contains the contents of the gmd:individualName node.
//! Required if organisationName and positionName are not specified.
char* individualName;
//! Contains the contents of the gmd:organisationName node.
//! Required if individualName and positionName are not specified.
char* organisationName;
//! Contains the contents of the gmd:positionName node.
//! Required if organisationName and individualName are not specified.
char* positionName;
//! Contains the contents of the gmd:role node.
//! Required
char* role;
};
//! This structure contains the contents of the gmd:MD_LegalConstraints node.
struct BagLegalConstraints
{
//! Contains the contents of the gmd:useConstraints node.
//! See codelist for appropriate values. (http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_RestrictionCode)
//! Required
char* useConstraints;
//! Contains the contents of the gmd:otherConstraints node.
char* otherConstraints;
};
//! This structure contains the contens of the gmd:MD_SecurityConstraints node.
struct BagSecurityConstraints
{
//! Contains the contents of the gmd:classification node.
//! See codelist for appropriate values. (http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_ClassificationCode)
//! Required
char* classification;
//! Contains the contents of the gmd:userNote node.
//! May be used to specify distribution, declass authority, declass date.
//! Required
char* userNote;
};
//! This structure contains the contents of the gmd:LI_Source node.
struct BagSource
{
//! Contains the contents of the gmd:description node.
//! Required
char* description;
//! Contains the contents of the gmd:CI_Citation/gmd:title node.
//! Required if a citation is desired.
char* title;
//! Contains the contents of the gmd:CI_Citation//gmd:date node.
//! Required if a citation is desired.
char* date;
//! Contains the contents of the gmd:CI_Citation//gmd:dateType node.
//! Required if a citation is desired.
char* dateType;
//! Contains the contents of the gmd:CI_Citation/gmd:citedResponsibleParty node.
BagResponsibleParty* responsibleParties;
//! The number of responsible parties.
uint32_t numberOfResponsibleParties;
};
//! This structure contains the contents of the bag:BAG_ProcessStep node.
struct BagProcessStep
{
//! Contains the contents of the gmd:description node.
//! Required
char* description;
//! Contains the contents of the gmd:dateTime node.
char* dateTime;
//! Contains the contents of the gmd:processor node.
BagResponsibleParty* processors;
//! The number of processors.
uint32_t numberOfProcessors;
//! Contains the contents of the bag:trackingId node.
//! Required.
char* trackingId;
//! Contains the contents of the gmd:source node.
//! Required (at least one)
BagSource* lineageSources;
//! The number of sources.
uint32_t numberOfSources;
};
//! This structure contains the contents of the gmd:dataQualityInfo node.
struct BagDataQuality
{
//! Contains the contents of the gmd:scope node.
//! Typically set to 'dataset'.
//! Required
char* scope;
//! Contains the contents of the gmd:lineage node.
//! Required (at least one)
BagProcessStep* lineageProcessSteps;
//! The number of process steps.
uint32_t numberOfProcessSteps;
};
//! This structure contains the contents of the gmd:spatialRepresentationInfo node.
struct BagSpatialRepresentation
{
//! Contains the contents of the axisDimensionProperties//dimensionSize node.
//! Required
uint32_t numberOfRows;
//! Contains the contents of the axisDimensionProperties//resolution node.
//! Required
double rowResolution;
//! Contains the contents of the axisDimensionProperties//dimensionSize node.
//! Required
uint32_t numberOfColumns;
//! Contains the contents of the axisDimensionProperties//resolution node.
//! Required
double columnResolution;
//! Contains the row and column resolution units. Typically metres.
//! Required
char* resolutionUnit;
//! Contains the contents of the gmd:cellGeometry node.
//! Required
char* cellGeometry;
//! Contains the contents of the gmd:transformationParameterAvailability node.
//! Required
bool transformationParameterAvailability;
//! Contains the contents of the gmd:checkPointAvailability node.
//! Required
bool checkPointAvailability;
//! Lower left x value of the gmd:cornerPoints node.
//! Required
double llCornerX;
//! Lower left y value of the gmd:cornerPoints node.
//! Required
double llCornerY;
//! Upper right x value of the gmd:cornerPoints node.
//! Required
double urCornerX;
//! Upper right y value of the gmd:cornerPoints node.
//! Required
double urCornerY;
//! Transformation Dimension Description.
//! Optional
char* transformationDimensionDescription;
//! Transformation Dimension Mapping.
//! Optional
char* transformationDimensionMapping;
};
//! This structure contains the contents of the gmd:identificationInfo node.
struct BagIdentification
{
//! Contains the contents of the gmd:CI_Citation/gmd:title node.
//! Required if a citation is desired.
char* title;
//! Contains the contents of the gmd:CI_Citation//gmd:date node.
//! Required if a citation is desired.
char* date;
//! Contains the contents of the gmd:CI_Citation//gmd:dateType node.
//! Required if a citation is desired.
char* dateType;
//! Contains the contents of the gmd:identificationInfo node.
BagResponsibleParty* responsibleParties;
//! The number of responsible parties.
uint32_t numberOfResponsibleParties;
//! Contains the contents of the gmd:abstract node.
//! Required
char* abstractString;
//! Contains the contents of the gmd:status node.
char* status;
//! Contains the contents of the gmd:spatialRepresentationType node.
//! See codelist for appropriate values. (http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_SpatialRepresentationTypeCode)
//! Typically set to 'grid'.
char* spatialRepresentationType;
//! Contains the contents of the gmd:language node.
//! See codelist for appropriate values. (http://www.loc.gov/standards/iso639-2/)
//! Typically set to 'en'.
//! Required
char* language;
//! Contains the contents of the gmd:characterSet node.
//! See codelist for appropriate values. (http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_CharacterSetCode)
//! Typically set to 'utf8'.
//! Required
char* characterSet;
//! Contains the contents of the gmd:topicCategory node.
//! See codelist for appropriate values. (http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_TopicCategoryCode)
//! Typically set to 'grid'.
//! Required
char* topicCategory;
//! Contains the contents of the gmd:extent/gmd:westBoundLongitude node.
//! Required if an extent is desired.
double westBoundingLongitude;
//! Contains the contents of the gmd:extent/gmd:eastBoundLongitude node.
//! Required if an extent is desired.
double eastBoundingLongitude;
//! Contains the contents of the gmd:extent/gmd:southBoundLatitude node.
//! Required if an extent is desired.
double southBoundingLatitude;
//! Contains the contents of the gmd:extent/gmd:northBoundLatitude node.
//! Required if an extent is desired.
double northBoundingLatitude;
//! Contains the contents of the bag:verticalUncertaintyType node.
//! See codelist for appropriate values. (http://www.opennavsurf.org/schema/bag/bagCodelists.xml#BAG_VertUncertCode)
//! Required
char* verticalUncertaintyType;
//! Contains the contents of the bag:depthCorrectionType node.
//! See codelist for appropriate values. (http://www.opennavsurf.org/schema/bag/bagCodelists.xml#BAG_DepthCorrectCode)
char* depthCorrectionType;
//! Contains the contents of the bag:nodeGroupType node.
//! See codelist for appropriate values. (http://www.opennavsurf.org/schema/bag/bagCodelists.xml#BAG_OptGroupCode)
char* nodeGroupType;
//! Contains the contents of the bag:elevationSolutionGroupType node.
//! See codelist for appropriate values. (http://www.opennavsurf.org/schema/bag/bagCodelists.xml#BAG_OptGroupCode)
char* elevationSolutionGroupType;
};
//! This structure contains the contents of the gmd:MD_ReferenceSystem node.
struct BagReferenceSystem
{
//! Contains the contents of the referenceSystemIdentifier/RS_Identifier/code node.
//! Would typically contain the WKT (Well Known Text) definition.
//! Required
char* definition;
//! Contains the contents of the referenceSystemIdentifier/RS_Identifier/codeSpace node.
//! If the definition is in WKT, this value should be WKT.
//! Required
char* type;
};
//! This structure contains the contents of the gmi:MI_Metadata node.
struct BagMetadata
{
//! Contents of the gmd:fileIdentifier node.
//! Must be a unique identifier for the metadata.
//! Required
char* fileIdentifier;
//! Contents of the gmd:language node.
//! See codelist for appropriate values. (http://www.loc.gov/standards/iso639-2/)
//! Required
char* language;
//! Contents of the gmd:characterSet node.
//! See codelist for appropriate values. (http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_CharacterSetCode)
//! Required
char* characterSet;
//! Contents of the gmd:hierarchyLevel node.
//! See codelist for appropriate values. (http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_ScopeCode)
//! Required
char* hierarchyLevel;
//! Contents of the gmd:contact node.
//! Required
BagResponsibleParty* contact;
//! Contents of the gmd:dateStamp node.
//! Required
char* dateStamp;
//! Contents of the gmd:metadataStandardName node.
//! Typically initialized to 'ISO 19115'.
//! Required
char* metadataStandardName;
//! Contents of the gmd:metadataStandardVersion node.
//! Typically initialized to '2003/Cor.1:2006'.
//! Required
char* metadataStandardVersion;
//! Contents of the gmd:spatialRepresentationInfo node.
//! Required
BagSpatialRepresentation* spatialRepresentationInfo;
//! Contents of the gmd:referenceSystemInfo node (horizontal).
//! Required
BagReferenceSystem* horizontalReferenceSystem;
//! Contents of the gmd:referenceSystemInfo node (vertical).
//! Required
BagReferenceSystem* verticalReferenceSystem;
//! Contents of the gmd:identificationInfo node.
//! Required
BagIdentification* identificationInfo;
//! Contents of the gmd:dataQualityInfo node.
//! Required
BagDataQuality* dataQualityInfo;
//! Contents of the gmd:metadataConstraints node (legal).
//! Required
BagLegalConstraints* legalConstraints;
//! Contents of the gmd:metadataConstraints node (security).
//! Required
BagSecurityConstraints* securityConstraints;
};
#ifdef __cplusplus
} // extern "C"
#endif
BAG_EXTERNAL void bagInitMetadata(BagMetadata& metadata);
BAG_EXTERNAL void bagFreeMetadata(BagMetadata& metadata) noexcept;
BAG_EXTERNAL void initResponsibleParty(BagResponsibleParty& responsibleParty) noexcept;
BAG_EXTERNAL void initSourceInfo(BagSource& sourceInfo) noexcept;
BAG_EXTERNAL void initProcessStep(BagProcessStep& processStep) noexcept;
#endif // BAG_METADATATYPES_H