// 전자해도 원본 데이터(.000) 빌더 함수 public void Build(byte[] readDataArray) { switch (EncodingType) { case ENCODING_TYPE.ISO8211: if (dataType == DATA_TYPE.S101) s101 = S_101BinderingTo(iSO_8211.Load_ISO_IEC_8211(readDataArray)); break; default: break; } BindingInputSchema(); }
//S-101 구조로 바인딩 함수 private S101 S_101BinderingTo(List<List<Common.Common_Record>> builderRecordList) { S101 s101 = new S101(); foreach (var records in builderRecordList) { string typeTag = records[0].tag; if (typeTag.Equals("DSID")) { #region DSID DataSetGeneralInformationRecord dsgir = new DataSetGeneralInformationRecord(); foreach (var record in records) { DataSetGeneralInformationRecord.DSGIR_Type tag = (DataSetGeneralInformationRecord.DSGIR_Type)Enum.Parse(typeof(DataSetGeneralInformationRecord.DSGIR_Type), record.tag); switch (tag) { case DataSetGeneralInformationRecord.DSGIR_Type.DSID: dsgir.dsid.rcnm = record.SubRecords[0].value.uintValue; dsgir.dsid.rcid = record.SubRecords[1].value.uintValue; dsgir.dsid.ensp = record.SubRecords[2].value.stringValue; dsgir.dsid.ened = record.SubRecords[3].value.stringValue; dsgir.dsid.prsp = record.SubRecords[4].value.stringValue; dsgir.dsid.pred = record.SubRecords[5].value.stringValue; dsgir.dsid.prof = record.SubRecords[6].value.stringValue; dsgir.dsid.dsnm = record.SubRecords[7].value.stringValue; dsgir.dsid.dstl = record.SubRecords[8].value.stringValue; dsgir.dsid.dsrd = record.SubRecords[9].value.stringValue; dsgir.dsid.dslg = record.SubRecords[10].value.stringValue; dsgir.dsid.dsab = record.SubRecords[11].value.stringValue; dsgir.dsid.dsed = record.SubRecords[12].value.stringValue; dsgir.dsid.dstc = new List<uint>(); for (int i = 13; i < record.SubRecords.Count; i++) { dsgir.dsid.dstc.Add(record.SubRecords[i].value.uintValue); } break; case DataSetGeneralInformationRecord.DSGIR_Type.DSSI: dsgir.dsid.dssi = new DataSetGeneralInformationRecord.DSID.DSSI(); dsgir.dsid.dssi.dcox = record.SubRecords[0].value.doubleValue; dsgir.dsid.dssi.dcoy = record.SubRecords[1].value.doubleValue; dsgir.dsid.dssi.dcoz = record.SubRecords[2].value.doubleValue; dsgir.dsid.dssi.cmfx = record.SubRecords[3].value.uintValue; dsgir.dsid.dssi.cmfy = record.SubRecords[4].value.uintValue; dsgir.dsid.dssi.cmfz = record.SubRecords[5].value.uintValue; dsgir.dsid.dssi.noir = record.SubRecords[6].value.uintValue; dsgir.dsid.dssi.nopn = record.SubRecords[7].value.uintValue; dsgir.dsid.dssi.nomn = record.SubRecords[8].value.uintValue; dsgir.dsid.dssi.nocn = record.SubRecords[9].value.uintValue; dsgir.dsid.dssi.noxn = record.SubRecords[10].value.uintValue; dsgir.dsid.dssi.nosn = record.SubRecords[11].value.uintValue; dsgir.dsid.dssi.nofr = record.SubRecords[12].value.uintValue; break; case DataSetGeneralInformationRecord.DSGIR_Type.ATCS: for (int i = 0; i < record.SubRecords.Count; i+=2) { dsgir.dsid.ATCS.Add((ushort)record.SubRecords[i + 1].value.uintValue, record.SubRecords[i].value.stringValue); } break; case DataSetGeneralInformationRecord.DSGIR_Type.ITCS: for (int i = 0; i < record.SubRecords.Count; i += 2) { dsgir.dsid.ITCS.Add((ushort)record.SubRecords[i + 1].value.uintValue, record.SubRecords[i].value.stringValue); } break; case DataSetGeneralInformationRecord.DSGIR_Type.FTCS: for (int i = 0; i < record.SubRecords.Count; i += 2) { dsgir.dsid.FTCS.Add((ushort)record.SubRecords[i + 1].value.uintValue, record.SubRecords[i].value.stringValue); } break; case DataSetGeneralInformationRecord.DSGIR_Type.IACS: for (int i = 0; i < record.SubRecords.Count; i += 2) { dsgir.dsid.IACS.Add((ushort)record.SubRecords[i + 1].value.uintValue, record.SubRecords[i].value.stringValue); } break; case DataSetGeneralInformationRecord.DSGIR_Type.FACS: for (int i = 0; i < record.SubRecords.Count; i += 2) { dsgir.dsid.FACS.Add((ushort)record.SubRecords[i + 1].value.uintValue, record.SubRecords[i].value.stringValue); } break; case DataSetGeneralInformationRecord.DSGIR_Type.ARCS: for (int i = 0; i < record.SubRecords.Count; i += 2) { dsgir.dsid.ARCS.Add((ushort)record.SubRecords[i + 1].value.uintValue, record.SubRecords[i].value.stringValue); } break; case DataSetGeneralInformationRecord.DSGIR_Type.ATTR: for (int i = 0; i < record.SubRecords.Count;) { CommonRecord.ATTR attr = new CommonRecord.ATTR(); attr.natc = (ushort) record.SubRecords[i++].value.uintValue; attr.atix = (ushort)record.SubRecords[i++].value.uintValue; attr.paix = (ushort)record.SubRecords[i++].value.uintValue; attr.atin = record.SubRecords[i++].value.uintValue; attr.atvl = record.SubRecords[i++].value.stringValue; dsgir.dsid.ATTR.Add(attr); } break; default: break; } } s101.dsgir = dsgir; #endregion } else if (typeTag.Equals("CSID")) { #region CSID DataSetCoordinateReferenceSystemRecord dscrsr = new DataSetCoordinateReferenceSystemRecord(); foreach (var record in records) { DataSetCoordinateReferenceSystemRecord.DSCRSR_Type tag = (DataSetCoordinateReferenceSystemRecord.DSCRSR_Type)Enum.Parse(typeof(DataSetCoordinateReferenceSystemRecord.DSCRSR_Type), record.tag); switch (tag) { case DataSetCoordinateReferenceSystemRecord.DSCRSR_Type.CSID: dscrsr.csid.rcnm = record.SubRecords[0].value.uintValue; dscrsr.csid.rcid = record.SubRecords[1].value.uintValue; dscrsr.csid.ncrc = record.SubRecords[2].value.uintValue; break; case DataSetCoordinateReferenceSystemRecord.DSCRSR_Type.CRSH: DataSetCoordinateReferenceSystemRecord.CRSH crsh = new DataSetCoordinateReferenceSystemRecord.CRSH(); crsh.crix = record.SubRecords[0].value.uintValue; crsh.crst = record.SubRecords[1].value.uintValue; crsh.csty = record.SubRecords[2].value.uintValue; crsh.crnm = record.SubRecords[3].value.stringValue; crsh.crsi = record.SubRecords[4].value.stringValue; crsh.crss = record.SubRecords[5].value.uintValue; crsh.scri = record.SubRecords[6].value.stringValue; dscrsr.csid.crsh.Add(crsh); break; case DataSetCoordinateReferenceSystemRecord.DSCRSR_Type.CSAX: DataSetCoordinateReferenceSystemRecord.CRSH targetCrshForCsax = dscrsr.csid.crsh[dscrsr.csid.crsh.Count - 1]; targetCrshForCsax.csax = new List<DataSetCoordinateReferenceSystemRecord.CRSH.CSAX>(); for (int i = 0; i < record.SubRecords.Count; i+=2) { DataSetCoordinateReferenceSystemRecord.CRSH.CSAX csax = new DataSetCoordinateReferenceSystemRecord.CRSH.CSAX(); csax.axty = record.SubRecords[i].value.uintValue; csax.axum = record.SubRecords[i + 1].value.uintValue; targetCrshForCsax.csax.Add(csax); } dscrsr.csid.crsh[dscrsr.csid.crsh.Count - 1] = targetCrshForCsax; break; case DataSetCoordinateReferenceSystemRecord.DSCRSR_Type.PROJ: DataSetCoordinateReferenceSystemRecord.CRSH targetCrshForProj = dscrsr.csid.crsh[dscrsr.csid.crsh.Count - 1]; targetCrshForProj.proj.prom = record.SubRecords[0].value.uintValue; targetCrshForProj.proj.prp1 = record.SubRecords[1].value.doubleValue; targetCrshForProj.proj.prp2 = record.SubRecords[2].value.doubleValue; targetCrshForProj.proj.prp3 = record.SubRecords[3].value.doubleValue; targetCrshForProj.proj.prp4 = record.SubRecords[4].value.doubleValue; targetCrshForProj.proj.prp5 = record.SubRecords[5].value.doubleValue; targetCrshForProj.proj.feas = record.SubRecords[6].value.doubleValue; targetCrshForProj.proj.fnor = record.SubRecords[7].value.doubleValue; dscrsr.csid.crsh[dscrsr.csid.crsh.Count - 1] = targetCrshForProj; break; case DataSetCoordinateReferenceSystemRecord.DSCRSR_Type.GDAT: DataSetCoordinateReferenceSystemRecord.CRSH targetCrshForGdt = dscrsr.csid.crsh[dscrsr.csid.crsh.Count - 1]; targetCrshForGdt.gdat.dtnm = record.SubRecords[0].value.stringValue; targetCrshForGdt.gdat.elnm = record.SubRecords[1].value.stringValue; targetCrshForGdt.gdat.esma = record.SubRecords[2].value.doubleValue; targetCrshForGdt.gdat.espt = record.SubRecords[3].value.uintValue; targetCrshForGdt.gdat.espm = record.SubRecords[4].value.doubleValue; targetCrshForGdt.gdat.cmnm = record.SubRecords[5].value.stringValue; targetCrshForGdt.gdat.cmgl = record.SubRecords[6].value.doubleValue; dscrsr.csid.crsh[dscrsr.csid.crsh.Count - 1] = targetCrshForGdt; break; case DataSetCoordinateReferenceSystemRecord.DSCRSR_Type.VDAT: DataSetCoordinateReferenceSystemRecord.CRSH targetCrshForVdt = dscrsr.csid.crsh[dscrsr.csid.crsh.Count - 1]; targetCrshForVdt.vdat.dtnm = record.SubRecords[0].value.stringValue; targetCrshForVdt.vdat.dtid = record.SubRecords[1].value.stringValue; targetCrshForVdt.vdat.dtsr = record.SubRecords[2].value.uintValue; targetCrshForVdt.vdat.scri = record.SubRecords[3].value.stringValue; dscrsr.csid.crsh[dscrsr.csid.crsh.Count - 1] = targetCrshForVdt; break; default: break; } } s101.dscrsr = dscrsr; #endregion } else if (typeTag.Equals("IRID")) { #region InformationTypeRecord itr = new InformationTypeRecord(); foreach (var record in records) { InformationTypeRecord.ITR_Tyte tag = (InformationTypeRecord.ITR_Tyte)Enum.Parse(typeof(InformationTypeRecord.ITR_Tyte), record.tag); switch (tag) { case InformationTypeRecord.ITR_Tyte.IRID: itr.irid.rcnm = record.SubRecords[0].value.uintValue; itr.irid.rcid = record.SubRecords[1].value.uintValue; itr.irid.nitc = (ushort)record.SubRecords[2].value.uintValue; itr.irid.rver = (ushort)record.SubRecords[3].value.uintValue; itr.irid.ruin = record.SubRecords[4].value.uintValue; break; case InformationTypeRecord.ITR_Tyte.ATTR: for (int i = 0; i < record.SubRecords.Count;) { CommonRecord.ATTR attr = new CommonRecord.ATTR(); attr.natc = (ushort) record.SubRecords[i++].value.uintValue; attr.atix = (ushort)record.SubRecords[i++].value.uintValue; attr.paix = (ushort)record.SubRecords[i++].value.uintValue; attr.atin = record.SubRecords[i++].value.uintValue; attr.atvl = record.SubRecords[i++].value.stringValue; itr.irid.attr.Add(attr); } break; case InformationTypeRecord.ITR_Tyte.INAS: CommonRecord.INAS inas = new CommonRecord.INAS(); inas.rrnm = record.SubRecords[0].value.uintValue; inas.rrid = record.SubRecords[1].value.uintValue; inas.niac = (ushort)record.SubRecords[2].value.uintValue; inas.narc = (ushort)record.SubRecords[3].value.uintValue; inas.iuin = record.SubRecords[4].value.uintValue; inas.natc = new List<CommonRecord.INAS.NATC>(); for (int i = 5; i < record.SubRecords.Count;) { CommonRecord.INAS.NATC natc = new CommonRecord.INAS.NATC(); natc.natc = (ushort)record.SubRecords[i++].value.uintValue; natc.atix = (ushort)record.SubRecords[i++].value.uintValue; natc.paix = (ushort)record.SubRecords[i++].value.uintValue; natc.atin = record.SubRecords[i++].value.uintValue; natc.atvl = record.SubRecords[i++].value.stringValue; inas.natc.Add(natc); } itr.irid.inas.Add(inas); break; default: break; } } s101.itr.Add(itr); #endregion } else if (typeTag.Equals("PRID")) { #region PointRecord pr = new PointRecord(); foreach (var record in records) { PointRecord.PR_Type tag = (PointRecord.PR_Type)Enum.Parse(typeof(PointRecord.PR_Type), record.tag); switch (tag) { case PointRecord.PR_Type.PRID: pr.prid.rcnm = record.SubRecords[0].value.uintValue; pr.prid.rcid = record.SubRecords[1].value.uintValue; pr.prid.rver = (ushort) record.SubRecords[2].value.uintValue; pr.prid.ruin = record.SubRecords[3].value.uintValue; break; case PointRecord.PR_Type.INAS: CommonRecord.INAS inas = new CommonRecord.INAS(); inas.rrnm = record.SubRecords[0].value.uintValue; inas.rrid = record.SubRecords[1].value.uintValue; inas.niac = (ushort)record.SubRecords[2].value.uintValue; inas.narc = (ushort)record.SubRecords[3].value.uintValue; inas.iuin = record.SubRecords[4].value.uintValue; inas.natc = new List<CommonRecord.INAS.NATC>(); for (int i = 5; i < record.SubRecords.Count;) { CommonRecord.INAS.NATC natc = new CommonRecord.INAS.NATC(); natc.natc = (ushort)record.SubRecords[i++].value.uintValue; natc.atix = (ushort)record.SubRecords[i++].value.uintValue; natc.paix = (ushort)record.SubRecords[i++].value.uintValue; natc.atin = record.SubRecords[i++].value.uintValue; natc.atvl = record.SubRecords[i++].value.stringValue; inas.natc.Add(natc); } pr.inas.Add(inas); break; case PointRecord.PR_Type.C2IT: CommonRecord.C2IT c2it = new CommonRecord.C2IT(); CommonRecord.Coordinate2D<int> coor_c2it = new CommonRecord.Coordinate2D<int>(); coor_c2it.ycoo = record.SubRecords[0].value.intValue; coor_c2it.xcoo = record.SubRecords[1].value.intValue; c2it.coor = coor_c2it; pr.c2it.Add(c2it); break; case PointRecord.PR_Type.C3IT: CommonRecord.C3IT c3it = new CommonRecord.C3IT(); c3it.vcid = record.SubRecords[0].value.uintValue; CommonRecord.Coordinate3D<int> coor_c3it = new CommonRecord.Coordinate3D<int>(); coor_c3it.ycoo = record.SubRecords[0].value.intValue; coor_c3it.xcoo = record.SubRecords[1].value.intValue; coor_c3it.zcoo = record.SubRecords[2].value.intValue; c3it.coor = coor_c3it; pr.c3it.Add(c3it); break; case PointRecord.PR_Type.C2FT: CommonRecord.C2FT c2ft = new CommonRecord.C2FT(); CommonRecord.Coordinate2D<double> coor_c2ft = new CommonRecord.Coordinate2D<double>(); coor_c2ft.ycoo = record.SubRecords[0].value.doubleValue; coor_c2ft.xcoo = record.SubRecords[1].value.doubleValue; c2ft.coor = coor_c2ft; pr.c2ft.Add(c2ft); break; case PointRecord.PR_Type.C3FT: CommonRecord.C3FT c3ft = new CommonRecord.C3FT(); c3ft.vcid = record.SubRecords[0].value.uintValue; CommonRecord.Coordinate3D<double> coor_c3ft = new CommonRecord.Coordinate3D<double>(); coor_c3ft.ycoo = record.SubRecords[0].value.doubleValue; coor_c3ft.xcoo = record.SubRecords[1].value.doubleValue; coor_c3ft.zcoo = record.SubRecords[2].value.doubleValue; c3ft.coor = coor_c3ft; pr.c3ft.Add(c3ft); break; default: break; } } s101.pr.Add(pr); #endregion } else if (typeTag.Equals("MRID")) { #region MRID MultiPointRecord mpr = new MultiPointRecord(); foreach (var record in records) { MultiPointRecord.MPR_Type tag = (MultiPointRecord.MPR_Type)Enum.Parse(typeof(MultiPointRecord.MPR_Type), record.tag); switch (tag) { case MultiPointRecord.MPR_Type.MRID: mpr.mrid.rcnm = record.SubRecords[0].value.uintValue; mpr.mrid.rcid = record.SubRecords[1].value.uintValue; mpr.mrid.rver = (ushort) record.SubRecords[2].value.uintValue; mpr.mrid.ruin = record.SubRecords[3].value.uintValue; break; case MultiPointRecord.MPR_Type.INAS: CommonRecord.INAS inas = new CommonRecord.INAS(); inas.rrnm = record.SubRecords[0].value.uintValue; inas.rrid = record.SubRecords[1].value.uintValue; inas.niac = (ushort)record.SubRecords[2].value.uintValue; inas.narc = (ushort)record.SubRecords[3].value.uintValue; inas.iuin = record.SubRecords[4].value.uintValue; inas.natc = new List<CommonRecord.INAS.NATC>(); for (int i = 5; i < record.SubRecords.Count;) { CommonRecord.INAS.NATC natc = new CommonRecord.INAS.NATC(); natc.natc = (ushort)record.SubRecords[i++].value.uintValue; natc.atix = (ushort)record.SubRecords[i++].value.uintValue; natc.paix = (ushort)record.SubRecords[i++].value.uintValue; natc.atin = record.SubRecords[i++].value.uintValue; natc.atvl = record.SubRecords[i++].value.stringValue; inas.natc.Add(natc); } mpr.inas.Add(inas); break; case MultiPointRecord.MPR_Type.COCC: mpr.cocc.coui = record.SubRecords[0].value.uintValue; mpr.cocc.coix = (ushort)record.SubRecords[1].value.uintValue; mpr.cocc.ncor = (ushort)record.SubRecords[2].value.uintValue; break; case MultiPointRecord.MPR_Type.C2IL: CommonRecord.C2IL c2il = new CommonRecord.C2IL(); for (int i = 0; i < record.SubRecords.Count; i++) { CommonRecord.Coordinate2D<int> coor = new CommonRecord.Coordinate2D<int>(); coor.ycoo = record.SubRecords[i++].value.intValue; coor.xcoo = record.SubRecords[i].value.intValue; c2il.coor.Add(coor); } mpr.c2il.Add(c2il); break; case MultiPointRecord.MPR_Type.C3IL: CommonRecord.C3IL c3il = new CommonRecord.C3IL(); c3il.vcid = record.SubRecords[0].value.uintValue; for (int i = 1; i < record.SubRecords.Count; i++) { CommonRecord.Coordinate3D<int> coor = new CommonRecord.Coordinate3D<int>(); coor.ycoo = record.SubRecords[i++].value.intValue; coor.xcoo = record.SubRecords[i++].value.intValue; coor.zcoo = record.SubRecords[i].value.intValue; c3il.coor.Add(coor); } mpr.c3il.Add(c3il); break; case MultiPointRecord.MPR_Type.C2FL: CommonRecord.C2FL c2fl = new CommonRecord.C2FL(); for (int i = 0; i < record.SubRecords.Count; i++) { CommonRecord.Coordinate2D<double> coor = new CommonRecord.Coordinate2D<double>(); coor.ycoo = record.SubRecords[i++].value.doubleValue; coor.xcoo = record.SubRecords[i].value.doubleValue; c2fl.coor.Add(coor); } mpr.c2fl.Add(c2fl); break; case MultiPointRecord.MPR_Type.C3FL: CommonRecord.C3FL c3fl = new CommonRecord.C3FL(); c3fl.vcid = record.SubRecords[0].value.uintValue; for (int i = 1; i < record.SubRecords.Count; i++) { CommonRecord.Coordinate3D<double> coor = new CommonRecord.Coordinate3D<double>(); coor.ycoo = record.SubRecords[i++].value.doubleValue; coor.xcoo = record.SubRecords[i++].value.doubleValue; coor.ycoo = record.SubRecords[i].value.doubleValue; c3fl.coor.Add(coor); } mpr.c3fl.Add(c3fl); break; default: break; } } s101.mpr.Add(mpr); #endregion } else if (typeTag.Equals("CRID")) { #region CRID CurveRecord cr = new CurveRecord(); foreach (var record in records) { CurveRecord.CR_Type tag = (CurveRecord.CR_Type)Enum.Parse(typeof(CurveRecord.CR_Type), record.tag); switch (tag) { case CurveRecord.CR_Type.CRID: cr.crid.rcnm = record.SubRecords[0].value.uintValue; cr.crid.rcid = record.SubRecords[1].value.uintValue; cr.crid.rver = (ushort)record.SubRecords[2].value.uintValue; cr.crid.ruin = record.SubRecords[3].value.uintValue; break; case CurveRecord.CR_Type.INAS: CommonRecord.INAS inas = new CommonRecord.INAS(); inas.rrnm = record.SubRecords[0].value.uintValue; inas.rrid = record.SubRecords[1].value.uintValue; inas.niac = (ushort)record.SubRecords[2].value.uintValue; inas.narc = (ushort)record.SubRecords[3].value.uintValue; inas.iuin = record.SubRecords[4].value.uintValue; inas.natc = new List<CommonRecord.INAS.NATC>(); for (int i = 5; i < record.SubRecords.Count;) { CommonRecord.INAS.NATC natc = new CommonRecord.INAS.NATC(); natc.natc = (ushort)record.SubRecords[i++].value.uintValue; natc.atix = (ushort)record.SubRecords[i++].value.uintValue; natc.paix = (ushort)record.SubRecords[i++].value.uintValue; natc.atin = record.SubRecords[i++].value.uintValue; natc.atvl = record.SubRecords[i++].value.stringValue; inas.natc.Add(natc); } cr.inas.Add(inas); break; case CurveRecord.CR_Type.PTAS: for (int i = 0; i < record.SubRecords.Count; i++) { CurveRecord.PTAS ptas = new CurveRecord.PTAS(); ptas.rrnm = record.SubRecords[i++].value.uintValue; ptas.rrid = record.SubRecords[i++].value.uintValue; ptas.topi = record.SubRecords[i].value.uintValue; cr.ptas.Add(ptas); } break; case CurveRecord.CR_Type.SECC: cr.secc.seui = record.SubRecords[0].value.uintValue; cr.secc.seix = (ushort)record.SubRecords[1].value.uintValue; cr.secc.nseg = (ushort)record.SubRecords[2].value.uintValue; break; case CurveRecord.CR_Type.SEGH: CurveRecord.SEGH segh = new CurveRecord.SEGH(); segh.intp = record.SubRecords[0].value.uintValue; //segh.circ = record.SubRecords[1].value.uintValue; //segh.coor.ycoo = record.SubRecords[2].value.doubleValue; //segh.coor.xcoo = record.SubRecords[3].value.doubleValue; //segh.dist = record.SubRecords[4].value.doubleValue; //segh.disu = record.SubRecords[5].value.uintValue; //segh.sbrg = record.SubRecords[6].value.doubleValue; //segh.angl = record.SubRecords[7].value.doubleValue; cr.segh.Add(segh); break; case CurveRecord.CR_Type.COCC: CurveRecord.SEGH segh_Cocc = cr.segh[cr.segh.Count-1]; segh_Cocc.cocc.coui = record.SubRecords[0].value.uintValue; segh_Cocc.cocc.coix = (ushort)record.SubRecords[1].value.uintValue; segh_Cocc.cocc.ncor = (ushort)record.SubRecords[2].value.uintValue; cr.segh[cr.segh.Count - 1] = segh_Cocc; break; case CurveRecord.CR_Type.C2IL: CurveRecord.SEGH segh_C2IL = cr.segh[cr.segh.Count - 1]; CommonRecord.C2IL c2il = new CommonRecord.C2IL(); for (int i = 0; i < record.SubRecords.Count; i++) { CommonRecord.Coordinate2D<int> coor = new CommonRecord.Coordinate2D<int>(); coor.ycoo = record.SubRecords[i++].value.intValue; coor.xcoo = record.SubRecords[i].value.intValue; c2il.coor.Add(coor); } segh_C2IL.c2il.Add(c2il); cr.segh[cr.segh.Count - 1] = segh_C2IL; break; case CurveRecord.CR_Type.C3IL: CurveRecord.SEGH segh_C3IL = cr.segh[cr.segh.Count - 1]; CommonRecord.C3IL c3il = new CommonRecord.C3IL(); c3il.vcid = record.SubRecords[0].value.uintValue; for (int i = 1; i < record.SubRecords.Count; i++) { CommonRecord.Coordinate3D<int> coor = new CommonRecord.Coordinate3D<int>(); coor.ycoo = record.SubRecords[i++].value.intValue; coor.xcoo = record.SubRecords[i++].value.intValue; coor.zcoo = record.SubRecords[i].value.intValue; c3il.coor.Add(coor); } segh_C3IL.c3il.Add(c3il); cr.segh[cr.segh.Count - 1] = segh_C3IL; break; case CurveRecord.CR_Type.C2FL: CurveRecord.SEGH segh_C2FL = cr.segh[cr.segh.Count - 1]; CommonRecord.C2FL c2fl = new CommonRecord.C2FL(); for (int i = 0; i < record.SubRecords.Count; i++) { CommonRecord.Coordinate2D<double> coor = new CommonRecord.Coordinate2D<double>(); coor.ycoo = record.SubRecords[i++].value.doubleValue; coor.xcoo = record.SubRecords[i].value.doubleValue; c2fl.coor.Add(coor); } segh_C2FL.c2fl.Add(c2fl); cr.segh[cr.segh.Count - 1] = segh_C2FL; break; case CurveRecord.CR_Type.C3FL: CurveRecord.SEGH segh_C3FL = cr.segh[cr.segh.Count - 1]; CommonRecord.C3FL c3fl = new CommonRecord.C3FL(); c3fl.vcid = record.SubRecords[0].value.uintValue; for (int i = 1; i < record.SubRecords.Count; i++) { CommonRecord.Coordinate3D<double> coor = new CommonRecord.Coordinate3D<double>(); coor.ycoo = record.SubRecords[i++].value.doubleValue; coor.xcoo = record.SubRecords[i++].value.doubleValue; coor.ycoo = record.SubRecords[i].value.doubleValue; c3fl.coor.Add(coor); } segh_C3FL.c3fl.Add(c3fl); cr.segh[cr.segh.Count - 1] = segh_C3FL; break; default: break; } } s101.cr.Add(cr); #endregion } else if (typeTag.Equals("CCID")) { #region CCID CompositeCurveRecord ccr = new CompositeCurveRecord(); foreach (var record in records) { CompositeCurveRecord.CCR_Type tag = (CompositeCurveRecord.CCR_Type)Enum.Parse(typeof(CompositeCurveRecord.CCR_Type), record.tag); switch (tag) { case CompositeCurveRecord.CCR_Type.CCID: ccr.ccid.rcnm = record.SubRecords[0].value.uintValue; ccr.ccid.rcid = record.SubRecords[1].value.uintValue; ccr.ccid.rver = (ushort) record.SubRecords[2].value.uintValue; ccr.ccid.ruin = record.SubRecords[3].value.uintValue; break; case CompositeCurveRecord.CCR_Type.INAS: CommonRecord.INAS inas = new CommonRecord.INAS(); inas.rrnm = record.SubRecords[0].value.uintValue; inas.rrid = record.SubRecords[1].value.uintValue; inas.niac = (ushort)record.SubRecords[2].value.uintValue; inas.narc = (ushort)record.SubRecords[3].value.uintValue; inas.iuin = record.SubRecords[4].value.uintValue; inas.natc = new List<CommonRecord.INAS.NATC>(); for (int i = 5; i < record.SubRecords.Count;) { CommonRecord.INAS.NATC natc = new CommonRecord.INAS.NATC(); natc.natc = (ushort)record.SubRecords[i++].value.uintValue; natc.atix = (ushort)record.SubRecords[i++].value.uintValue; natc.paix = (ushort)record.SubRecords[i++].value.uintValue; natc.atin = record.SubRecords[i++].value.uintValue; natc.atvl = record.SubRecords[i++].value.stringValue; inas.natc.Add(natc); } ccr.inas.Add(inas); break; case CompositeCurveRecord.CCR_Type.CCOC: ccr.ccoc.ccui = record.SubRecords[0].value.uintValue; ccr.ccoc.ccix = (ushort) record.SubRecords[1].value.uintValue; ccr.ccoc.ncco = (ushort) record.SubRecords[2].value.uintValue; break; case CompositeCurveRecord.CCR_Type.CUCO: for (int i = 0; i < record.SubRecords.Count; i++) { CompositeCurveRecord.CUCO cuco = new CompositeCurveRecord.CUCO(); cuco.rrnm = record.SubRecords[i++].value.uintValue; cuco.rrid = record.SubRecords[i++].value.uintValue; cuco.ornt = record.SubRecords[i].value.uintValue; ccr.cuco.Add(cuco); } break; default: break; } } s101.ccr.Add(ccr); #endregion } else if (typeTag.Equals("SRID")) { #region SRID SurfaceRecord sr = new SurfaceRecord(); foreach (var record in records) { SurfaceRecord.SR_Type tag = (SurfaceRecord.SR_Type)Enum.Parse(typeof(SurfaceRecord.SR_Type), record.tag); switch (tag) { case SurfaceRecord.SR_Type.SRID: sr.srid.rcnm = record.SubRecords[0].value.uintValue; sr.srid.rcid = record.SubRecords[1].value.uintValue; sr.srid.rver = (ushort) record.SubRecords[2].value.uintValue; sr.srid.ruin = record.SubRecords[3].value.uintValue; break; case SurfaceRecord.SR_Type.INAS: CommonRecord.INAS inas = new CommonRecord.INAS(); inas.rrnm = record.SubRecords[0].value.uintValue; inas.rrid = record.SubRecords[1].value.uintValue; inas.niac = (ushort)record.SubRecords[2].value.uintValue; inas.narc = (ushort)record.SubRecords[3].value.uintValue; inas.iuin = record.SubRecords[4].value.uintValue; inas.natc = new List<CommonRecord.INAS.NATC>(); for (int i = 5; i < record.SubRecords.Count;) { CommonRecord.INAS.NATC natc = new CommonRecord.INAS.NATC(); natc.natc = (ushort)record.SubRecords[i++].value.uintValue; natc.atix = (ushort)record.SubRecords[i++].value.uintValue; natc.paix = (ushort)record.SubRecords[i++].value.uintValue; natc.atin = record.SubRecords[i++].value.uintValue; natc.atvl = record.SubRecords[i++].value.stringValue; inas.natc.Add(natc); } sr.inas.Add(inas); break; case SurfaceRecord.SR_Type.RIAS: for (int i = 0; i < record.SubRecords.Count; i++) { SurfaceRecord.RIAS rias = new SurfaceRecord.RIAS(); rias.rrnm = record.SubRecords[i++].value.uintValue; rias.rrid = record.SubRecords[i++].value.uintValue; rias.ornt = record.SubRecords[i++].value.uintValue; rias.usag = record.SubRecords[i++].value.uintValue; rias.raui = record.SubRecords[i].value.uintValue; sr.rias.Add(rias); } break; default: break; } } s101.sr.Add(sr); #endregion } else if (typeTag.Equals("FRID")) { #region FRID FeatureTypeRecord ftr = new FeatureTypeRecord(); foreach (var record in records) { FeatureTypeRecord.FTR_Type tag = (FeatureTypeRecord.FTR_Type)Enum.Parse(typeof(FeatureTypeRecord.FTR_Type), record.tag); switch (tag) { case FeatureTypeRecord.FTR_Type.FRID: ftr.frid.rcnm = record.SubRecords[0].value.uintValue; ftr.frid.rcid = record.SubRecords[1].value.uintValue; ftr.frid.nftc = (ushort) record.SubRecords[2].value.uintValue; ftr.frid.rver = (ushort) record.SubRecords[3].value.uintValue; ftr.frid.ruin = record.SubRecords[4].value.uintValue; break; case FeatureTypeRecord.FTR_Type.FOID: ftr.foid.agen = (ushort) record.SubRecords[0].value.uintValue; ftr.foid.fidn = record.SubRecords[1].value.uintValue; ftr.foid.fids = (ushort) record.SubRecords[2].value.uintValue; break; case FeatureTypeRecord.FTR_Type.ATTR: for (int i = 0; i < record.SubRecords.Count; ) { CommonRecord.ATTR attr = new CommonRecord.ATTR(); attr.natc = (ushort)record.SubRecords[i++].value.uintValue; attr.atix = (ushort)record.SubRecords[i++].value.uintValue; attr.paix = (ushort)record.SubRecords[i++].value.uintValue; attr.atin = record.SubRecords[i++].value.uintValue; attr.atvl = record.SubRecords[i++].value.stringValue; ftr.attr.Add(attr); } break; case FeatureTypeRecord.FTR_Type.INAS: CommonRecord.INAS inas = new CommonRecord.INAS(); inas.rrnm = record.SubRecords[0].value.uintValue; inas.rrid = record.SubRecords[1].value.uintValue; inas.niac = (ushort)record.SubRecords[2].value.uintValue; inas.narc = (ushort)record.SubRecords[3].value.uintValue; inas.iuin = record.SubRecords[4].value.uintValue; inas.natc = new List<CommonRecord.INAS.NATC>(); for (int i = 5; i < record.SubRecords.Count;) { CommonRecord.INAS.NATC natc = new CommonRecord.INAS.NATC(); natc.natc = (ushort)record.SubRecords[i++].value.uintValue; natc.atix = (ushort)record.SubRecords[i++].value.uintValue; natc.paix = (ushort)record.SubRecords[i++].value.uintValue; natc.atin = record.SubRecords[i++].value.uintValue; natc.atvl = record.SubRecords[i++].value.stringValue; inas.natc.Add(natc); } ftr.inas.Add(inas); break; case FeatureTypeRecord.FTR_Type.SPAS: for (int i = 0; i < record.SubRecords.Count; i++) { FeatureTypeRecord.SPAS spas = new FeatureTypeRecord.SPAS(); spas.rrnm = record.SubRecords[i++].value.uintValue; spas.rrid = record.SubRecords[i++].value.uintValue; spas.ornt = record.SubRecords[i++].value.uintValue; spas.smin = record.SubRecords[i++].value.uintValue; spas.smax = record.SubRecords[i++].value.uintValue; spas.saui = record.SubRecords[i].value.uintValue; ftr.spas.Add(spas); } break; case FeatureTypeRecord.FTR_Type.FASC: FeatureTypeRecord.FASC fasc = new FeatureTypeRecord.FASC(); fasc.rrnm = record.SubRecords[0].value.uintValue; fasc.rrid = record.SubRecords[1].value.uintValue; fasc.nfac = (ushort) record.SubRecords[2].value.uintValue; fasc.narc = (ushort) record.SubRecords[3].value.uintValue; fasc.faui = record.SubRecords[4].value.uintValue; for (int i = 5; i < record.SubRecords.Count; i++) { FeatureTypeRecord.FASC.NATC natc = new FeatureTypeRecord.FASC.NATC(); natc.natc = (ushort)record.SubRecords[i++].value.uintValue; natc.atix = (ushort)record.SubRecords[i++].value.uintValue; natc.paix = (ushort)record.SubRecords[i++].value.uintValue; natc.atin = record.SubRecords[i++].value.uintValue; natc.atvl = record.SubRecords[i].value.stringValue; fasc.natc.Add(natc); } ftr.fasc.Add(fasc); break; case FeatureTypeRecord.FTR_Type.THAS: for (int i = 0; i < record.SubRecords.Count; i++) { FeatureTypeRecord.THAS thas = new FeatureTypeRecord.THAS(); thas.rrnm = record.SubRecords[i++].value.uintValue; thas.rrid = record.SubRecords[i++].value.uintValue; thas.taui = record.SubRecords[i].value.uintValue; ftr.thas.Add(thas); } break; case FeatureTypeRecord.FTR_Type.MASK: for (int i = 0; i < record.SubRecords.Count; i++) { FeatureTypeRecord.MASK mask = new FeatureTypeRecord.MASK(); mask.rrnm = record.SubRecords[i++].value.uintValue; mask.rrid = record.SubRecords[i++].value.uintValue; mask.mind = record.SubRecords[i++].value.uintValue; mask.muin = record.SubRecords[i].value.uintValue; ftr.mask.Add(mask); } break; default: break; } } s101.ftr.Add(ftr); #endregion } } return s101; }