static void Main() { var console = new ConsoleOutput(); console.Start(); var tzShapeReader = new TimeZoneShapeFileReader(@".\Data\tz_world.shp"); TimeZoneDataBuilder.CreateGeohashData(console, tzShapeReader, @"..\..\..\GeoTimeZone\"); console.Stop(); }
public static void CreateGeohashData(ConsoleOutput console, TimeZoneShapeFileReader inputShapefile, string outputPath) { var features = inputShapefile.ReadShapeFile().AsParallel() .Select(x => { x.Geometry = x.Geometry.Simplify(); return x; }) .ToList(); PreLoadTimeZones(features); console.WriteMessage("Polygons loaded and simplified"); var geohashes = features.AsParallel() .Select(x => new { TimeZone = x, Geohashes = GeohashTree.GetGeohashes(x.Geometry) }) .ToList(); console.WriteMessage("Geohashes generated for polygons"); foreach (var hash in geohashes) foreach (var g in hash.Geohashes) AddResult(g, hash.TimeZone); console.WriteMessage("Geohash tree built"); WorldBoundsTreeNode.PrepareForOutput(); console.WriteMessage("Geohash tree preparing for output"); WriteGeohashDataFile(outputPath); console.WriteMessage("Data file written"); WriteLookup(outputPath); console.WriteMessage("Lookup file written"); }