public static OptStats OptimizeDatabase(Stream Input, Stream Output, List <GeoFeatureClass> FeatureClassFilter, List <string> CountryFilter) { long RecordsIn = 0; long RecordsOut = 0; string CountryFilterCompiled = string.Join("|", CountryFilter.ToArray()); StringBuilder sb = new StringBuilder(); foreach (var f in FeatureClassFilter) { sb.Append(GeoName.ClassToCode(f)); } string FeatureClassFilterCompiled = sb.ToString(); using (StreamReader _in = new StreamReader(Input)) { using (StreamWriter _out = new StreamWriter(Output)) { string Line; while (!_in.EndOfStream && (Line = _in.ReadLine()) != null) { RecordsIn++; if (FilterRecord(Line.Split('\t'), FeatureClassFilterCompiled, CountryFilterCompiled)) { RecordsOut++; _out.WriteLine(Line); } } } } return(new OptStats(RecordsIn, RecordsOut)); }
/// <summary> /// All the geocoding data can be gotten from: http://download.geonames.org/export/dump/ /// </summary> /// <param name="input"></param> public void SetPlaces(Stream input) { Places.Clear(); using (StreamReader db = new StreamReader(input)) { string line; while (!db.EndOfStream && (line = db.ReadLine()) != null) { if (line.StartsWith("#")) { continue; } var place = new GeoName(line, CountryInfos); Places.Add(place); } } }
private void Initialize(Stream Input, bool MajorPlacesOnly) { List <GeoName> Places = new List <GeoName>(); using (StreamReader db = new StreamReader(Input)) { string Line; while (!db.EndOfStream && (Line = db.ReadLine()) != null) { var Place = new GeoName(Line); if (!MajorPlacesOnly || Place.FeatureClass != GeoFeatureClass.City) { Places.Add(Place); } } } Tree = new KDTree <GeoName>(Places.ToArray()); }
private void Initialize(Stream Input, bool MajorPlacesOnly) { List <GeoName> Places = new List <GeoName>(); using (StreamReader db = new StreamReader(Input)) { string Line; while (!db.EndOfStream && (Line = db.ReadLine()) != null) { var Place = new GeoName(Line); if (!MajorPlacesOnly || Place.FeatureClass != GeoFeatureClass.City) { Places.Add(Place); } } } Names = new Dictionary <string, GeoName>(); foreach (var p in Places) { } }