示例#1
0
        //Load Directory
        private List<ISO_8211_Directory> Load_Directory(ISO_8211_Leader leader, int fullPos)
        {
            List<ISO_8211_Directory> dirList = new List<ISO_8211_Directory>();
            int directory_size = leader.bafa - leader.SIZE;
            char[] directoryBuff = new char[directory_size];
            Array.Copy(fullData, leader.SIZE + fullPos, directoryBuff, 0, directory_size);

            int field_length_size = leader.sizeOfFieldLengthField - 48;
            char[] field_size_buff = new char[field_length_size];

            int pos_size = leader.sizeOfFieldPositionField - 48;
            char[] pos_size_buff = new char[pos_size];

            int pos = 0;
            while (directoryBuff[pos] != (int)DELIMITERS.UT)
            {
                ISO_8211_Directory directory = new ISO_8211_Directory();
                Array.Copy(directoryBuff, pos, directory.Tag, 0, 4); // The size of field tag field is always 4 in S-57. S-101?
                pos += 4;

                //Console.Write("Directory Tag name = " + new string(directory.Tag));

                Array.Copy(directoryBuff, pos, field_size_buff, 0, field_length_size);
                directory.Length = Utilities.charArray_to_int32(field_size_buff, field_size_buff.Length);
                pos += field_length_size;
                //Console.Write(" Directory field length = " + directory.Length);

                Array.Copy(directoryBuff, pos, pos_size_buff, 0, pos_size);
                directory.Position = Utilities.charArray_to_int32(pos_size_buff, pos_size_buff.Length);
                pos += pos_size;
                //Console.WriteLine(" Directory position = " + directory.Position);
                dirList.Add(directory);
            }

            return dirList;
        }
示例#2
0
 // Load Leader
 private ISO_8211_Leader Load_Leader(int fullPos)
 {
     ISO_8211_Leader leader = new ISO_8211_Leader();
     char[] buffLeader = new char[leader.SIZE];
     Array.Copy(fullData, fullPos, buffLeader, 0, leader.SIZE);
     leader.setValue(buffLeader);
     return leader;
 }
示例#3
0
        //Load DataDescriptions Record
        private Dictionary<string, ISO_8211_Record_DataDesc> Load_DataDescriptionRecord(ISO_8211_Leader leader, List<ISO_8211_Directory> dirList, int fullPos)
        {
            Dictionary<string, ISO_8211_Record_DataDesc> descList = new Dictionary<string, ISO_8211_Record_DataDesc>();
            int descPos = leader.bafa+fullPos;
            ISO_8211_Directory entry;
            int sp = 0;
            int ep = 0;

            for (int i = 0; i < dirList.Count; i++)
            {
                entry = dirList[i];
                sp = descPos;
                ep = descPos;

                ISO_8211_Record_DataDesc desc = new ISO_8211_Record_DataDesc();

                //Field controls
                while (fullData[ep++] != (int)DELIMITERS.FCT) ;
                char[] fieldControlBuff = new char[ep - sp];
                Array.Copy(fullData, sp, fieldControlBuff, 0, ep - sp);
                desc.field_control = fieldControlBuff;
                sp = ep;
                //Console.WriteLine("Field Controls : " + new string(fieldControlBuff));

                //DataField name
                while (fullData[ep++] != (int)DELIMITERS.FT) ;
                char[] dataFieldNameBuff = new char[ep - sp];
                Array.Copy(fullData, sp, dataFieldNameBuff, 0, ep - sp);
                desc.field_name = new string(dataFieldNameBuff);
                sp = ep;
                //Console.WriteLine("DataField name : " + new string(dataFieldNameBuff));

                //Array descriptor
                while (fullData[ep++] != (int)DELIMITERS.UT) ;
                char[] arrayDescStrBuff = new char[ep - sp];
                Array.Copy(fullData, sp, arrayDescStrBuff, 0, ep - sp);
                if (arrayDescStrBuff.Contains((char)DELIMITERS.FT))
                {
                    int arrayDescIndex = 0;
                    while (arrayDescStrBuff[arrayDescIndex++] != (char)DELIMITERS.FT) ;
                    char[] arrayDescBuff = new char[arrayDescIndex];
                    Array.Copy(arrayDescStrBuff, 0, arrayDescBuff, 0, arrayDescIndex);
                    desc.array_desc_str = new string(arrayDescBuff);
                    desc.array_descriptions = SplitArrayDescStr(desc.array_desc_str,leader.sizeOfFieldTagField-48);
                    //Console.WriteLine("Array descriptor : " + desc.array_desc_str);

                    int typeIndex = arrayDescIndex;
                    while (arrayDescStrBuff[typeIndex++] != (char)DELIMITERS.UT) ;
                    char[] fmfBuff = new char[typeIndex - arrayDescIndex];
                    Array.Copy(arrayDescStrBuff, arrayDescIndex, fmfBuff, 0, typeIndex - arrayDescIndex);
                    desc.format_control_str = new string(fmfBuff);
                    desc.format_controls = SplitFormatControlStr(desc.format_control_str);
                    //Console.WriteLine("Format Control : " + desc.format_control_str);
                }
                else
                {
                    desc.array_desc_str = new string(arrayDescStrBuff);
                    desc.array_descriptions = SplitArrayDescStr(desc.array_desc_str, leader.sizeOfFieldTagField - 48);
                    //Console.WriteLine("Array descriptor : " + desc.array_desc_str.ToString());
                }
                descList.Add(new string(dirList[i].Tag),desc);
                descPos = descPos + entry.Length;
                //Console.WriteLine();
            }
            return descList;
        }