public long ReadCSV(string csvPath, string gdbPath, string fcName, long startLine, long endLine) { Log("StartTime:" + DateTime.Now.ToLongTimeString()); long total = 0; IWorkspaceFactory GDBWorkspaceFactory = new FileGDBWorkspaceFactoryClass(); IWorkspace ws = GDBWorkspaceFactory.OpenFromFile(gdbPath, 0); IFeatureWorkspace fws = ws as IFeatureWorkspace; IFeatureClass fc = fws.OpenFeatureClass(fcName); fields = fc.Fields; IFeatureClassLoad fcl = fc as IFeatureClassLoad; fcl.LoadOnlyMode = true; long lineNum = 0; long insertNum = 0; using (FileStream fs = new FileStream(csvPath, FileMode.Open, FileAccess.Read)) { using (StreamReader sr = new StreamReader(fs, Encoding.UTF8)) { string strLine = ""; IFeatureCursor fCursor = fc.Insert(true); IFeatureBuffer fb = fc.CreateFeatureBuffer(); string[] line; FLine_EDGES model_EDGES = new FLine_EDGES(); while ((strLine = sr.ReadLine()) != null) { lineNum++; if (lineNum < startLine) { continue; } line = SplitAndCheckLine_EDGES(strLine, lineNum); if (line == null) { continue; } model_EDGES = Line2Model(model_EDGES, line); fb = SetFLine2Feature(fb, model_EDGES, lineNum); if (fb == null) { continue; } fCursor.InsertFeature(fb); insertNum++; if (lineNum % 10000 == 0) { fCursor.Flush(); total = insertNum; Log("Flush[" + lineNum + "]:" + DateTime.Now.ToLongTimeString()); } if (endLine > 0 && lineNum >= endLine) { fCursor.Flush(); total = insertNum; break; } } fCursor.Flush(); total = insertNum; } } fcl.LoadOnlyMode = false; Log("Sum:" + lineNum.ToString()); Log("EndTime:" + DateTime.Now.ToLongTimeString()); return(total); }
private IFeatureBuffer SetFLine2Feature(IFeatureBuffer fb, FLine_EDGES model, long lineNum) { IGeometry geo = model.WKT.ToGeometry(spatialReference); if (geo == null) { return(null); } fb.Shape = geo; #region fieldIndex = fields.FindField("ARTPATH"); if (fieldIndex >= 0) { fb.Value[fieldIndex] = model.ARTPATH; } fieldIndex = fields.FindField("COUNTYFP"); if (fieldIndex >= 0) { fb.Value[fieldIndex] = model.COUNTYFP; } fieldIndex = fields.FindField("DECKEDROAD"); if (fieldIndex >= 0) { fb.Value[fieldIndex] = model.DECKEDROAD; } fieldIndex = fields.FindField("DIVROAD"); if (fieldIndex >= 0) { fb.Value[fieldIndex] = model.DIVROAD; } fieldIndex = fields.FindField("EXTTYP"); if (fieldIndex >= 0) { fb.Value[fieldIndex] = model.EXTTYP; } fieldIndex = fields.FindField("FEATCAT"); if (fieldIndex >= 0) { fb.Value[fieldIndex] = model.FEATCAT; } fieldIndex = fields.FindField("FULLNAME"); if (fieldIndex >= 0) { fb.Value[fieldIndex] = model.FULLNAME; } fieldIndex = fields.FindField("GCSEFLG"); if (fieldIndex >= 0) { fb.Value[fieldIndex] = model.GCSEFLG; } fieldIndex = fields.FindField("HYDROFLG"); if (fieldIndex >= 0) { fb.Value[fieldIndex] = model.HYDROFLG; } fieldIndex = fields.FindField("LFROMADD"); if (fieldIndex >= 0) { fb.Value[fieldIndex] = model.LFROMADD; } fieldIndex = fields.FindField("LTOADD"); if (fieldIndex >= 0) { fb.Value[fieldIndex] = model.LTOADD; } fieldIndex = fields.FindField("MTFCC"); if (fieldIndex >= 0) { fb.Value[fieldIndex] = model.MTFCC; } fieldIndex = fields.FindField("OFFSETL"); if (fieldIndex >= 0) { fb.Value[fieldIndex] = model.OFFSETL; } fieldIndex = fields.FindField("OFFSETR"); if (fieldIndex >= 0) { fb.Value[fieldIndex] = model.OFFSETR; } fieldIndex = fields.FindField("OLFFLG"); if (fieldIndex >= 0) { fb.Value[fieldIndex] = model.OLFFLG; } fieldIndex = fields.FindField("PASSFLG"); if (fieldIndex >= 0) { fb.Value[fieldIndex] = model.PASSFLG; } fieldIndex = fields.FindField("PERSIST"); if (fieldIndex >= 0) { fb.Value[fieldIndex] = model.PERSIST; } fieldIndex = fields.FindField("RAILFLG"); if (fieldIndex >= 0) { fb.Value[fieldIndex] = model.RAILFLG; } fieldIndex = fields.FindField("RFROMADD"); if (fieldIndex >= 0) { fb.Value[fieldIndex] = model.RFROMADD; } fieldIndex = fields.FindField("ROADFLG"); if (fieldIndex >= 0) { fb.Value[fieldIndex] = model.ROADFLG; } fieldIndex = fields.FindField("RTOADD"); if (fieldIndex >= 0) { fb.Value[fieldIndex] = model.RTOADD; } fieldIndex = fields.FindField("SMID"); if (fieldIndex >= 0) { fb.Value[fieldIndex] = model.SMID; } fieldIndex = fields.FindField("STATEFP"); if (fieldIndex >= 0) { fb.Value[fieldIndex] = model.STATEFP; } fieldIndex = fields.FindField("TFIDL"); if (fieldIndex >= 0) { fb.Value[fieldIndex] = model.TFIDL; } fieldIndex = fields.FindField("TFIDR"); if (fieldIndex >= 0) { fb.Value[fieldIndex] = model.TFIDR; } fieldIndex = fields.FindField("TLID"); if (fieldIndex >= 0) { fb.Value[fieldIndex] = model.TLID; } fieldIndex = fields.FindField("TNIDF"); if (fieldIndex >= 0) { fb.Value[fieldIndex] = model.TNIDF; } fieldIndex = fields.FindField("TNIDT"); if (fieldIndex >= 0) { fb.Value[fieldIndex] = model.TNIDT; } fieldIndex = fields.FindField("TTYP"); if (fieldIndex >= 0) { fb.Value[fieldIndex] = model.TTYP; } //index = f.Fields.FindField("WKT"); //if (index >= 0) //{ // f.Value[index] = model.WKT; //} fieldIndex = fields.FindField("ZIPL"); if (fieldIndex >= 0) { fb.Value[fieldIndex] = model.ZIPL; } fieldIndex = fields.FindField("ZIPR"); if (fieldIndex >= 0) { fb.Value[fieldIndex] = model.ZIPR; } fieldIndex = fields.FindField("ID"); if (fieldIndex >= 0) { fb.Value[fieldIndex] = lineNum; } #endregion return(fb); }
private FLine_EDGES Line2Model(FLine_EDGES FModel, string[] line) { FModel.WKT = line[0].Trim('"'); FModel.STATEFP = line[1]; FModel.COUNTYFP = line[2]; FModel.TLID = line[3]; FModel.TFIDL = line[4]; FModel.TFIDR = line[5]; FModel.MTFCC = line[6]; FModel.FULLNAME = line[7]; FModel.SMID = line[8]; FModel.LFROMADD = line[9]; FModel.LTOADD = line[10]; FModel.RFROMADD = line[11]; FModel.RTOADD = line[12]; FModel.ZIPL = line[13]; FModel.ZIPR = line[14]; FModel.FEATCAT = line[15]; FModel.HYDROFLG = line[16]; FModel.RAILFLG = line[17]; FModel.ROADFLG = line[18]; FModel.OLFFLG = line[19]; FModel.PASSFLG = line[20]; FModel.DIVROAD = line[21]; FModel.EXTTYP = line[22]; FModel.TTYP = line[23]; FModel.DECKEDROAD = line[24]; FModel.ARTPATH = line[25]; FModel.PERSIST = line[26]; FModel.GCSEFLG = line[27]; FModel.OFFSETL = line[28]; FModel.OFFSETR = line[29]; FModel.TNIDF = line[30]; FModel.TNIDT = line[31]; return(FModel); }