-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathcoverage-schema.json
439 lines (439 loc) · 21.6 KB
/
coverage-schema.json
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
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Coverage object",
"description": "Component of OGC Coverage Implementation Schema 1.1. Last updated: 2016-may-18. Copyright (c) 2016 Open Geospatial Consortium, Inc. All Rights Reserved. To obtain additional rights of use, visit http://www.opengeospatial.org/legal/.",
"type": "object",
"oneOf" : [{
"required": [ "type", "domainSet", "rangeSet", "rangeType"],
"properties": {
"id": { "type": "string"},
"type": { "enum": [ "CoverageByDomainAndRange" ] },
"envelope": { "$ref": "#/definitions/envelope" },
"domainSet": { "$ref": "#/definitions/domainSet" },
"rangeSet": { "$ref": "#/definitions/rangeSet" },
"rangeType": { "$ref": "#/definitions/rangeType" },
"metadata": { "$ref": "#/definitions/metadata" }
}
},{
"required": [ "type", "partitionSet", "rangeType"],
"properties": {
"id": { "type": "string"},
"type": { "enum": [ "CoverageByPartitioning" ] },
"envelope": { "$ref": "#/definitions/envelope" },
"partitionSet": { "$ref": "#/definitions/partitionSet" },
"rangeType": { "$ref": "#/definitions/rangeType" },
"metadata": { "$ref": "#/definitions/metadata" }
}
}],
"definitions": {
"envelope": {
"title": "envelope",
"description": "The envelope around a coverage is defined by the lower and upper bound of each axis, respectively. The purpose of the axisLabels attribute, which lists the axis labels of all axisExtent elements in proper sequence, is to enforce axis sequence also in XML systems which do not preserve document order.",
"type": "object",
"required": [ "type", "srsName", "axisLabels", "axis"],
"properties": {
"type": { "enum": [ "EnvelopeByAxis"] },
"id": { "type": "string" },
"srsName": { "type": "string", "format": "uri"},
"axisLabels":
{
"type": "array",
"items": { "type": "string" }
},
"axis": {
"type": "array",
"items": {
"type": "object",
"required": [ "type", "lowerBound", "upperBound", "uomLabel"],
"additionalProperties": false,
"properties": {
"type": { "enum": [ "AxisExtent"] },
"id": { "type": "string" },
"axisLabel": { "type": "string" },
"lowerBound": { "type": ["number", "string", "null", "boolean"] },
"upperBound": { "type": ["number", "string", "null", "boolean"] },
"uomLabel": { "type": "string" }
}
}
}
}
},
"domainSet": {
"title": "domainSet",
"description": "The domainSet describes the *direct positions* of the coverage, i.e., the locations for which values are available.",
"type": "object",
"oneOf" : [
{
"required": [ "type", "generalGrid"],
"properties": {
"type": { "enum": [ "DomainSet"] },
"generalGrid":{
"title": "General Grid",
"description": "A general n-D grid is defined through a sequence of axes, each of which can be of a particular axis type.",
"type": "object",
"required": [ "type"],
"additionalProperties": false,
"properties": {
"type": { "enum": [ "GeneralGridCoverage"] },
"id": { "type": "string" },
"srsName": { "type": "string", "format": "uri"},
"axisLabels":
{
"type": "array",
"items": { "type": "string" }
},
"axis": {
"type": "array",
"items": {
"type": "object",
"oneOf" : [
{
"title": "Index Axis",
"description": "An Index Axis is an axis with only integer positions allowed.",
"required": [ "type", "axisLabel", "lowerBound", "upperBound"],
"additionalProperties": false,
"properties": {
"type": { "enum": [ "IndexAxis"] },
"id": { "type": "string" },
"axisLabel": { "type": "string" },
"lowerBound": { "type": "number" },
"upperBound": { "type": "number" }
}
},{
"title": "Regular Axis",
"description": "A Regular Axis is an axis where all direct coordinates are at a common distance from its immediate neighbors.",
"required": [ "type", "axisLabel", "lowerBound", "upperBound", "resolution", "uomLabel"],
"additionalProperties": false,
"properties": {
"type": { "enum": [ "RegularAxis"] },
"id": { "type": "string" },
"axisLabel": { "type": "string" },
"lowerBound": { "type": ["number", "string", "null", "boolean"] },
"upperBound": { "type": ["number", "string", "null", "boolean"] },
"uomLabel": { "type": "string" },
"resolution": { "type": "number" }
}
},{
"title": "Irregular Axis",
"description": "An irregular axis enumerates all possible direct position coordinates.",
"required": [ "type", "axisLabel", "uomLabel", "coordinate"],
"additionalProperties": false,
"properties": {
"type": { "enum": [ "IrregularAxis"] },
"id": { "type": "string" },
"axisLabel": { "type": "string" },
"uomLabel": { "type": "string" },
"coordinate": {
"type": "array",
"items": { "type": ["number", "string", "boolean"] }
}
}
}
]
}
},
"displacement": {
"title": "Displacement",
"description": "A Displacement is a warped axis nest where points on the grid all have their individual direct position coordinates. The sequenceRule element describes linearization order.",
"type": "object",
"oneOf": [
{
"required": ["type", "axisLabels", "uomLabels", "coordinates" ],
"properties": {
"type": { "enum": [ "DisplacementAxisNest"] },
"id": { "type": "string" },
"axisLabel": { "type": "string" },
"srsName": { "type": "string", "format": "uri"},
"axisLabels":
{
"type": "array",
"items": { "type": "string" }
},
"uomLabels":
{
"type": "array",
"items": { "type": "string" }
},
"coordinates": {
"type": "array",
"items": {
"type": "array",
"items": { "type": ["number", "string", "boolean"] }
}
}
}
},{
"required": ["type", "axisLabels", "uomLabels", "coordinatesRef"],
"properties": {
"type": { "enum": [ "DisplacementAxisNestRef"] },
"id": { "type": "string" },
"axisLabel": { "type": "string" },
"srsName": { "type": "string", "format": "uri"},
"axisLabels":
{
"type": "array",
"items": { "type": "string" }
},
"uomLabels":
{
"type": "array",
"items": { "type": "string" }
},
"coordinatesRef": { "type": "string", "format": "uri"}
}
}]
},
"model": {
"title": "Sensor model",
"description": "A Transformation By Sensor Model is a transformation definition which is given by a SensorML 2.0 transformation specification.",
"type": "object",
"required": [ "type", "sensorModelRef" ],
"properties": {
"type": { "enum": [ "TransformationBySensorModel"] },
"id": { "type": "string" },
"axisLabels":
{
"type": "array",
"items": { "type": "string" }
},
"uomLabels":
{
"type": "array",
"items": { "type": "string" }
},
"sensorModelRef": { "type": "string", "format": "uri"},
"sensorInstanceRef": { "type": "string", "format": "uri"}
}
},
"gridLimits": {
"title": "Grid limits",
"description": "This is the boundary of the array underlying the grid, given by its diagonal corner points in integer _60_3D. The grid limits can be omitted in case all axes are of type index axis, because then it repeats the grid information in a redundant way. The purpose of the axisLabels attribute, which lists the axis labels of all axisExtent elements in proper sequence, is to enforce axis sequence also in XML systems which do not preserve document order.",
"type": "object",
"required": [ "type"],
"properties": {
"type": { "enum": [ "GridLimits" ] },
"indexAxis": {
"title": "Index Axis",
"description": "An Index Axis is an axis with only integer positions allowed.",
"type": "object",
"required": [ "type", "lowerBound", "upperBound"],
"additionalProperties": false,
"properties": {
"type": { "enum": [ "IndexAxis"] },
"id": { "type": "string" },
"axisLabel": { "type": "string" },
"lowerBound": { "type": "number" },
"upperBound": { "type": "number" }
}
},
"srsName": { "type": "string", "format": "uri"},
"axisLabels":
{
"type": "array",
"items": { "type": "string" }
}
}
}
}
}
}
},{
"required": [ "type", "directMultiPoint"],
"properties": {
"type": { "enum": [ "DomainSet"] },
"directMultiPoint":{
"oneOf" : [{
"required": [ "type", "coordinates" ],
"properties": {
"type": { "enum": [ "DirectMultiPoint"] },
"coordinates": {
"type": "array",
"items": {
"type": "array",
"items": { "type": ["number", "string", "boolean"] }
}
}
}
},{
"required": [ "type", "coordinatesRef" ],
"properties": {
"type": { "enum": [ "DirectMultiPointTypeRef"] },
"coordinatesRef": { "type": "string", "format": "uri"}
}
}]
}
}
},{
"required": [ "type", "fileReference"],
"properties": {
"type": { "enum": [ "DomainSetRef"] },
"id": { "type": "string" , "format":"uri"},
"fileReference": { "type": "string", "format": "uri"}
}
}]
},
"rangeSet": {
"title": "rangeSet",
"description": "The rangeSet lists a value for each of the coverage's direct positions. Values resemble the *payload* information of some particular direct positions. Values can be composite (with a single nesting level, i.e.: composites always consist of atomics), or atomic (emulated through single-component composites) whereby the sequence, structure, and meaning of every value is defined through the rangeType. Values can be represented in-line or by reference to an external file which may have any suitable encoding.",
"type": "object",
"oneOf" : [{
"required": [ "type", "dataBlock"],
"properties": {
"type": { "enum": [ "RangeSet"] },
"dataBlock":{
"title": "dataBlock",
"description": "Data block objects",
"type": "object",
"required": [ "type", "values"],
"properties": {
"type": { "enum": [ "VDataBlock", "CVDataBlock"] },
"values": {
"type": "array",
"items": { "type": ["number", "string", "null", "boolean"] }
}
}
}
}
},
{
"required": [ "type", "fileReference"],
"properties": {
"type": { "enum": [ "RangeSetRef"] },
"fileReference": {
"type": "array",
"items": { "type": "string", "format": "uri" }
}
}
}]
},
"partitionSet": {
"title": "Partitioning Set",
"description": "A partition describes how a coverage (*sub-coverage*) referenced is located within referencing coverage (*super-coverage*). The sub-coverage can be represented by referencing a coverage id or a URL pointing to a coverage. Such sub-coverages referenced may be grouped into the super-coverage document, or reside remote, or mixed. As an additional alternative, single range values can be indicated verbatimg, together with their direct position. All values must share an identical structure and conform to the rangeType definition.",
"type": "object",
"required": [ "type"],
"properties": {
"type": { "enum": [ "PartitionSet"] },
"partition":{
"type": "array",
"items": {
"type": "object",
"oneOf" : [{
"required": [ "type", "coverageRef"],
"properties": {
"id": { "type": "string"},
"type": { "enum": [ "PartitionRef" ] },
"envelope": { "$ref": "#/definitions/envelope" },
"coverageRef": { "type": "string", "format": "uri"}
}
},{
"required": [ "type", "coverage"],
"properties": {
"id": { "type": "string"},
"type": { "enum": [ "Partition" ] },
"envelope": { "$ref": "#/definitions/envelope" },
"coverage": { "$ref": "#" }
}
}]
}
},
"positionValuePair": {
"type": "array",
"items": {
"type": "object",
"required": [ "type", "coordinate", "value" ],
"properties": {
"id": { "type": "string"},
"type": { "enum": [ "PVP" ] },
"coordinate": {
"type": "array",
"items": { "type": ["number", "string", "boolean"] }
},
"value": {
"type": "array",
"items": { "type": ["number", "string", "null", "boolean"] }
}
}
}
}
}
},
"rangeType": {
"title": "rangeType",
"description": "The rangeType element describes the structure and semantics of a coverage's range values, including (optionally) restrictions on the interpolation allowed on such values.",
"type": "object",
"oneOf": [{
"required": [ "type", "field"],
"properties": {
"type": { "enum": [ "DataRecord"] },
"field":{
"type": "array",
"items": {
"title": "DataRecord field",
"description": "e.g. Quantity or Count",
"type": "object",
"required": [ "type"],
"properties": {
"type": { "enum": [ "Quantity", "Count" ] },
"id": { "type": "string" , "format":"uri"},
"name": { "type": "string" },
"definition": { "type": "string", "format":"uri" },
"description": { "type": "string" },
"uom": {
"title": "units of measure",
"description": "units of measure",
"type": "object",
"required": [ "type", "code"],
"properties": {
"type": { "enum": [ "UnitReference"] },
"id": { "type": "string" , "format":"uri"},
"code":{ "type": "string" }
}
},
"constraint": {
"title": "Constraint",
"description": "Constraint",
"type": "object",
"required": [ "type" ],
"properties": {
"type": { "enum": [ "AllowedValues"] },
"id": { "type": "string" , "format":"uri"},
"interval":{
"type": "array",
"items": { "type": ["number", "string", "boolean"] }
}
}
}
}
}
},
"interpolationRestriction": {
"title": "interpolationRestriction",
"description": "Interpolation restriction",
"type": "object",
"required": [ "type"],
"properties": {
"type": { "enum": [ "InterpolationRestriction"] },
"id": { "type": "string" , "format":"uri"},
"allowedInterpolation": {
"type": "array",
"items": { "type": "string", "format": "uri"}
}
}
}
}
},{
"required": [ "type", "fileReference" ],
"properties": {
"type": { "enum": [ "RangeTypeRef"] },
"id": { "type": "string" , "format":"uri"},
"fileReference": { "type": "string", "format": "uri" }
}
}]
},
"metadata": {
"title": "Metadata",
"description": "The metadata element is a container of any (not further specified) information which should be transported along with the coverage on hand, such as domain-specific metadata.",
"type": "object"
}
}
}