public override void ReadHeader(BinaryReaderWriter br) { base.ReadCommonHeader(br, Type); if (Unknown_0x0C != 0x01) // Bedeutung unklar { throw new Exception("Das ist keine Garmin-TYP-Datei."); } Headertyp htyp = Headertyp.Unknown; Codepage = br.Read2AsUShort(); // Infos zu den Datenblöcken für POI, Polyline und Polygon einlesen (Offset, Länge) // (eigentlich uninteressant, da auf die Daten über die entsprechenden Tabellen zugegriffen wird) PointDatablock.Read(br); PolylineDatablock.Read(br); PolygoneDatablock.Read(br); FamilyID = br.Read2AsUShort(); ProductID = br.Read2AsUShort(); // Infos zu den Tabellen für POI, Polyline und Polygon einlesen (Offset, Länge, Länge der Tabelleneinträge) PointTableBlock = new TypDataBlockWithRecordsize(br); PolylineTableBlock = new TypDataBlockWithRecordsize(br); PolygoneTableBlock = new TypDataBlockWithRecordsize(br); PolygoneDraworderTableBlock = new TypDataBlockWithRecordsize(br); htyp = Headertyp.Standard; // ev. kommt noch NT-Zeugs if (Headerlength > 0x5b) // Extra icons { htyp = Headertyp.Type_6E; // spez. Daten für NT1-Punkte NT_PointTableBlock = new TypDataBlockWithRecordsize(br); nt_unknown_0x65 = br.ReadByte(); // sollte wohl immer 0x1F sein (?), auch 0x0D NT_PointDatablock.Read(br); if (Headerlength > 0x6e) // Extra POI Labels { htyp = Headertyp.Type_9C; nt_unknown_0x6E = br.Read4UInt(); // 0 NT_PointLabelblock.Read(br); // Block-Offset und -Länge nt_unknown_0x7A = br.Read4UInt(); // 6 Datensatzlänge? nt_unknown_0x7E = br.Read4UInt(); // 0x1B NT_LabelblockTable1.Read(br); nt_unknown_0x8A = br.Read4UInt(); // 6 nt_unknown_0x8E = br.Read4UInt(); // 0x1B NT_LabelblockTable2.Read(br); nt_unknown_0x9A = br.Read2AsUShort(); // 0x12 if (Headerlength > 0x9C) // Indexing a selection of POIs { htyp = Headertyp.Type_A4; br.ReadBytes(nt_unknown_0x9C); // scheint nochmal der gleiche Datenblock wie LabelblockTable2 zu sein if (Headerlength > 0xA4) // Active Routing { htyp = Headertyp.Type_AE; br.ReadBytes(nt_unknown_0xA4); if (Headerlength > 0xAE) { htyp = Headertyp.Unknown; nt_unknown_0xA4 = br.ReadBytes(Headerlength - (int)br.Position); // Rest einlesen } } } } } _HeaderTyp = htyp; }
/// <summary> /// liest die Blockdaten /// </summary> /// <param name="br"></param> public new void Read(BinaryReaderWriter br) { Offset = br.Read4UInt(); Recordsize = br.Read2AsUShort(); Length = br.Read4UInt(); }
/// <summary> /// liest die Blockdaten (Segmente) ein /// </summary> /// <param name="br"></param> public void ReadData(BinaryReaderWriter br) { ProductID = br.Read2AsUShort(); FamilyID = br.Read2AsUShort(); TDBVersion = br.Read2AsUShort(); MapSeriesName = br.ReadString(); ProductVersion = br.Read2AsUShort(); MapFamilyName = br.ReadString(); if (TDBVersion >= 407) { Unknown1 = br.ReadByte(); MaxCoordbits4Overview = br.ReadByte(); Unknown2 = br.ReadByte(); Unknown3 = br.ReadByte(); Unknown4 = br.ReadByte(); Unknown5 = br.ReadByte(); Unknown6 = br.ReadByte(); Unknown7 = br.ReadByte(); Unknown8 = br.ReadByte(); Unknown9 = br.ReadByte(); HighestRoutable = br.ReadByte(); Unknown10 = br.ReadByte(); Unknown11 = br.ReadByte(); Unknown12 = br.ReadByte(); Unknown13 = br.ReadByte(); Unknown14 = br.ReadByte(); Unknown15 = br.ReadByte(); Unknown16 = br.ReadByte(); Unknown17 = br.ReadByte(); Unknown18 = br.ReadByte(); Unknown19 = br.ReadByte(); Unknown20 = br.ReadByte(); Unknown21 = br.ReadByte(); Unknown22 = br.ReadByte(); Unknown23 = br.ReadByte(); Unknown24 = br.ReadByte(); Unknown25 = br.ReadByte(); Unknown26 = br.ReadByte(); Unknown27 = br.ReadByte(); Unknown28 = br.ReadByte(); CodePage = br.Read4UInt(); Unknown29 = br.Read4UInt(); Routable = br.ReadByte(); HasProfileInformation = br.ReadByte(); HasDEM = br.ReadByte(); if (TDBVersion >= 411) { Unknown30 = br.ReadByte(); Unknown31 = br.ReadByte(); Unknown32 = br.ReadByte(); Unknown33 = br.ReadByte(); Unknown34 = br.ReadByte(); Unknown35 = br.ReadByte(); Unknown36 = br.ReadByte(); Unknown37 = br.ReadByte(); Unknown38 = br.ReadByte(); Unknown39 = br.ReadByte(); Unknown40 = br.ReadByte(); Unknown41 = br.ReadByte(); Unknown42 = br.ReadByte(); Unknown43 = br.ReadByte(); Unknown44 = br.ReadByte(); Unknown45 = br.ReadByte(); Unknown46 = br.ReadByte(); Unknown47 = br.ReadByte(); Unknown48 = br.ReadByte(); Unknown49 = br.ReadByte(); } } }