The contents of this clause are summarized in Table 5.1
This clause specifies the manner in which data types used in binary-encoded SEDRIS transmittals are encoded.
This part of ISO/IEC 18023 specifies data types using the following form:
name : data type |
where name specifies the identifier of the data and data type specifies the data type.
The box may indicate the bit positions of data types that occupy single storage units (8, 16, 32, or 64 bits). For 64-bit data types only the leading and trailing bit positions are indicated. The other bit positions are implied. If the box does not indicate bit positions, the box represents a complex data type such as an array data type or a record data type whose bit positions can be determined by expanding the data type into its constituent parts.
When a data type has internal fields where the fields represent different meanings, the following form is used:
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
A |
BB |
CC |
DDD |
where each letter group is the name of a subfield. The specification of the subfield is presented in text following the form. While an octet is shown here as an example, the size of the data type may be any of the supported storage units.
Instances of the data types defined in Part 1 of ISO/IEC 18023 and those defined in this part of ISO/IEC 18023 shall be encoded in the form specified in this part of ISO/IEC 18023.
For specifications containing multiple elements, the data shall be encoded in the order presented in this part of ISO/IEC 18023. For variant record types, the data shall be encoded to first encode the discriminant followed by the non-variant fields of the variant record type, if any. The variant field shall be the last field of the variant record type.
These data types are used to store STF structural information as well as the information contained in the fields of object instances.
The STF does not require alignment of data types to specific memory boundaries other than octet boundaries.
The STF supports both big-endian and little-endian representations of data types. For presentation in this part of ISO/IEC 18023, big-endian will be used throughout.
Figure 5.1 illustrates a big endian representation for the 16-bit word-oriented data types.
Figure 5.1 — Big-endian representation for 16-bit word-oriented data types
Figure 5.2 illustrates the big endian representation for the 32-bit word-oriented data types.
31 |
30 |
29 |
28 |
27 |
26 |
25 |
24 |
|
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
|
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Octet 0 |
|
Octet 1 |
|
Octet 2 |
|
Octet 3 |
Figure 5.2 — Big-endian representation for 32-bit word-oriented data types
Figure 5.3 illustrates the big endian representation for the 64-bit word-oriented data types.
63 |
62 |
61 |
60 |
59 |
58 |
57 |
56 |
|
55 |
54 |
53 |
52 |
51 |
50 |
49 |
48 |
••• |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Octet 0 |
|
Octet 1 |
|
Octet 6 |
|
Octet 7 |
Figure 5.3 — Big-endian representation for 64-bit word-oriented data types
The STF_Octet data type specifies an eight-bit field that represents a series of subfields or eight bits of data of unknown composition.
Figure 5.4 specifies this data type. When representing a series of subfields, the meaning of each group of bits representing a subfield is specified.
Figure 5.4 — STF_Octet formulation
where abcdefgh represent the individual bits within an octet.
Integers used for DRM content are represented as octet chain encoded (OCE) data types. These data types are of variable length with only the minimum number of octets needed to represent the value of any particular instance of an integer. Integers used in STF constructs are of fixed size from one to four octets.
The length of a OCE8_Unsigned element is from one to five octets. The most significant bit (MSB) of each octet indicates whether another octet exists in the value. A MSB value of one indicates that another octet follows; a value of zero indicates that this is the last octet in the value. The LSB from the first octet forms the least significant bits of the integer value. The seven least significant bits (LSB) of subsequent octets are preconcatenated to form an Integer_Unsigned value. Figure 5.5 illustrates this data type.
Figure 5.5 — OCE8_Unsigned formulation
The 21 data bits identified by the letters a through u form the 21-bit non-negative integer
opqrstuhijklmnabcdefg
where zeroes fill the unspecified bits of an integer storage unit.
The length of a OCE8_Signed element is from one to five octets. The most significant bit (MSB) of each octet indicates whether another octet exists in the value. A MSB value of one indicates that another octet follows; a value of zero indicates that this is the last octet in the value. The LSB from the first octet forms the least significant bits of the integer value. The seven least significant bits (LSB) of subsequent octets are preconcatenated to form an Integer value. Figure 5.6 specifies this data type.
Figure 5.6 — OCE8_Signed formulation
The 21 data bits identified by the letters a through u form the 21-bit two’s-complement integer:
opqrstuhijklmnabcdefg
where bit o is sign-extended to fill an integer storage unit.
The length of an STF_Byte_Unsigned element is one octet. Figure 5.7 specifies this data type. When included in the more complex constructs, the meaning of bits is specified.
Figure 5.7 — STF_Byte_Unsigned formulation
where the bit sequence abcdefgh forms an eight-bit unsigned integer value.
The length of an STF_Short_Integer_Unsigned element is two octets. Figure 5.8 specifies this data type. This data type is always used to represent non-negative numbers.
Figure 5.8 — STF_Short_Integer_Unsigned formulation
where the bit sequence abcdefghijklmnop forms a non-negative 16-bit integer.
The length of an STF_Integer_Unsigned element is four octets. Figure 5.9 specifies this data type. This data type is always used to represent non-negative numbers.
31 |
30 |
29 |
28 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
a |
b |
c |
d |
e |
f |
g |
h |
i |
j |
k |
l |
m |
n |
o |
p |
q |
r |
s |
t |
u |
v |
w |
x |
y |
z |
0 |
1 |
2 |
3 |
4 |
5 |
Figure 5.9 — STF_Integer_Unsigned formulation
where the bit sequence abcdefghijklmnopqrstuvwxyz012345 forms a 32-bit unsigned integer.
This format supports two types of floating point representations: single-precision and double-precision. These are encoded as specified in IEC 60559.
The STF_Float data type is depicted in Figure 5.10:
31 |
30 |
29 |
28 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
single-precision floating point |
Figure 5.10 — single-precision floating point formulation
where the 32 bits specify a single-precision field or element.
The STF_Long_Float data type is depicted in Figure 5.11.
Figure 5.11 — Double-precision floating point formulation
where the 64 bits specify a double-precision field or element.
No attempt is made to show the characteristic and the mantissa. Such information may be found in IEC 60559.
Within the encoding format, data types that are a composite of basic data types are used. These are specified below.
axes_bounds : Index_Range[axes_count : Short_Integer_Unsigned] |
sentinel_value : Single_Value |
mapped_sentinel_value : Integer_Unsigned |
file_index : STF_Short_Integer_Unsigned (range: 1..30000) |
block_index : STF_Short_Integer_Unsigned (range: 0..4095) |
object_index : STF_Byte_Unsigned (range: 0..255) |
first_index : Integer_Unsigned |
last_index : Integer_Unsigned |
STF specifies the use of null-terminated strings in the headers of its constructs. Such strings are formed by a series of UTF-8 characters as specified in ISO/IEC 10646-1 followed by the NULL character (0x00). This string data type is called STF_Characters.
The data types specified in 5 Fundamental data types of Part 1 of ISO/IEC 18023 are termed SEDRIS data types. These are represented explicitly as required by Part 1 of ISO/IEC 18023 or are mapped to the encoding specific data types specified in this part of ISO/IEC 18023. Only the data types specified in Part 1 of ISO/IEC 18023 that may exist as part of a transmittal shall be encoded. In particular, data types used solely by the SEDRIS API for parameters that do not represent data shall not be encoded.
SEDRIS data types derived from data types defined in ISO/IEC 18026 are encoded in 5.4 Encoding of SRM data types.
The following integer data types specified in 5.2.3 Integers of Part 1 of ISO/IEC 18023 shall be encoded as specified in 5.2.4.2 OCE8_Unsigned:
Short_Integer_Unsigned
Short_Integer_Positive
Integer_Unsigned
Integer_Positive
EDCS_Count
The following integer data types specified in Part 1 of ISO/IEC 18023 shall be encoded as specified in 5.2.4.3 OCE8_Signed:
Short_Integer
Integer
EDCS_Integer
EDCS_Enumerant_Code
The following integer data types specified in Part 1 of ISO/IEC 18023 shall be encoded as 8-bit octets:
Byte
Byte_Unsigned
Byte_Positive
The Float data type specified in 5.2.4 Floating point numbers of Part 1 of ISO/IEC 18023 shall be encoded as an STF_Float as specified in 5.2.5.2 STF_Float.
The Long_Float and EDCS_Long_Float data types specified in 5.2.4 of Part 1 of ISO/IEC 18023 shall both be encoded as STF_Long_Float as specified in 5.2.5.3 STF_Long_Float.
All characters are encoded in UTF-8 as specified in Part 1 of ISO/IEC 10646. Accordingly, individual characters may occupy from one to six octets. The following is a list of all SEDRIS data types that are so encoded as specified in 5.2.3 Characters and strings of Part 1 of ISO/IEC 18023:
Character
The Octet data type as specified in 5.2.2 Octet of Part 1 of ISO/IEC 18023 is encoded as specified in 5.2.3 STF_Octet. The following SEDRIS data type is so encoded:
Octet
The following SEDRIS enumerated data types defined in 5.2.6 Enumerated data types of Part 1 of ISO/IEC 18023 are encoded as specified in 5.2.4.2 OCE8_Unsigned. For each SEDRIS enumerated data type, the mapping of enumerants to integer values is specified:
FALSE → 0
TRUE → 1
NORMAL → 0
PARENT_OVERRIDE → 1
FALSE → 0
TRUE → 1
RIGHT_UP → 0
RIGHT_DOWN → 1
DOWN_RIGHT → 2
DOWN_LEFT → 3
LEFT_UP → 4
LEFT_DOWN → 5
UP_RIGHT → 6
UP_LEFT → 7
Z_NONE → 0
Z_BACK → 1
Z_FRONT → 2
OPEN_INTERVAL → 0
GE_LT_INTERVAL → 1
GT_LE_INTERVAL → 2
CLOSED_INTERVAL → 3
GT_SEMI_INTERVAL → 4
GE_SEMI_INTERVAL → 5
LT_SEMI_INTERVAL → 6
LE_SEMI_INTERVAL → 7
X → 0
Y → 1
Z → 2
ALL → 3
AXIS_REFERENCE_VECTOR → 4
COMPONENT → 0
ROOT → 1
ROOT_AND_COMPONENT → 2
JANUARY → 0
FEBRUARY → 1
MARCH → 2
APRIL → 3
MAY → 4
JUNE → 5
JULY → 6
AUGUST → 7
SEPTEMBER → 8
OCTOBER → 9
NOVEMBER → 10
DECEMBER → 11
UPPER_LEFT_FRONT → 0
UPPER_LEFT_BACK → 1
LOWER_LEFT_FRONT → 2
LOWER_LEFT_BACK → 3
UPPER_RIGHT_FRONT → 4
UPPER_RIGHT_BACK → 5
LOWER_RIGHT_FRONT → 6
LOWER_RIGHT_BACK → 7
RASTER → 0
CALLIGRAPHIC → 1
NONE → 0
ENVIRONMENT_ROOT → 1
MODELS → 2
ENVIRONMENT_ROOT_AND_MODELS → 3
LEFT_FRONT → 0
LEFT_BACK → 1
RIGHT_FRONT → 2
RIGHT_BACK → 3
CLOSEST_TO_ORM_CENTRE → 0
CLOSEST_TO_VERTICAL_DATUM → 1
HIGHEST → 2
FULL → 0
LEAST_DETAILED → 1
LAST → 0
DEFAULT → 1
NONE → 2
The following SEDRIS selection data types in 5.2.7 of Part 1 of ISO/IEC 18023 that may be part of a transmittal are encoded as OCE8_Signed as specified in 5.2.4.3 OCE8_Signed:
Axis_Alignment
Camera_Projection_Type
CI_RoleCode
Colour_Mapping
Colour_Model
Data_Table_Data_Value_Type
DRM_Class
EDCS_Attribute_Code
EDCS_Classification_Code
EDCS_Enumeration_Code
EDCS_Scale_Code
EDCS_Unit_Code
EDCS_Value_Characteristics_Code
Element_Type_Code
Feature_Topology_Level
Font_Style
Geometric_Centre_Code
Geometry_Topology_Level
Grid_Overlap_Operator
HS_Multiplicity_Code
Image_Component_Type
Image_Lookup_Signature
Image_Lookup_Type
Image_Mapping_Method
Image_Projection_Type
Image_Signature
Image_Wrap
Index_Code
Interpolation_Type
Interval_Value_Type
LOD_Data_Type
MD_KeywordTypeCode
MD_RestrictionCode
Media_Format
Ordering_Reason
Pixel_Fill_Method
Predefined_Function
Property_Code_Type
Reference_Vector_Type
Season
Shading_Method
Single_Value_Type
Sound_Format
Spacing_Type
Spatial_Association_Meaning_Type
Spatial_Index_Spacing_Unit
SRM_Elevation_Unit
SRM_Epoch
SRM_Horizontal_Datum_Code
SRM_SRF_Type
SRM_Vertical_Datum_Code
Symbol_Format
Time_Configuration
Time_Data_Type
Time_Measurement_Type
Time_Of_Day
Time_Significance
Underline_Style
Unmatched_State_Behaviour
Variable_Code
Volumetric_Shape
The SEDRIS set data types defined in 5.2.8 Set data types of Part 1 of ISO/IEC 18023 that may be used in a SEDRIS transmittal are each encoded as a 32-bit field with different set members mapped to individual bits as specified below. The bit layout for a set data type is specified in Figure 5.12. Each set data type specifies a particular number of bits to be used. All other bit positions shall be set to 0. A value of 1 in a bit position indicates that that set member is part of the set. A value of zero in a bit position indicates that that set member is not part of the set.
Figure 5.12 — Set data type formulation
FRONT → Bit 0
BACK → Bit 1
SOLID → Bit 0
WIREFRAME → Bit 1
BACKDROP_GROUND → Bit 0
BACKDROP_SKY → Bit 1
CLUTTER_ENHANCED → Bit 2
COLLIDIBLE → Bit 3
CONCAVE → Bit 4
CUT → Bit 5
CUT_IMAGERY → Bit 6
DECAL → Bit 7
DO_NOT_DRAPE → Bit 8
ENABLE_FEATURE_SIZE_BLENDING → Bit 9
ENABLE_FRACTAL → Bit 10
ENABLE_POLYGON_RANGE_BLENDING → Bit 11
FOOTPRINT → Bit 12
HAT_TEST → Bit 13
INACTIVE → Bit 14
INVISIBLE → Bit 15
LASER_RANGE_FINDING → Bit 16
MOON_REFLECTION → Bit 17
OPAQUE_TOP → Bit 18
PROJECTILE_COLLIDIBLE → Bit 19
RAISED → Bit 20
REFLECTIVE → Bit 21
SHADOW → Bit 22
SUN_ILLUMINATED → Bit 23
TERRAIN
→ Bit 24
VISIBLE_FLOOR → Bit 25
VISIBLE_INTERIOR → Bit 26
VISIBLE_PERIMETER → Bit 27
WATER_BODY_SURFACE → Bit 28
OTW → Bit 0
IR_HI_BAND → Bit 1
IR_LOW_BAND → Bit 2
NVG → Bit 3
DAY_TV_COLOUR → Bit 4
DAY_TV_BW → Bit 5
RADAR → Bit 6
SAR → Bit 7
THERMAL → Bit 8
LOW_LIGHT_TV → Bit 9
Fixed length arrays shall be encoded as a sequence of the base data type for the array. If the array is two-dimensional, the sequence shall be sorted such that all the elements of the first index for a value of the second index are represented before the first element of the next value of the second index.
Variable length arrays shall be encoded by first encoding the sizes of each dimension of the array before encoding the array. Once the dimensions are encoded, the array shall be encoded as for fixed length arrays. Some variable length arrays have their lengths specified by other parameters. In this case, the length specified by the other parameter shall be used and only the array content shall be encoded.
Array data types are specified as shown in Figure 5.13:
Figure 5.13 Variable array formulation
This indicates that the first element of the array encoding is an element of type “Length_Data_Type” followed by “length_name” occurrences of an element of type “Content_Data_Type”.
All elements of the array are packed; there are no padding elements.
The following are the SEDRIS array data types specifically defined in 5.3.2 Array data types of Part 1 of ISO/IEC 18023 that may be encoded in an STF-encoded SEDRIS transmittal:
Matrix_3x3 is encoded as nine
STF_Long_Float elements.
Matrix_4x4 is encoded as sixteen
STF_Long_Float elements.
Direction is encoded as three
STF_Long_Float elements
Since these three data types are of fixed size, no length field shall be provided.
Array data types may also be formed from any of the other SEDRIS array types.
Record data types shall be encoded as a sequence of the fields comprising the record. Each field of the record shall be encoded individually according to the requirements of the specified data type until the entire record is encoded.
Variant record data types have different encoding depending on the value of the discriminant. Thus, the value of the discriminant shall first be encoded as appropriate for the data type of the discriminant followed by the encoding of the first field that corresponds with the definition of the record. When the variable field of the record is encountered, only the variant corresponding to the value of the discriminant shall be encoded. After the variable field is encoded, any additional non-variant fields are encoded.
All elements of the record shall be packed; there shall be no padding elements.
The following define the specific encoding of the SEDRIS record data types defined in 5.3.3 Record data types of Part 1 of ISO/IEC 18023 that may exist in a STF-encoded transmittal:
delivery_point : String |
city : String |
administrative_area : String |
postal_code : String |
country : String |
beginning_frame : Short_Integer_Unsigned |
ending_frame : Short_Integer_Unsigned |
linkage : String |
protocol : String |
applicationProfile : String |
name : String |
function : OCE8_Unsigned |
cyan : Long_Float |
magenta : Long_Float |
yellow : Long_Float |
person_name : String |
position_name : String |
organization : String |
address : Address |
voice_phone : String |
fax_phone : String |
tdd_tty_phone : String |
email_address : data_type |
online_resource : CI_OnlineResource |
hours_of_service : String |
other : String |
interval_type : Interval_Type |
For interval_type = OPEN_INTERVAL:
open_interval_value : EDCS_Count_Interval |
For interval_type = GE_LT_INTERVAL:
ge_lt_interval_value : EDCS_Count_Interval |
For interval_type = GT_LE_INTERVAL:
gt_le_interval_value : EDCS_Count_Interval |
For interval_type = CLOSED_INTERVAL:
closed_interval_value : EDCS_Count_Interval |
For interval_type = GT_SEMI_INTERVAL:
gt_semi_interval_value : EDCS_Count |
For interval_type = GE_SEMI_INTERVAL:
ge_semi_interval_value : EDCS_Count |
For interval_type = LT_SEMI_INTERVAL:
lt_semi_interval_value : EDCS_Count |
For interval_type = LE_SEMI_INTERVAL:
le_semi_interval_value : EDCS_Count |
name_of_measure : String |
measure_identification : String |
measure_description : String |
evaluation_method_type : String |
evaluation_method_description : String |
evaluation_procedure : String |
data_time : String |
result : String |
value_type : Data_Table_Data_Value_Type |
table_property_description_index : Integer_Positive |
data_count : Integer_Positive |
For type_of_data = SINGLE_LONG_FLOAT:
single_long_float_values : EDCS_Long_Float[data_count] |
For type_of_data = LONG_FLOAT:
long_float_values : EDCS_Long_Float_Value[data_count] |
For type_of_data = SINGLE_INTEGER:
single_integer_values : EDCS_Integer[data_count] |
For type_of_data = INTEGER:
integer_values : EDCS_Integer_Value[data_count] |
For type_of_data = SINGLE_COUNT:
single_count_values : EDCS_Count[data_count] |
For type_of_data = COUNT:
count_values : EDCS_Count_Value[data_count] |
For type_of_data = INDEX:
index_values : EDCS_Count[data_count] |
For type_of_data = STRING:
string_values : EDCS_String[data_count] |
For type_of_data = CONSTRAINED_STRING:
constrained_string_values : EDCS_String[data_count] |
For type_of_data = KEY:
key_values : EDCS_String[data_count] |
For type_of_data = ENUMERATION:
enumeration_values : EDCS_Enumerant_Code[data_count] |
For type_of_data = BOOLEAN:
boolean_values : EDCS_Boolean[data_count] |
For type_of_data = INDEX_CODE:
index_code_values : Integer_Unsigned[data_count] |
axes_bounds : Index_Range[axes_count : Short_Integer_Unsigned] |
a : EDCS_Count |
b : EDCS_Count |
a : EDCS_Integer |
b : EDCS_Integer |
locale : Locale |
characters : Character[length : EDCS_Count] |
code_type : Element_Code_Type |
For code_type = ATTRIBUTE_CODE:
attribute : EDCS_Attribute_Code |
For code_type = INDEX_CODE:
index : Index_Code |
For code_type = VARIABLE_CODE:
variable : Variable_Code |
hue : Long_Float |
saturation : Long_Float |
value : Long_Float |
data : Byte_Unsigned[data_count : Integer_Unsigned] |
size_horizontal : Integer_Positive |
size_vertical : Integer_Positive |
size_z : Integer_Positive |
horizontal : Short_Integer_Unsigned |
vertical : Short_Integer_Unsigned |
z : Short_Integer_Unsigned |
first_index : Integer_Unsigned |
last_index : Integer_Unsigned |
interval_type : Interval_Type |
For interval_type = OPEN_INTERVAL:
open_interval_value : EDCS_Integer_Interval |
For interval_type = GE_LT_INTERVAL:
ge_lt_interval_value : EDCS_Integer_Interval |
For interval_type = GT_LE_INTERVAL:
gt_le_interval_value : EDCS_Integer_Interval |
For interval_type = CLOSED_INTERVAL:
closed_interval_value : EDCS_Integer_Interval |
For interval_type = GT_SEMI_INTERVAL:
gt_semi_interval_value : EDCS_Integer |
For interval_type = GE_SEMI_INTERVAL:
ge_semi_interval_value : EDCS_Integer |
For interval_type = LT_SEMI_INTERVAL:
lt_semi_interval_value : EDCS_Integer |
For interval_type = LE_SEMI_INTERVAL:
le_semi_interval_value : EDCS_Integer |
value_type : Interval_Value_Type |
For value_type = REAL:
real_value : Long_FLoat_Interval_Value |
For value_type = INTEGER:
integer_value : Integer_Interval_Value |
For value_type = COUNT:
count_value : Count_Interval_Value |
language : Character[2] |
country : Character[3] |
a : EDCS_Long_Float |
b : EDCS_Long_Float |
interval_type : Interval_Type |
For interval_type = OPEN_INTERVAL:
open_interval_value : Long_Float_Interval |
For interval_type = GE_LT_INTERVAL:
ge_lt_interval_value : Long_Float_Interval |
For interval_type = GT_LE_INTERVAL:
gt_le_interval_value : Long_Float_Interval |
For interval_type = CLOSED_INTERVAL:
closed_interval_value : Long_Float_Interval |
For interval_type = GT_SEMI_INTERVAL:
gt_semi_interval_value : EDCS_Long_Float |
For interval_type = GE_SEMI_INTERVAL:
ge_semi_interval_value : EDCS_Long_Float |
For interval_type = LT_SEMI_INTERVAL:
lt_semi_interval_value : EDCS_Long_Float |
For interval_type = LE_SEMI_INTERVAL:
le_semi_interval_value : EDCS_Long_Float |
classification : OCE8_Unsigned |
userNote : String |
classificationSystem : String |
handlingDescription : String |
code_type : Property_Code_Type |
For code_type = ATTRIBUTE:
attribute : EDCS_Attribute_Code |
For code_type = VARIABLE:
variable : Variable_Code |
unit : EDCS_Unit_Code |
scale : EDCS_Scale_Code |
long_float_value : Long_Float_Interval_Value |
red : Long_Float |
green : Long_Float |
blue : Long_Float |
ccw_limit : Long_Float |
cw_limit : Long_Float |
type_of_data : Single_Value_Type |
For type_of_data = FLOAT:
float_value : EDCS_Long_Float |
For type_of_data = INTEGER:
integer_value : EDCS_Integer |
For type_of_data = COUNT:
count_value : EDCS_Count |
For type_of_data = INDEX:
index_value : EDCS_Count |
For type_of_data = STRING:
string_value : EDCS_String |
For type_of_data = CONSTRAINED_STRING:
constrained_string_value : EDCS_String |
For type_of_data = KEY:
key_value : EDCS_String |
For type_of_data = ENUMERATION:
enumeration_value : EDCS_Enumerant_Code |
For type_of_data = BOOLEAN:
boolean_value : EDCS_Boolean |
locale : Locale |
characters : Character[length : Integer_Unsigned] |
font_family : String[32] |
font_style : Font_Style |
font_size : Float |
underline_style : Underline_Style |
day_of_year : Integer_Unsigned |
month : Month |
month : Month |
day : Integer_Unsigned |
hour : Byte_Unsigned |
month : Month |
day : Integer_Unsigned |
hour : Byte_Unsigned |
minutes : Byte_Unsigned |
month : Month |
day : Integer_Unsigned |
hour : Byte_Unsigned |
minutes : Byte_Unsigned |
seconds : Long_Float |
time_configuration : Time_Configuration |
For time_configuration = DATE_YMD_AND_TIME_HMS:
ymd_hms : Time_YMD_HMS_Value |
For time_configuration = DATE_YMD_AND_TIME_HM:
ymd_hm : Time_YMD_HM_Value |
For time_configuration = DATE_YMD_AND_TIME_H:
ymd_h : Time_YMD_H_Value |
For time_configuration = DATE_YMD:
ymd : Time_YMD_Value |
For time_configuration = DATE_YD_AND_TIME_HMS:
yd_hms : Time_YD_HMS_Value |
For time_configuration = DATE_YD_AND_TIME_HM:
yd_hm : Time_YD_HM_Value |
For time_configuration = DATE_YD_AND_TIME_H:
yd_h : Time_YD_H_Value |
For time_configuration = DATE_YD:
yd : Time_YD_Value |
For time_configuration = DATE_MD_AND_TIME_HMS:
md_hms : Time_MD_HMS_Value |
For time_configuration = DATE_MD_AND_TIME_HM:
md_hm : Time_MD_HM_Value |
For time_configuration = DATE_MD_AND_TIME_H:
md_h : Time_MD_H_Value |
For time_configuration = DATE_Y:
y : Time_Y_Value |
For time_configuration = DATE_M:
m : Time_M_Value |
For time_configuration = DAY_OF_YEAR:
day_of_year : Time_Day_Of_Year_Value |
year : Integer |
year : Integer |
day_of_year : Integer_Unsigned |
year : Integer |
day_of_year : Integer_Unsigned |
hour : Byte_Unsigned |
year : Integer |
day_of_year : Integer_Unsigned |
hour : Byte_Unsigned |
minutes : Byte_Unsigned |
year : Integer |
day_of_year : Integer_Unsigned |
hour : Byte_Unsigned |
minutes : Byte_Unsigned |
seconds : Long_Float |
year : Integer |
month : Month |
day : Integer_Unsigned |
year : Integer |
month : Month |
day : Integer_Unsigned |
hour : Byte_Unsigned |
year : Integer |
month : Month |
day : Integer_Unsigned |
hour : Byte_Unsigned |
minutes : Byte_Unsigned |
year : Integer |
month : Month |
day : Integer_Unsigned |
hour : Byte_Unsigned |
minutes : Byte_Unsigned |
seconds : Long_Float |
characters : Character[length : Integer_Unsigned] |
SEDRIS data types used by the SEDRIS API are not needed to represent a SEDRIS transmittal and, hence, shall not be encoded. This includes all SEDRIS private and function data types.
The data types specified in ISO/IEC 18026 are termed SRM data types. The SRM data types are represented explicitly as required by ISO/IEC 18026 or are mapped to the encoding specific data types specified in this part of ISO/IEC 18023. Only the SRM data types specified in Part 1 of ISO/IEC 18023 that may exist as part of a transmittal or data types that expand the definition of those specified in Part 1 of ISO/IEC 18023 that are specified in ISO/IEC 18026 are encoded.
The following integer data types specified in ISO/IEC 18026 shall be encoded as specified in 5.2.4.2 OCE8_Unsigned:
SRM_Integer_Positive
SRM_Integer_Unsigned
SRM_Short_Integer_Positive
SRM_Short_Integer_Unsigned
The following integer data types specified in ISO/IEC 18026 shall be encoded as specified in 5.2.4.3 OCE8_Signed:
SRM_GTRS_GCS_Code
SRM_Integer
SRM_Mars_TM_Body_Code
SRM_Mars_TM_Pole_Code
SRM_Short_Integer
SRM_SRFS_Member_Code
The following integer data types specified in ISO/IEC 18026 shall be encoded as 8-bit octets:
SRM_Byte
SRM_Byte_Positive
SRM_Byte_Unsigned
The SRM_Long_Float data type specified in ISO/IEC 18026 shall be encoded as STF_Long_Float as specified in 5.2.5.3 STF_Long_Float.
The following SRM enumerated data types specified in ISO/IEC 18026 shall be encoded as OCE8_Unsigned as specified in 5.2.4.2 OCE8_Unsigned. For each SRM enumerated data type, the mapping of enumerants to integer values is specified:
POSITIVE_PRIMARY_AXIS → 0
POSITIVE_SECONDARY_AXIS → 1
POSITIVE_TERTIARY_AXIS → 2
NEGATIVE_PRIMARY_AXIS → 3
NEGATIVE_SECONDARY_AXIS → 4
NEGATIVE_TERTIARY_AXIS → 5
FALSE → 0
TRUE → 1
NORTH → 0
SOUTH → 1
NORTH → 0
SOUTH → 1
NORTHERN_POLE → 0
SOUTHERN_POLE → 1
The following SRM selection data types in ISO/IEC 18026 shall be encoded as specified in 5.2.4.3 OCE8_Signed:
SRM_AL_SPCS_Code
SRM_Coordinate_Code
SRM_Coordinate_Valid_Region
SRM_Ellipsoid_Of_Revolution
SRM_HSR_Code
SRM_Lambert_NTF_Code
SRM_ORM_Code
SRM_SRF_Code
SRM_SRFS_Code
SRM_SRFT_Code
SRM_UTM_Code
SRM_VOS_Code
SRM_WI_SPCS_Code
SRM record data types shall be encoded as a sequence of the fields comprising the record. Each field of the record shall be encoded individually according to the requirements of the specified data type until the entire record is encoded.
Variant record data types have different encoding depending on the value of the discriminant. Thus, the value of the discriminant shall first be encoded as appropriate for the data type of the discriminant followed by the encoding of the first field that corresponds with the definition of the record. When the variable field of the record is encountered, only the variant corresponding to the value of the discriminant shall be encoded. After the variable field is encoded, any additional non-variant fields are encoded.
All elements of the record shall be packed; there shall be no padding elements.
The following define the specific encoding of the SRM record data types defined in ISO/IEC 18026 that may exist in an STF-encoded transmittal:
azimuth : SRM_Long_Float |
radius : SRM_Long_Float |
longitude : SRM_Long_Float |
latitude : SRM_Long_Float |
ellipsoidal_height : SRM_Long_Float |
longitude : SRM_Long_Float |
latitude : SRM_Long_Float |
coordinate_code : SRM_Coordinate_Code |
For code_type = AZ_2D:
az_2d : SRM_AZ_2D_Coordinate |
For code_type = CC_3D:
cc_3d : SRM_Euclidean_3D_Coordinate |
For code_type = CD_3D:
cd_3d : SRM_CD_3D_Coordinate |
For code_type = CD_SURFACE:
cd_surface : SRM_CD_Surface_Coordinate |
For code_type = CM_3D:
cm_3d : SRM_Spherical_3D_Coordinate |
For code_type = EC_AUGMENTED_3D:
ec_augmented_3d : SRM_Map_Projection_3D_Coordinate |
For code_type = EC_SURFACE:
ec_surface_3d : SRM_Map_Projection_Surface_Coordinate |
For code_type = EI_3D:
ei_3d : SRM_EI_3D_Coordinate |
For code_type = HAEC_3D:
haec_3d : SRM_Spherical_3D_Coordinate |
For code_type = HEEC_3D:
heec_3d : SRM_Spherical_3D_Coordinate |
For code_type = HEEQ_3D:
heeq_3d : SRM_Spherical_3D_Coordinate |
For code_type = LCC_AUGMENTED_3D:
lcc_augmented_3d : SRM_Map_Projection_3D_Coordinate |
For code_type = LCC_SURFACE:
lcc_surface : SRM_Map_Projection_Surface_Coordinate |
For code_type = LSR_2D:
lsr_2d : SRM_Euclidean_2D_Coordinate |
For code_type = LSR_3D:
lsr_3d : SRM_Euclidean_3D_Coordinate |
For code_type = LTSAS_3D:
ltsas_3d : SRM_LTSAS_3D_Coordinate |
For code_type = LTSAS_SURFACE:
ltsas_surface : SRM_LTSAS_Surface_Coordinate |
For code_type = LTSC_3D:
ltsc_3d : SRM_LTSC_3D_Coordinate |
For code_type = LTSC_SURFACE:
ltsc_surface : SRM_LTSC_Surface_Coordinate |
For code_type = LTSE_3D:
ltse_3d : SRM_LTSE_3D_Coordinate |
For code_type = LTSE_SURFACE:
ltse_surface : SRM_LTSE_Surface_Coordinate |
For code_type = M_AUGMENTED_3D:
m_augmented_3d : SRM_Map_Projection_3D_Coordinate |
For code_type = M_SURFACE:
m_surface : SRM_Map_Projection_Surface_Coordinate |
For code_type = OM_AUGMENTED_3D:
om_augmented_3d : SRM_Map_Projection_3D_Coordinate |
For code_type = OM_SURFACE:
om_surface : SRM_Map_Projection_Surface_Coordinate |
For code_type = POLAR_2D:
polar_2d : SRM_Polar_2D_Coordinate |
For code_type = PS_AUGMENTED_3D:
ps_augmented_3d : SRM_Map_Projection_3D_Coordinate |
For code_type = PS_SURFACE:
ps_surface : SRM_Map_Projection_Surface_Coordinate |
For code_type = SEC_3D:
sec_3d : SRM_Spherical_3D_Coordinate |
For code_type = SEQ_3D:
seq_3d : SRM_Spherical_3D_Coordinate |
For code_type = SM_3D:
sm_3d : SRM_Spherical_3D_Coordinate |
For code_type = SMS_3D:
sms_3d : SRM_Spherical_3D_Coordinate |
For code_type = TM_AUGMENTED_3D:
tm_augmented_3d : SRM_Map_Projection_3D_Coordinate |
For code_type = TM_SURFACE:
tm_surface : SRM_Map_Projection_Surface_Coordinate |
origin_longitude : SRM_Long_Float |
standard_latitude : SRM_Long_Float |
central_scale : SRM_Long_Float |
false_easting : SRM_Long_Float |
false_northing : SRM_Long_Float |
orm_parameters : SRM_ORM_Parameters |
ec_parameters : SRM_EC_Parameters |
right_ascension : SRM_Long_Float |
declination : SRM_Long_Float |
radius : SRM_Long_Float |
u : SRM_Long_Float |
v : SRM_Long_Float |
u : SRM_Long_Float |
v : SRM_Long_Float |
w : SRM_Long_Float |
origin_longitude : SRM_Long_Float |
origin_latitude : SRM_Long_Float |
north_parallel_geodetic_latitude : SRM_Long_Float |
south_parallel_geodetic_latitude : SRM_Long_Float |
false_easting : SRM_Long_Float |
false_northing : SRM_Long_Float |
orm_parameters : SRM_ORM_Parameters |
lcc_parameters : SRM_LCC_Parameters |
forward_direction : SRM_Axis_Direction |
orm_parameters : SRM_ORM_Parameters |
lsr_2D_parameters : SRM_LSR_2D_Parameters |
up_direction : SRM_Axis_Direction |
forward_direction : SRM_Axis_Direction |
orm_parameters : SRM_ORM_Parameters |
lsr_3D_parameters : SRM_LSR_3D_Parameters |
geodetic_longitude : SRM_Long_Float |
geodetic_latitude : SRM_Long_Float |
azimuth : SRM_Long_Float |
height_offset : SRM_Long_Float |
orm_parameters : SRM_ORM_Parameters |
lt_parameters : SRM_LT_Parameters |
azimuth : SRM_Long_Float |
angle : SRM_Long_Float |
radius : SRM_Long_Float |
azimuth : SRM_Long_Float |
angle : SRM_Long_Float |
angle : SRM_Long_Float |
radius : SRM_Long_Float |
height : SRM_Long_Float |
angle : SRM_Long_Float |
radius : SRM_Long_Float |
x : SRM_Long_Float |
y : SRM_Long_Float |
height : SRM_Long_Float |
geodetic_longitude : SRM_Long_Float |
geodetic_latitude : SRM_Long_Float |
azimuth : SRM_Long_Float |
x_false_origin : SRM_Long_Float |
y_false_origin : SRM_Long_Float |
height_offset : SRM_Long_Float |
orm_parameters : SRM_ORM_Parameters |
ltse_parameters : SRM_LTSE_Parameters |
x : SRM_Long_Float |
y : SRM_Long_Float |
easting : SRM_Long_Float |
northing : SRM_Long_Float |
ellipsoidal_height : SRM_Long_Float |
easting : SRM_Long_Float |
northing : SRM_Long_Float |
origin_longitude : SRM_Long_Float |
origin_latitude : SRM_Long_Float |
central_scale : SRM_Long_Float |
false_easting : SRM_Long_Float |
false_northing : SRM_Long_Float |
orm_parameters : SRM_ORM_Parameters |
mercator_parameters : SRM_Mercator_Parameters |
longitude_1 : SRM_Long_Float |
latitude_1 : SRM_Long_Float |
longitude_2 : SRM_Long_Float |
latitude_2 : SRM_Long_Float |
central_scale : SRM_Long_Float |
false_easting : SRM_Long_Float |
false_northing : SRM_Long_Float |
orm_parameters : SRM_ORM_Parameters |
om_parameters : SRM_OM_Parameters |
orm_code : SRM_ORM_Code |
hsr_code : SRM_HSR_Code |
delta_x : SRM_Long_Float |
delta_y : SRM_Long_Float |
omega : SRM_Long_Float |
delta_s : SRM_Long_Float |
delta_x : SRM_Long_Float |
delta_y : SRM_Long_Float |
delta_z : SRM_Long_Float |
omega_1 : SRM_Long_Float |
omega_2 : SRM_Long_Float |
omega_3 : SRM_Long_Float |
delta_s : SRM_Long_Float |
angle : SRM_Long_Float |
radius : SRM_Long_Float |
polar_aspect : SRM_Polar_Aspect |
origin_longitude : SRM_Long_Float |
origin_latitude : SRM_Long_Float |
standard_latitude : SRM_Long_Float |
central_scale : SRM_Long_Float |
false_easting : SRM_Long_Float |
false_northing : SRM_Long_Float |
orm_parameters : SRM_ORM_Parameters |
ps_parameters : SRM_PS_Parameters |
longitude : SRM_Long_Float |
latitude : SRM_Long_Float |
radius : SRM_Long_Float |
vos_code : SRM_VOS_Code |
srf_parameters_info : SRM_SRF_Parameters_Info |
srf_parameters_info_code : SRM_SRF_Parameters_Info_Code |
For code_type = TEMPLATE:
srf_template : SRM_SRF_Template_Parameters |
For code_type = SET:
srf_set : SRM_SRF_Set_Info |
For code_type = INSTANCE:
srf_instance : SRM_SRF_Code |
orm_parameters : SRM_ORM_Parameters |
set_code : SRM_SRFS_Code |
member_code : SRM_Integer |
template_code : SRM_SRFT_Code |
For code_type = CELESTIOCENTRIC:
cc_srf_parameters : SRM_ORM_Parameters |
For code_type = LSR_3D:
lsr_3d_srf_parameters : SRM_LSR_3D_SRF_Parameters |
For code_type = LSR_2D:
lsr_2d_srf_parameters : SRM_LSR_2D_SRF_Parameters |
For code_type = CELESTIODETIC:
cd_srf_parameters : SRM_ORM_Parameters |
For code_type = LOCAL_TANGENT_SPACE_EUCLIDEAN:
ltse_srf_parameters : SRM_LTSE_SRF_Parameters |
For code_type = LOCAL_TANGENT_SPACE_AZ_SPHERICAL:
ltsas_srf_parameters : SRM_LT_SRF_Parameters |
For code_type = AZIMUTHAL:
az_srf_parameters : SRM_ORM_Parameters |
For code_type = LOCAL_TANGENT_SPACE_CYLINDRICAL:
ltsc_srf_parameters : SRM_LT_SRF_Parameters |
For code_type = POLAR:
polar_srf_parameters : SRM_ORM_Parameters |
For code_type = CELESTIOMAGNETIC:
cm_srf_parameters : SRM_ORM_Parameters |
For code_type = EQUATORIAL_INERTIAL:
ei_srf_parameters : SRM_ORM_Parameters |
For code_type = SOLAR_ECLIPTIC:
sec_srf_parameters : SRM_ORM_Parameters |
For code_type = SOLAR_EQUATORIAL:
seq_srf_parameters : SRM_ORM_Parameters |
For code_type = SOLAR_MAGNETOSPHERIC:
sms_srf_parameters : SRM_ORM_Parameters |
For code_type = SOLAR_MAGNETIC:
sm_srf_parameters : SRM_ORM_Parameters |
For code_type = HELIO_ARIES_ECLIPTIC:
haec_srf_parameters : SRM_ORM_Parameters |
For code_type = HELIO_EARTH_ECLIPTIC:
heec_srf_parameters : SRM_ORM_Parameters |
For code_type = HELIO_EARTH_EQUATORIAL
heeq_srf_parameters : SRM_ORM_Parameters |
For code_type = MERCATOR:
m_srf_parameters : SRM_Mercator_SRF_Parameters |
For code_type = OBLIQUE_MERCATOR:
om_srf_parameters : SRM_OM_SRF_Parameters |
For code_type = TRANSVERSE_MERCATOR:
tm_srf_parameters : SRM_Mercator_SRF_Parameters |
For code_type = LAMBERT_CONFORMAL_CONIC:
lcc_srf_parameters : SRM_LCC_SRF_Parameters |
For code_type = POLAR_STEROGRAPHIC:
ps_srf_parameters : SRM_PS_SRF_Parameters |
For code_type = EQUIDISTANT_CYLINDRICAL:
ec_srf_parameters : SRM_EC_SRF_Parameters |
vector : SRM_Long_Float[3] |
http://www.iso.ch/iso/en/ittf/PubliclyAvailableStandards/ISO_IEC_18023-3_Ed1.html