コード例 #1
0
ファイル: EpsgData.cs プロジェクト: aarondandy/pigeoid
 public EpsgData(EpsgRepository repository)
 {
     Repository = repository;
 }
コード例 #2
0
        static void Main(string[] args)
        {
            string dataFolderPath = "data";

            if (args.Length > 0 && !String.IsNullOrWhiteSpace(args[0]))
            {
                dataFolderPath = Path.GetFullPath(args[0]);
            }

            var alternatePath = @"../../../data";

            if (Directory.Exists(dataFolderPath))
            {
                ;
            }
            else if (Directory.Exists(alternatePath))
            {
                dataFolderPath = alternatePath;
            }
            else
            {
                throw new IOException("Folder does not exist: " + dataFolderPath);
            }

            var dataFilePath = GetDatabasePath(dataFolderPath);

            if (null == dataFilePath || !File.Exists(dataFilePath))
            {
                throw new FileNotFoundException("Database file not found.");
            }
            Console.WriteLine("Found database: " + dataFilePath);

            var outFolder = Path.Combine(dataFolderPath, "out");

            if (!Directory.Exists(outFolder))
            {
                Directory.CreateDirectory(outFolder);
            }

            using (var repository = new EpsgRepository(new FileInfo(dataFilePath))) {
                var epsgData = new EpsgData(repository);

                epsgData.WordLookUpList = StringUtils.BuildWordCountLookUp(
                    Concat(
                        epsgData.Repository.AreaNames,
                        ExtractStrings(epsgData.Repository.Axes, o => o.Name, o => o.Orientation, o => o.Abbreviation),
                        epsgData.Repository.CrsNames,
                        epsgData.Repository.CoordinateSystemNames,
                        epsgData.Repository.CoordinateOperationNames,
                        epsgData.Repository.CoordinateOperationMethodNames,
                        ExtractStrings(epsgData.Repository.Parameters, o => o.Name, o => o.Description),
                        epsgData.Repository.ParamTextValues,
                        epsgData.Repository.DatumNames,
                        epsgData.Repository.EllipsoidNames,
                        epsgData.Repository.PrimeMeridianNames,
                        epsgData.Repository.UomNames
                        )
                    .Where(x => x != null)
                    .SelectMany(StringUtils.BreakIntoWordParts)
                    )
                                          .OrderByDescending(o => o.Value)
                                          .ThenBy(o => o.Key.Length)
                                          .Select(o => o.Key)
                                          .ToList();

                using (var streamIndex = File.Open(Path.Combine(outFolder, "words.dat"), FileMode.Create))
                    using (var writerIndex = new BinaryWriter(streamIndex))
                        using (var streamText = File.Open(Path.Combine(outFolder, "words.txt"), FileMode.Create))
                            using (var writerText = new BinaryWriter(streamText))
                                WriterUtils.WriteWordLookUp(epsgData, writerText, writerIndex);

                epsgData.SetNumberLists(NumberUtils.BuildNumberCountLookUp(Concat(
                                                                               //ExtractDoubles(epsgData.Areas, o => o.EastBound, o => o.WestBound, o => o.SouthBound, o => o.NorthBound),
                                                                               ExtractDoubles(epsgData.Repository.CoordinateOperations, o => o.Accuracy),
                                                                               ExtractDoubles(epsgData.Repository.Ellipsoids, o => o.SemiMajorAxis, o => o.SemiMinorAxis, o => o.InverseFlattening),
                                                                               ExtractDoubles(epsgData.Repository.ParamValues, o => o.NumericValue),
                                                                               ExtractDoubles(epsgData.Repository.PrimeMeridians, o => o.GreenwichLon),
                                                                               ExtractDoubles(epsgData.Repository.Uoms, o => o.FactorB, o => o.FactorC)
                                                                               ))
                                        .OrderByDescending(o => o.Value)
                                        .Select(o => o.Key)
                                        );

                using (var streamDouble = File.Open(Path.Combine(outFolder, "numbersd.dat"), FileMode.Create))
                    using (var writerDouble = new BinaryWriter(streamDouble))
                        using (var streamInt = File.Open(Path.Combine(outFolder, "numbersi.dat"), FileMode.Create))
                            using (var writerInt = new BinaryWriter(streamInt))
                                using (var streamShort = File.Open(Path.Combine(outFolder, "numberss.dat"), FileMode.Create))
                                    using (var writerShort = new BinaryWriter(streamShort))
                                        WriterUtils.WriteNumberLookUps(epsgData, writerDouble, writerInt, writerShort);

                using (var streamOpForward = File.Open(Path.Combine(outFolder, "txfrom.dat"), FileMode.Create))
                    using (var writerOpForward = new BinaryWriter(streamOpForward))
                        using (var streamOpReverse = File.Open(Path.Combine(outFolder, "txto.dat"), FileMode.Create))
                            using (var writerOpReverse = new BinaryWriter(streamOpReverse))
                                WriterUtils.WriteOpPaths(epsgData, writerOpForward, writerOpReverse);

                using (var streamFromBase2 = File.Open(Path.Combine(outFolder, "crsfrombase.dat"), FileMode.Create))
                    using (var writerFromBase2 = new BinaryWriter(streamFromBase2))
                        using (var streamFromBase4 = File.Open(Path.Combine(outFolder, "crsfrombase_wide.dat"), FileMode.Create))
                            using (var writerFromBase4 = new BinaryWriter(streamFromBase4))
                                WriterUtils.WriteFromBase(epsgData, writerFromBase2, writerFromBase4);

                using (var streamData = File.Open(Path.Combine(outFolder, "areas.dat"), FileMode.Create))
                    using (var writerData = new BinaryWriter(streamData))
                        using (var streamText = File.Open(Path.Combine(outFolder, "areas.txt"), FileMode.Create))
                            using (var writerText = new BinaryWriter(streamText))
                                WriterUtils.WriteAreas(epsgData, writerData, writerText);

                using (var streamText = File.Open(Path.Combine(outFolder, "axis.txt"), FileMode.Create))
                    using (var writerText = new BinaryWriter(streamText))
                        using (var stream1Data = File.Open(Path.Combine(outFolder, "axis1.dat"), FileMode.Create))
                            using (var writer1Data = new BinaryWriter(stream1Data))
                                using (var stream2Data = File.Open(Path.Combine(outFolder, "axis2.dat"), FileMode.Create))
                                    using (var writer2Data = new BinaryWriter(stream2Data))
                                        using (var stream3Data = File.Open(Path.Combine(outFolder, "axis3.dat"), FileMode.Create))
                                            using (var writer3Data = new BinaryWriter(stream3Data))
                                                WriterUtils.WriteAxes(epsgData, writerText, writer1Data, writer2Data, writer3Data);

                using (var streamData = File.Open(Path.Combine(outFolder, "ellipsoids.dat"), FileMode.Create))
                    using (var writerData = new BinaryWriter(streamData))
                        using (var streamText = File.Open(Path.Combine(outFolder, "ellipsoids.txt"), FileMode.Create))
                            using (var writerText = new BinaryWriter(streamText))
                                WriterUtils.WriteEllipsoids(epsgData, writerData, writerText);

                using (var streamData = File.Open(Path.Combine(outFolder, "meridians.dat"), FileMode.Create))
                    using (var writerData = new BinaryWriter(streamData))
                        using (var streamText = File.Open(Path.Combine(outFolder, "meridians.txt"), FileMode.Create))
                            using (var writerText = new BinaryWriter(streamText))
                                WriterUtils.WriteMeridians(epsgData, writerData, writerText);

                using (var streamDataEngineering = File.Open(Path.Combine(outFolder, "datumegr.dat"), FileMode.Create))
                    using (var writerDataEngineering = new BinaryWriter(streamDataEngineering))
                        using (var streamDataVertical = File.Open(Path.Combine(outFolder, "datumver.dat"), FileMode.Create))
                            using (var writerDataVertical = new BinaryWriter(streamDataVertical))
                                using (var streamDataGeo = File.Open(Path.Combine(outFolder, "datumgeo.dat"), FileMode.Create))
                                    using (var writerDataGeo = new BinaryWriter(streamDataGeo))
                                        using (var streamText = File.Open(Path.Combine(outFolder, "datums.txt"), FileMode.Create))
                                            using (var writerText = new BinaryWriter(streamText))
                                                WriterUtils.WriteDatums(epsgData, writerDataEngineering, writerDataVertical, writerDataGeo, writerText);

                using (var streamDataLength = File.Open(Path.Combine(outFolder, "uomlength.dat"), FileMode.Create))
                    using (var writerDataLength = new BinaryWriter(streamDataLength))
                        using (var streamDataAngle = File.Open(Path.Combine(outFolder, "uomangle.dat"), FileMode.Create))
                            using (var writerDataAngle = new BinaryWriter(streamDataAngle))
                                using (var streamDataScale = File.Open(Path.Combine(outFolder, "uomscale.dat"), FileMode.Create))
                                    using (var writerDataScale = new BinaryWriter(streamDataScale))
                                        using (var streamDataTime = File.Open(Path.Combine(outFolder, "uomtime.dat"), FileMode.Create))
                                            using (var writerDataTime = new BinaryWriter(streamDataTime))
                                                using (var streamText = File.Open(Path.Combine(outFolder, "uoms.txt"), FileMode.Create))
                                                    using (var writerText = new BinaryWriter(streamText))
                                                        WriterUtils.WriteUnitOfMeasures(epsgData, writerDataLength, writerDataAngle, writerDataScale, writerDataTime, writerText);

                using (var streamData = File.Open(Path.Combine(outFolder, "parameters.dat"), FileMode.Create))
                    using (var writerData = new BinaryWriter(streamData))
                        using (var streamText = File.Open(Path.Combine(outFolder, "parameters.txt"), FileMode.Create))
                            using (var writerText = new BinaryWriter(streamText))
                                WriterUtils.WriteParameters(epsgData, writerData, writerText);

                using (var streamData = File.Open(Path.Combine(outFolder, "opmethod.dat"), FileMode.Create))
                    using (var writerData = new BinaryWriter(streamData))
                        using (var streamText = File.Open(Path.Combine(outFolder, "opmethod.txt"), FileMode.Create))
                            using (var writerText = new BinaryWriter(streamText))
                                WriterUtils.WriteOpMethod(epsgData, writerData, writerText);

                using (var streamData = File.Open(Path.Combine(outFolder, "coordsys.dat"), FileMode.Create))
                    using (var writerData = new BinaryWriter(streamData))
                        using (var streamText = File.Open(Path.Combine(outFolder, "coordsys.txt"), FileMode.Create))
                            using (var writerText = new BinaryWriter(streamText))
                                WriterUtils.WriteCoordinateSystems(epsgData, writerData, writerText);

                using (var streamText = File.Open(Path.Combine(outFolder, "params.txt"), FileMode.Create))
                    using (var writerText = new BinaryWriter(streamText))
                        WriterUtils.WriteParamData(
                            epsgData, writerText,
                            code => new BinaryWriter(
                                File.Open(
                                    Path.Combine(outFolder, String.Format("param{0}.dat", code)),
                                    FileMode.Create
                                    )
                                )
                            );

                using (var streamDataNormal = File.Open(Path.Combine(outFolder, "crs.dat"), FileMode.Create))
                    using (var writerDataNormal = new BinaryWriter(streamDataNormal))
                        using (var streamDataComposite = File.Open(Path.Combine(outFolder, "crscmp.dat"), FileMode.Create))
                            using (var writerDataComposite = new BinaryWriter(streamDataComposite))
                                using (var streamText = File.Open(Path.Combine(outFolder, "crs.txt"), FileMode.Create))
                                    using (var writerText = new BinaryWriter(streamText))
                                        WriterUtils.WriteCoordinateReferenceSystem(epsgData, writerText, writerDataNormal, writerDataComposite);

                using (var streamDataConversion = File.Open(Path.Combine(outFolder, "opconv.dat"), FileMode.Create))
                    using (var writerDataConversion = new BinaryWriter(streamDataConversion))
                        using (var streamDataConcat = File.Open(Path.Combine(outFolder, "opcat.dat"), FileMode.Create))
                            using (var writerDataConcat = new BinaryWriter(streamDataConcat))
                                using (var streamDataTransform = File.Open(Path.Combine(outFolder, "optran.dat"), FileMode.Create))
                                    using (var writerDataTransform = new BinaryWriter(streamDataTransform))
                                        using (var streamDataPath = File.Open(Path.Combine(outFolder, "oppath.dat"), FileMode.Create))
                                            using (var writerDataPath = new BinaryWriter(streamDataPath))
                                                using (var streamText = File.Open(Path.Combine(outFolder, "op.txt"), FileMode.Create))
                                                    using (var writerText = new BinaryWriter(streamText))
                                                        WriterUtils.WriteCoordinateOperations(epsgData, writerText, writerDataConversion, writerDataTransform, writerDataConcat, writerDataPath);
            }
        }
コード例 #3
0
ファイル: EpsgData.cs プロジェクト: GISwilson/pigeoid
 public EpsgData(EpsgRepository repository)
 {
     Repository = repository;
 }