コード例 #1
0
        public void ParseGpsDirectory_ValidDirectory_LatLongMetadata()
        {
            var gpsDirectory = new GpsDirectory();
            var photo        = new Photo("");

            var gpsReference   = "N";
            var gpsRationalArr = new Rational[3]
            {
                new Rational(1, 1),
                new Rational(60, 1),
                new Rational(3600, 1)
            };

            gpsDirectory.Set(GpsDirectory.TagLatitudeRef, gpsReference);
            gpsDirectory.Set(GpsDirectory.TagLatitude, gpsRationalArr);

            gpsDirectory.Set(GpsDirectory.TagLongitudeRef, gpsReference);
            gpsDirectory.Set(GpsDirectory.TagLongitude, gpsRationalArr);

            gpsDirectory.Parse(photo);

            var actualLatitude  = photo.Latitude;
            var actualLongitude = photo.Longitude;

            var expectedLatitude  = MetadataConverter.DegreesMinutesSecondsToDecimalDegrees(gpsRationalArr, gpsReference);
            var expectedLongitude = MetadataConverter.DegreesMinutesSecondsToDecimalDegrees(gpsRationalArr, gpsReference);

            Assert.Equal(expectedLatitude, actualLatitude);
            Assert.Equal(expectedLongitude, actualLongitude);
        }
コード例 #2
0
        /// <summary>Parses <see cref="ExifSubIfdDirectory" /> metadata and saves it to the <see cref="Photo" />.</summary>
        /// <param name="directory">Directory containing the F-number, ISO, shutter speed, datetime original and focal length metadata.</param>
        /// <param name="photo">Photo object used for storing metadata.</param>
        public static void Parse(this ExifSubIfdDirectory directory, Photo photo)
        {
            if (directory is null || photo is null)
            {
                return;
            }

            if (directory.TryGetSingle(ExifDirectoryBase.TagFNumber, out var fNum))
            {
                photo.FNumber = fNum;
            }

            if (directory.TryGetInt16(ExifDirectoryBase.TagIsoEquivalent, out var iso))
            {
                photo.Iso = iso;
            }

            if (directory.TryGetSingle(ExifDirectoryBase.TagShutterSpeed, out var apexValue))
            {
                photo.ShutterSpeed = MetadataConverter.ComputeShutterSpeed(apexValue);
            }

            if (directory.TryGetDateTime(ExifDirectoryBase.TagDateTimeOriginal, out var dateTimeOriginal))
            {
                photo.DateTimeOriginal = dateTimeOriginal;
            }

            if (directory.TryGetSingle(ExifDirectoryBase.TagFocalLength, out var focalLength))
            {
                photo.FocalLength = focalLength;
            }
        }
コード例 #3
0
        /// <summary>Parses <see cref="GpsDirectory" /> metadata and saves it to the <see cref="Photo" />.</summary>
        /// <param name="directory">Directory containing the GPS metadata.</param>
        /// <param name="photo">Photo object used for storing metadata.</param>
        public static void Parse(this GpsDirectory directory, Photo photo)
        {
            if (directory is null || photo is null)
            {
                return;
            }

            var gpsLatRef = directory.GetString(GpsDirectory.TagLatitudeRef);
            var gpsLat    = directory.GetRationalArray(GpsDirectory.TagLatitude);

            var gpsLonRef = directory.GetString(GpsDirectory.TagLongitudeRef);
            var gpsLon    = directory.GetRationalArray(GpsDirectory.TagLongitude);

            var latitude  = MetadataConverter.DegreesMinutesSecondsToDecimalDegrees(gpsLat, gpsLatRef);
            var longitude = MetadataConverter.DegreesMinutesSecondsToDecimalDegrees(gpsLon, gpsLonRef);

            photo.Latitude  = latitude;
            photo.Longitude = longitude;

            // if we cannot get both the altitude and its reference, do not save anything
            if (directory.TryGetByte(GpsDirectory.TagAltitudeRef, out var gpsAltBit) &&
                directory.TryGetInt16(GpsDirectory.TagAltitude, out var gpsAlt))
            {
                photo.AltitudeReference = gpsAltBit == 0 ? "Sea level" : "Below sea level";
                photo.Altitude          = gpsAlt;
            }
        }
コード例 #4
0
        public void ComputeShutterSpeed_GreaterThanOneValue()
        {
            var expected = "1/4 sec"; // exp(2 * log(2)) = 4

            var actual = MetadataConverter.ComputeShutterSpeed(2);

            Assert.Equal(expected, actual);
        }
コード例 #5
0
        public void ComputeGpsDmsToDecimalDegrees_InvalidDms()
        {
            var degMinSec = new Rational[2];

            var actual = MetadataConverter.DegreesMinutesSecondsToDecimalDegrees(degMinSec, "");

            Assert.Null(actual);
        }
コード例 #6
0
        public Metadata GetForTargetAssembly(string path)
        {
            if (!File.Exists(path))
            {
                return(null);
            }

            using (var session = _provider.GetMetadata(GetAssemblies(path)))
                return(MetadataConverter.ConvertMetadata(session));
        }
コード例 #7
0
        public void ComputeGpsDmsToDecimalDegrees_ValidDms_InvalidGpsReference()
        {
            var degMinSec = new Rational[3];

            degMinSec[0] = new Rational(1, 1);      // 1
            degMinSec[1] = new Rational(60, 1);     // 60
            degMinSec[2] = new Rational(3600, 1);   // 3600

            Assert.Throws <ArgumentException>(() => MetadataConverter.DegreesMinutesSecondsToDecimalDegrees(degMinSec, "A"));
        }
コード例 #8
0
        public void Convert_v0_1_0alpha4_ConvertsProperly()
        {
            Models.v0_1.Metadata input =
                new Models.v0_1.Metadata();

            var sut = new MetadataConverter();

            var actual = sut.Convert(input);

            Assert.IsType <Models.v0_1.Metadata>(actual);
        }
コード例 #9
0
        public void ComputeShutterSpeed_LessOrEqualToOneValue()
        {
            // Align the data formatting for testing
            Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-US");

            var expected = "0.5 sec"; // round((1 / exp(1 * log(2))) * 10) / 10 = 0.5

            var actual = MetadataConverter.ComputeShutterSpeed(1);

            Assert.Equal(expected, actual);
        }
コード例 #10
0
        public void Convert_v0_1_0alpha3Nulls_ConvertsProperly()
        {
            Models.v0_1_0alpha3.Metadata input =
                new Models.v0_1_0alpha3.Metadata();
            input.File.CreationDate = "2020-01-01";

            var sut = new MetadataConverter();

            var actual = sut.Convert(input);

            Assert.IsType <Models.v0_2.Metadata>(actual);
        }
コード例 #11
0
        public void ComputeGpsDmsToDecimalDegrees_ValidDms_SouthGpsReference()
        {
            var degMinSec = new Rational[3];

            degMinSec[0] = new Rational(1, 1);    // 1
            degMinSec[1] = new Rational(60, 1);   // 60
            degMinSec[2] = new Rational(3600, 1); // 3600

            var expected = -3.0;                  // -1 * (1 + 60/60 + 3600/3600) = -3.0

            var actual = MetadataConverter.DegreesMinutesSecondsToDecimalDegrees(degMinSec, "S");

            Assert.Equal(expected, actual);
        }
コード例 #12
0
ファイル: Serializer.cs プロジェクト: mukut1994/SeeRaw
        public void Write(MetadataSerializer serializer, Utf8JsonWriter writer, object value, IEnumerable <string> valuePath, RendererContext context)
        {
            writer.WriteString("type", "object");
            writer.WriteString("extendedType", MetadataConverter.GetFullName(value.GetType()));

            var dict = value as Dictionary <TKey, TValue>;

            writer.WriteStartObject("children");

            foreach (var kv in dict)
            {
                writer.WriteStartObject(kv.Key.ToString());
                serializer.Serialize(writer, kv.Value, valuePath, context);
                writer.WriteEndObject();
            }

            writer.WriteEndObject();
        }
コード例 #13
0
        private void UpdateXsltMetadata()
        {
            DataTable MapTable     = null;
            string    MetadataText = string.Empty;

            // Get Area_Map Metadata Table
            MapTable = this.DBConnection.ExecuteDataTable(this.DBQueries.Xslt.GetXSLT(FilterFieldType.Search, XSLT.XSLTText + " IS NOT NULL OR " + XSLT.XSLTText + " <> '' "));

            foreach (DataRow Row in MapTable.Rows)
            {
                MetadataText = Convert.ToString(Row[XSLT.XSLTText]);
                if (!string.IsNullOrEmpty(MetadataText))
                {
                    MetadataText = MetadataConverter.ConvertXml(MetadataText);

                    // Update IndicatorClassificationInfo(Metadata)
                    this.DBConnection.ExecuteNonQuery(DevInfo.Lib.DI_LibDAL.Queries.Xslt.Update.UpdateXSLT(this.DBQueries.DataPrefix, DICommon.RemoveQuotes(MetadataText), Convert.ToString(Row[XSLT.XSLTFile])));
                }
            }
        }
コード例 #14
0
        private void ConvertICMetadata()
        {
            DataTable ICTable = null;
            string    ICInfo  = string.Empty;

            // Get Indicator Metadata Table
            ICTable = this.DBConnection.ExecuteDataTable(this.DBQueries.IndicatorClassification.GetICForSearch(FilterFieldType.Search, IndicatorClassifications.ICInfo + " IS NOT NULL AND " + IndicatorClassifications.ICInfo + " <> '' ", FieldSelection.Heavy));

            // Update each Indicator Row where Metadata exists
            foreach (DataRow Row in ICTable.Rows)
            {
                ICInfo = Convert.ToString(Row[IndicatorClassifications.ICInfo]);
                if (!string.IsNullOrEmpty(ICInfo))
                {
                    ICInfo = MetadataConverter.ConvertXml(ICInfo);

                    // Update IndicatorClassificationInfo(Source Metadata)
                    this.DBConnection.ExecuteNonQuery(DALQueries.IndicatorClassification.Update.UpdateICInfo(this.DBQueries.DataPrefix, this.DBQueries.LanguageCode, DICommon.RemoveQuotes(ICInfo), ICType.Source, Convert.ToInt32(Row[IndicatorClassifications.ICNId])));
                }
            }
        }
コード例 #15
0
        public void Test1()
        {
            var fileSystem = new MockFileSystem();
            var conv       = new MetadataConverter(Encoding.UTF8, fileSystem);
            var filePath   = @"c:\Test\Metadata";
            var data       = new byte[] { 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x05, 0x44, 0x41, 0x54, 0x45, 0x53, 0x24, 0x35, 0x37, 0x33, 0x65, 0x66, 0x62, 0x31, 0x34, 0x2D, 0x36, 0x30, 0x33, 0x33, 0x2D, 0x34, 0x36, 0x61, 0x61, 0x2D, 0x38, 0x34, 0x63, 0x36, 0x2D, 0x37, 0x64, 0x33, 0x38, 0x35, 0x39, 0x38, 0x39, 0x62, 0x61, 0x61, 0x62, 0x12, 0x46, 0x4F, 0x52, 0x4D, 0x41, 0x54, 0x49, 0x4F, 0x4E, 0x53, 0x5F, 0x53, 0x41, 0x4C, 0x41, 0x52, 0x49, 0x45, 0x24, 0x66, 0x66, 0x66, 0x64, 0x37, 0x31, 0x63, 0x30, 0x2D, 0x31, 0x37, 0x66, 0x61, 0x2D, 0x34, 0x62, 0x64, 0x35, 0x2D, 0x62, 0x38, 0x31, 0x65, 0x2D, 0x30, 0x30, 0x32, 0x64, 0x37, 0x32, 0x63, 0x34, 0x38, 0x30, 0x32, 0x30, 0x12, 0x48, 0x49, 0x53, 0x54, 0x4F, 0x52, 0x49, 0x51, 0x55, 0x45, 0x5F, 0x53, 0x41, 0x4C, 0x41, 0x52, 0x49, 0x45, 0x24, 0x34, 0x31, 0x39, 0x39, 0x65, 0x63, 0x30, 0x62, 0x2D, 0x66, 0x33, 0x32, 0x36, 0x2D, 0x34, 0x33, 0x30, 0x66, 0x2D, 0x39, 0x35, 0x63, 0x36, 0x2D, 0x31, 0x37, 0x62, 0x66, 0x39, 0x38, 0x33, 0x35, 0x34, 0x31, 0x31, 0x37, 0x3B, 0x54, 0x72, 0x61, 0x6E, 0x73, 0x66, 0x6F, 0x72, 0x6D, 0x65, 0x72, 0x20, 0x6C, 0x27, 0x65, 0x78, 0x65, 0x6D, 0x70, 0x6C, 0x65, 0x20, 0x64, 0x65, 0x20, 0x66, 0x69, 0x63, 0x68, 0x69, 0x65, 0x72, 0x20, 0xC3, 0xA0, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x72, 0x20, 0x64, 0x65, 0x20, 0x46, 0x49, 0x43, 0x48, 0x49, 0x45, 0x52, 0x53, 0x20, 0x52, 0x45, 0x4D, 0x55, 0x24, 0x31, 0x32, 0x33, 0x65, 0x61, 0x32, 0x34, 0x33, 0x2D, 0x37, 0x37, 0x63, 0x33, 0x2D, 0x34, 0x39, 0x39, 0x61, 0x2D, 0x38, 0x33, 0x34, 0x38, 0x2D, 0x61, 0x37, 0x37, 0x39, 0x39, 0x34, 0x32, 0x63, 0x65, 0x36, 0x30, 0x61, 0x23, 0x50, 0x61, 0x72, 0x61, 0x6D, 0xC3, 0xA8, 0x74, 0x72, 0x65, 0x20, 0x64, 0x65, 0x20, 0x6C, 0x27, 0x65, 0x78, 0x65, 0x6D, 0x70, 0x6C, 0x65, 0x20, 0x64, 0x65, 0x20, 0x66, 0x69, 0x63, 0x68, 0x69, 0x65, 0x72, 0x31, 0x24, 0x36, 0x65, 0x37, 0x37, 0x66, 0x37, 0x66, 0x63, 0x2D, 0x32, 0x30, 0x64, 0x66, 0x2D, 0x34, 0x63, 0x31, 0x61, 0x2D, 0x62, 0x32, 0x62, 0x34, 0x2D, 0x62, 0x39, 0x37, 0x64, 0x65, 0x35, 0x65, 0x64, 0x36, 0x34, 0x39, 0x33, 0x12, 0x45, 0x78, 0x65, 0x6D, 0x70, 0x6C, 0x65, 0x20, 0x64, 0x65, 0x20, 0x66, 0x69, 0x63, 0x68, 0x69, 0x65, 0x72, 0x24, 0x36, 0x63, 0x30, 0x63, 0x64, 0x32, 0x34, 0x62, 0x2D, 0x38, 0x61, 0x30, 0x37, 0x2D, 0x34, 0x38, 0x30, 0x66, 0x2D, 0x39, 0x38, 0x31, 0x32, 0x2D, 0x62, 0x66, 0x66, 0x64, 0x61, 0x64, 0x37, 0x34, 0x35, 0x30, 0x37, 0x35, 0x31, 0x54, 0x72, 0x61, 0x6E, 0x73, 0x66, 0x6F, 0x72, 0x6D, 0x65, 0x72, 0x20, 0x6C, 0x65, 0x20, 0x66, 0x69, 0x63, 0x68, 0x69, 0x65, 0x72, 0x20, 0xC3, 0xA0, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x72, 0x20, 0x64, 0x65, 0x20, 0x46, 0x49, 0x43, 0x48, 0x49, 0x45, 0x52, 0x53, 0x20, 0x52, 0x45, 0x4D, 0x55, 0x24, 0x37, 0x39, 0x30, 0x38, 0x66, 0x61, 0x32, 0x34, 0x2D, 0x66, 0x63, 0x61, 0x65, 0x2D, 0x34, 0x37, 0x61, 0x30, 0x2D, 0x61, 0x63, 0x36, 0x35, 0x2D, 0x37, 0x33, 0x35, 0x37, 0x30, 0x30, 0x38, 0x62, 0x32, 0x34, 0x38, 0x66, 0x10, 0x41, 0x42, 0x53, 0x45, 0x4E, 0x43, 0x45, 0x53, 0x5F, 0x53, 0x41, 0x4C, 0x41, 0x52, 0x49, 0x45, 0x24, 0x35, 0x30, 0x66, 0x33, 0x38, 0x63, 0x35, 0x63, 0x2D, 0x62, 0x32, 0x66, 0x62, 0x2D, 0x34, 0x62, 0x30, 0x32, 0x2D, 0x39, 0x31, 0x62, 0x38, 0x2D, 0x63, 0x33, 0x38, 0x63, 0x30, 0x63, 0x62, 0x65, 0x32, 0x31, 0x33, 0x61, 0x11, 0x41, 0x43, 0x54, 0x49, 0x56, 0x49, 0x54, 0x45, 0x53, 0x5F, 0x53, 0x41, 0x4C, 0x41, 0x52, 0x49, 0x45, 0x24, 0x63, 0x34, 0x64, 0x36, 0x32, 0x31, 0x39, 0x32, 0x2D, 0x38, 0x65, 0x32, 0x61, 0x2D, 0x34, 0x38, 0x64, 0x38, 0x2D, 0x62, 0x38, 0x33, 0x34, 0x2D, 0x62, 0x39, 0x63, 0x36, 0x65, 0x38, 0x33, 0x37, 0x34, 0x34, 0x37, 0x65, 0x17, 0x31, 0x5F, 0x4D, 0x54, 0x34, 0x5F, 0x4D, 0x45, 0x53, 0x55, 0x52, 0x45, 0x53, 0x20, 0x45, 0x46, 0x46, 0x45, 0x43, 0x54, 0x49, 0x46, 0x53, 0x24, 0x39, 0x62, 0x37, 0x62, 0x62, 0x66, 0x62, 0x36, 0x2D, 0x39, 0x32, 0x33, 0x32, 0x2D, 0x34, 0x31, 0x33, 0x30, 0x2D, 0x61, 0x39, 0x34, 0x32, 0x2D, 0x66, 0x39, 0x66, 0x62, 0x31, 0x35, 0x38, 0x33, 0x37, 0x30, 0x35, 0x35, 0x15, 0x54, 0x45, 0x4D, 0x50, 0x53, 0x5F, 0x54, 0x52, 0x41, 0x56, 0x41, 0x49, 0x4C, 0x5F, 0x53, 0x41, 0x4C, 0x41, 0x52, 0x49, 0x45, 0x24, 0x63, 0x33, 0x61, 0x30, 0x32, 0x64, 0x64, 0x36, 0x2D, 0x37, 0x63, 0x30, 0x64, 0x2D, 0x34, 0x34, 0x63, 0x39, 0x2D, 0x38, 0x64, 0x33, 0x36, 0x2D, 0x35, 0x32, 0x37, 0x64, 0x35, 0x34, 0x62, 0x30, 0x35, 0x31, 0x30, 0x39, 0x14, 0x52, 0x45, 0x4D, 0x55, 0x4E, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4F, 0x4E, 0x5F, 0x53, 0x41, 0x4C, 0x41, 0x52, 0x49, 0x45, 0x24, 0x32, 0x36, 0x31, 0x65, 0x30, 0x31, 0x39, 0x39, 0x2D, 0x37, 0x62, 0x34, 0x39, 0x2D, 0x34, 0x63, 0x33, 0x63, 0x2D, 0x38, 0x33, 0x64, 0x39, 0x2D, 0x61, 0x33, 0x62, 0x66, 0x65, 0x38, 0x64, 0x66, 0x36, 0x37, 0x61, 0x34, 0x21, 0x45, 0x72, 0x72, 0x65, 0x75, 0x72, 0x73, 0x20, 0x64, 0x61, 0x6E, 0x73, 0x20, 0x52, 0x45, 0x4D, 0x55, 0x4E, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4F, 0x4E, 0x5F, 0x53, 0x41, 0x4C, 0x41, 0x52, 0x49, 0x45, 0x24, 0x30, 0x63, 0x32, 0x64, 0x35, 0x63, 0x66, 0x63, 0x2D, 0x34, 0x32, 0x62, 0x33, 0x2D, 0x34, 0x39, 0x30, 0x33, 0x2D, 0x38, 0x34, 0x62, 0x66, 0x2D, 0x34, 0x63, 0x35, 0x38, 0x64, 0x62, 0x39, 0x34, 0x38, 0x38, 0x64, 0x64, 0x10, 0x73, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x20, 0x73, 0x71, 0x6C, 0x20, 0x73, 0x65, 0x75, 0x6C, 0x65, 0x24, 0x62, 0x34, 0x32, 0x32, 0x33, 0x31, 0x32, 0x62, 0x2D, 0x37, 0x36, 0x38, 0x34, 0x2D, 0x34, 0x34, 0x36, 0x63, 0x2D, 0x38, 0x62, 0x37, 0x34, 0x2D, 0x34, 0x65, 0x62, 0x32, 0x65, 0x31, 0x30, 0x36, 0x64, 0x34, 0x34, 0x34, 0x1A, 0x32, 0x5F, 0x4D, 0x54, 0x34, 0x5F, 0x4D, 0x45, 0x53, 0x55, 0x52, 0x45, 0x53, 0x20, 0x52, 0x45, 0x4D, 0x55, 0x4E, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4F, 0x4E, 0x24, 0x35, 0x65, 0x38, 0x37, 0x35, 0x35, 0x36, 0x65, 0x2D, 0x39, 0x37, 0x62, 0x33, 0x2D, 0x34, 0x61, 0x66, 0x35, 0x2D, 0x62, 0x63, 0x64, 0x63, 0x2D, 0x61, 0x62, 0x61, 0x36, 0x33, 0x34, 0x34, 0x37, 0x61, 0x34, 0x33, 0x33, 0x18, 0x33, 0x5F, 0x4D, 0x54, 0x34, 0x5F, 0x4D, 0x45, 0x53, 0x55, 0x52, 0x45, 0x53, 0x20, 0x4D, 0x4F, 0x55, 0x56, 0x45, 0x4D, 0x45, 0x4E, 0x54, 0x53, 0x24, 0x39, 0x34, 0x39, 0x32, 0x31, 0x38, 0x62, 0x33, 0x2D, 0x66, 0x65, 0x30, 0x61, 0x2D, 0x34, 0x64, 0x35, 0x66, 0x2D, 0x61, 0x62, 0x63, 0x63, 0x2D, 0x33, 0x30, 0x38, 0x37, 0x37, 0x33, 0x61, 0x33, 0x34, 0x31, 0x32, 0x39, 0x17, 0x34, 0x5F, 0x4D, 0x54, 0x34, 0x5F, 0x4D, 0x45, 0x53, 0x55, 0x52, 0x45, 0x53, 0x20, 0x46, 0x4F, 0x52, 0x4D, 0x41, 0x54, 0x49, 0x4F, 0x4E, 0x24, 0x64, 0x65, 0x36, 0x36, 0x63, 0x36, 0x36, 0x65, 0x2D, 0x39, 0x33, 0x63, 0x37, 0x2D, 0x34, 0x34, 0x64, 0x66, 0x2D, 0x62, 0x65, 0x30, 0x31, 0x2D, 0x32, 0x39, 0x39, 0x33, 0x61, 0x36, 0x62, 0x39, 0x31, 0x33, 0x33, 0x64, 0x17, 0x35, 0x5F, 0x4D, 0x54, 0x34, 0x5F, 0x4D, 0x45, 0x53, 0x55, 0x52, 0x45, 0x53, 0x20, 0x44, 0x41, 0x53, 0x48, 0x42, 0x4F, 0x41, 0x52, 0x44, 0x24, 0x64, 0x66, 0x64, 0x64, 0x30, 0x32, 0x31, 0x35, 0x2D, 0x33, 0x61, 0x35, 0x37, 0x2D, 0x34, 0x38, 0x34, 0x30, 0x2D, 0x61, 0x38, 0x35, 0x31, 0x2D, 0x31, 0x33, 0x34, 0x37, 0x31, 0x33, 0x65, 0x31, 0x38, 0x37, 0x33, 0x31, 0x1B, 0x36, 0x5F, 0x4D, 0x54, 0x34, 0x5F, 0x4D, 0x45, 0x53, 0x55, 0x52, 0x45, 0x53, 0x5F, 0x54, 0x45, 0x4D, 0x50, 0x53, 0x5F, 0x54, 0x52, 0x41, 0x56, 0x41, 0x49, 0x4C, 0x24, 0x64, 0x38, 0x64, 0x38, 0x61, 0x37, 0x65, 0x62, 0x2D, 0x38, 0x30, 0x39, 0x30, 0x2D, 0x34, 0x33, 0x62, 0x35, 0x2D, 0x38, 0x66, 0x32, 0x34, 0x2D, 0x61, 0x66, 0x33, 0x39, 0x39, 0x63, 0x32, 0x66, 0x39, 0x62, 0x33, 0x63, 0x13, 0x00, 0x00, 0x00, 0x24, 0x35, 0x37, 0x33, 0x65, 0x66, 0x62, 0x31, 0x34, 0x2D, 0x36, 0x30, 0x33, 0x33, 0x2D, 0x34, 0x36, 0x61, 0x61, 0x2D, 0x38, 0x34, 0x63, 0x36, 0x2D, 0x37, 0x64, 0x33, 0x38, 0x35, 0x39, 0x38, 0x39, 0x62, 0x61, 0x61, 0x62, 0x05, 0x44, 0x41, 0x54, 0x45, 0x53, 0x24, 0x66, 0x66, 0x66, 0x64, 0x37, 0x31, 0x63, 0x30, 0x2D, 0x31, 0x37, 0x66, 0x61, 0x2D, 0x34, 0x62, 0x64, 0x35, 0x2D, 0x62, 0x38, 0x31, 0x65, 0x2D, 0x30, 0x30, 0x32, 0x64, 0x37, 0x32, 0x63, 0x34, 0x38, 0x30, 0x32, 0x30, 0x12, 0x46, 0x4F, 0x52, 0x4D, 0x41, 0x54, 0x49, 0x4F, 0x4E, 0x53, 0x5F, 0x53, 0x41, 0x4C, 0x41, 0x52, 0x49, 0x45, 0x24, 0x34, 0x31, 0x39, 0x39, 0x65, 0x63, 0x30, 0x62, 0x2D, 0x66, 0x33, 0x32, 0x36, 0x2D, 0x34, 0x33, 0x30, 0x66, 0x2D, 0x39, 0x35, 0x63, 0x36, 0x2D, 0x31, 0x37, 0x62, 0x66, 0x39, 0x38, 0x33, 0x35, 0x34, 0x31, 0x31, 0x37, 0x12, 0x48, 0x49, 0x53, 0x54, 0x4F, 0x52, 0x49, 0x51, 0x55, 0x45, 0x5F, 0x53, 0x41, 0x4C, 0x41, 0x52, 0x49, 0x45, 0x24, 0x31, 0x32, 0x33, 0x65, 0x61, 0x32, 0x34, 0x33, 0x2D, 0x37, 0x37, 0x63, 0x33, 0x2D, 0x34, 0x39, 0x39, 0x61, 0x2D, 0x38, 0x33, 0x34, 0x38, 0x2D, 0x61, 0x37, 0x37, 0x39, 0x39, 0x34, 0x32, 0x63, 0x65, 0x36, 0x30, 0x61, 0x3B, 0x54, 0x72, 0x61, 0x6E, 0x73, 0x66, 0x6F, 0x72, 0x6D, 0x65, 0x72, 0x20, 0x6C, 0x27, 0x65, 0x78, 0x65, 0x6D, 0x70, 0x6C, 0x65, 0x20, 0x64, 0x65, 0x20, 0x66, 0x69, 0x63, 0x68, 0x69, 0x65, 0x72, 0x20, 0xC3, 0xA0, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x72, 0x20, 0x64, 0x65, 0x20, 0x46, 0x49, 0x43, 0x48, 0x49, 0x45, 0x52, 0x53, 0x20, 0x52, 0x45, 0x4D, 0x55, 0x24, 0x36, 0x65, 0x37, 0x37, 0x66, 0x37, 0x66, 0x63, 0x2D, 0x32, 0x30, 0x64, 0x66, 0x2D, 0x34, 0x63, 0x31, 0x61, 0x2D, 0x62, 0x32, 0x62, 0x34, 0x2D, 0x62, 0x39, 0x37, 0x64, 0x65, 0x35, 0x65, 0x64, 0x36, 0x34, 0x39, 0x33, 0x23, 0x50, 0x61, 0x72, 0x61, 0x6D, 0xC3, 0xA8, 0x74, 0x72, 0x65, 0x20, 0x64, 0x65, 0x20, 0x6C, 0x27, 0x65, 0x78, 0x65, 0x6D, 0x70, 0x6C, 0x65, 0x20, 0x64, 0x65, 0x20, 0x66, 0x69, 0x63, 0x68, 0x69, 0x65, 0x72, 0x31, 0x24, 0x36, 0x63, 0x30, 0x63, 0x64, 0x32, 0x34, 0x62, 0x2D, 0x38, 0x61, 0x30, 0x37, 0x2D, 0x34, 0x38, 0x30, 0x66, 0x2D, 0x39, 0x38, 0x31, 0x32, 0x2D, 0x62, 0x66, 0x66, 0x64, 0x61, 0x64, 0x37, 0x34, 0x35, 0x30, 0x37, 0x35, 0x12, 0x45, 0x78, 0x65, 0x6D, 0x70, 0x6C, 0x65, 0x20, 0x64, 0x65, 0x20, 0x66, 0x69, 0x63, 0x68, 0x69, 0x65, 0x72, 0x24, 0x37, 0x39, 0x30, 0x38, 0x66, 0x61, 0x32, 0x34, 0x2D, 0x66, 0x63, 0x61, 0x65, 0x2D, 0x34, 0x37, 0x61, 0x30, 0x2D, 0x61, 0x63, 0x36, 0x35, 0x2D, 0x37, 0x33, 0x35, 0x37, 0x30, 0x30, 0x38, 0x62, 0x32, 0x34, 0x38, 0x66, 0x31, 0x54, 0x72, 0x61, 0x6E, 0x73, 0x66, 0x6F, 0x72, 0x6D, 0x65, 0x72, 0x20, 0x6C, 0x65, 0x20, 0x66, 0x69, 0x63, 0x68, 0x69, 0x65, 0x72, 0x20, 0xC3, 0xA0, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x72, 0x20, 0x64, 0x65, 0x20, 0x46, 0x49, 0x43, 0x48, 0x49, 0x45, 0x52, 0x53, 0x20, 0x52, 0x45, 0x4D, 0x55, 0x24, 0x35, 0x30, 0x66, 0x33, 0x38, 0x63, 0x35, 0x63, 0x2D, 0x62, 0x32, 0x66, 0x62, 0x2D, 0x34, 0x62, 0x30, 0x32, 0x2D, 0x39, 0x31, 0x62, 0x38, 0x2D, 0x63, 0x33, 0x38, 0x63, 0x30, 0x63, 0x62, 0x65, 0x32, 0x31, 0x33, 0x61, 0x10, 0x41, 0x42, 0x53, 0x45, 0x4E, 0x43, 0x45, 0x53, 0x5F, 0x53, 0x41, 0x4C, 0x41, 0x52, 0x49, 0x45, 0x24, 0x63, 0x34, 0x64, 0x36, 0x32, 0x31, 0x39, 0x32, 0x2D, 0x38, 0x65, 0x32, 0x61, 0x2D, 0x34, 0x38, 0x64, 0x38, 0x2D, 0x62, 0x38, 0x33, 0x34, 0x2D, 0x62, 0x39, 0x63, 0x36, 0x65, 0x38, 0x33, 0x37, 0x34, 0x34, 0x37, 0x65, 0x11, 0x41, 0x43, 0x54, 0x49, 0x56, 0x49, 0x54, 0x45, 0x53, 0x5F, 0x53, 0x41, 0x4C, 0x41, 0x52, 0x49, 0x45, 0x24, 0x39, 0x62, 0x37, 0x62, 0x62, 0x66, 0x62, 0x36, 0x2D, 0x39, 0x32, 0x33, 0x32, 0x2D, 0x34, 0x31, 0x33, 0x30, 0x2D, 0x61, 0x39, 0x34, 0x32, 0x2D, 0x66, 0x39, 0x66, 0x62, 0x31, 0x35, 0x38, 0x33, 0x37, 0x30, 0x35, 0x35, 0x17, 0x31, 0x5F, 0x4D, 0x54, 0x34, 0x5F, 0x4D, 0x45, 0x53, 0x55, 0x52, 0x45, 0x53, 0x20, 0x45, 0x46, 0x46, 0x45, 0x43, 0x54, 0x49, 0x46, 0x53, 0x24, 0x63, 0x33, 0x61, 0x30, 0x32, 0x64, 0x64, 0x36, 0x2D, 0x37, 0x63, 0x30, 0x64, 0x2D, 0x34, 0x34, 0x63, 0x39, 0x2D, 0x38, 0x64, 0x33, 0x36, 0x2D, 0x35, 0x32, 0x37, 0x64, 0x35, 0x34, 0x62, 0x30, 0x35, 0x31, 0x30, 0x39, 0x15, 0x54, 0x45, 0x4D, 0x50, 0x53, 0x5F, 0x54, 0x52, 0x41, 0x56, 0x41, 0x49, 0x4C, 0x5F, 0x53, 0x41, 0x4C, 0x41, 0x52, 0x49, 0x45, 0x24, 0x32, 0x36, 0x31, 0x65, 0x30, 0x31, 0x39, 0x39, 0x2D, 0x37, 0x62, 0x34, 0x39, 0x2D, 0x34, 0x63, 0x33, 0x63, 0x2D, 0x38, 0x33, 0x64, 0x39, 0x2D, 0x61, 0x33, 0x62, 0x66, 0x65, 0x38, 0x64, 0x66, 0x36, 0x37, 0x61, 0x34, 0x14, 0x52, 0x45, 0x4D, 0x55, 0x4E, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4F, 0x4E, 0x5F, 0x53, 0x41, 0x4C, 0x41, 0x52, 0x49, 0x45, 0x24, 0x30, 0x63, 0x32, 0x64, 0x35, 0x63, 0x66, 0x63, 0x2D, 0x34, 0x32, 0x62, 0x33, 0x2D, 0x34, 0x39, 0x30, 0x33, 0x2D, 0x38, 0x34, 0x62, 0x66, 0x2D, 0x34, 0x63, 0x35, 0x38, 0x64, 0x62, 0x39, 0x34, 0x38, 0x38, 0x64, 0x64, 0x21, 0x45, 0x72, 0x72, 0x65, 0x75, 0x72, 0x73, 0x20, 0x64, 0x61, 0x6E, 0x73, 0x20, 0x52, 0x45, 0x4D, 0x55, 0x4E, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4F, 0x4E, 0x5F, 0x53, 0x41, 0x4C, 0x41, 0x52, 0x49, 0x45, 0x24, 0x62, 0x34, 0x32, 0x32, 0x33, 0x31, 0x32, 0x62, 0x2D, 0x37, 0x36, 0x38, 0x34, 0x2D, 0x34, 0x34, 0x36, 0x63, 0x2D, 0x38, 0x62, 0x37, 0x34, 0x2D, 0x34, 0x65, 0x62, 0x32, 0x65, 0x31, 0x30, 0x36, 0x64, 0x34, 0x34, 0x34, 0x10, 0x73, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x20, 0x73, 0x71, 0x6C, 0x20, 0x73, 0x65, 0x75, 0x6C, 0x65, 0x24, 0x35, 0x65, 0x38, 0x37, 0x35, 0x35, 0x36, 0x65, 0x2D, 0x39, 0x37, 0x62, 0x33, 0x2D, 0x34, 0x61, 0x66, 0x35, 0x2D, 0x62, 0x63, 0x64, 0x63, 0x2D, 0x61, 0x62, 0x61, 0x36, 0x33, 0x34, 0x34, 0x37, 0x61, 0x34, 0x33, 0x33, 0x1A, 0x32, 0x5F, 0x4D, 0x54, 0x34, 0x5F, 0x4D, 0x45, 0x53, 0x55, 0x52, 0x45, 0x53, 0x20, 0x52, 0x45, 0x4D, 0x55, 0x4E, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4F, 0x4E, 0x24, 0x39, 0x34, 0x39, 0x32, 0x31, 0x38, 0x62, 0x33, 0x2D, 0x66, 0x65, 0x30, 0x61, 0x2D, 0x34, 0x64, 0x35, 0x66, 0x2D, 0x61, 0x62, 0x63, 0x63, 0x2D, 0x33, 0x30, 0x38, 0x37, 0x37, 0x33, 0x61, 0x33, 0x34, 0x31, 0x32, 0x39, 0x18, 0x33, 0x5F, 0x4D, 0x54, 0x34, 0x5F, 0x4D, 0x45, 0x53, 0x55, 0x52, 0x45, 0x53, 0x20, 0x4D, 0x4F, 0x55, 0x56, 0x45, 0x4D, 0x45, 0x4E, 0x54, 0x53, 0x24, 0x64, 0x65, 0x36, 0x36, 0x63, 0x36, 0x36, 0x65, 0x2D, 0x39, 0x33, 0x63, 0x37, 0x2D, 0x34, 0x34, 0x64, 0x66, 0x2D, 0x62, 0x65, 0x30, 0x31, 0x2D, 0x32, 0x39, 0x39, 0x33, 0x61, 0x36, 0x62, 0x39, 0x31, 0x33, 0x33, 0x64, 0x17, 0x34, 0x5F, 0x4D, 0x54, 0x34, 0x5F, 0x4D, 0x45, 0x53, 0x55, 0x52, 0x45, 0x53, 0x20, 0x46, 0x4F, 0x52, 0x4D, 0x41, 0x54, 0x49, 0x4F, 0x4E, 0x24, 0x64, 0x66, 0x64, 0x64, 0x30, 0x32, 0x31, 0x35, 0x2D, 0x33, 0x61, 0x35, 0x37, 0x2D, 0x34, 0x38, 0x34, 0x30, 0x2D, 0x61, 0x38, 0x35, 0x31, 0x2D, 0x31, 0x33, 0x34, 0x37, 0x31, 0x33, 0x65, 0x31, 0x38, 0x37, 0x33, 0x31, 0x17, 0x35, 0x5F, 0x4D, 0x54, 0x34, 0x5F, 0x4D, 0x45, 0x53, 0x55, 0x52, 0x45, 0x53, 0x20, 0x44, 0x41, 0x53, 0x48, 0x42, 0x4F, 0x41, 0x52, 0x44, 0x24, 0x64, 0x38, 0x64, 0x38, 0x61, 0x37, 0x65, 0x62, 0x2D, 0x38, 0x30, 0x39, 0x30, 0x2D, 0x34, 0x33, 0x62, 0x35, 0x2D, 0x38, 0x66, 0x32, 0x34, 0x2D, 0x61, 0x66, 0x33, 0x39, 0x39, 0x63, 0x32, 0x66, 0x39, 0x62, 0x33, 0x63, 0x1B, 0x36, 0x5F, 0x4D, 0x54, 0x34, 0x5F, 0x4D, 0x45, 0x53, 0x55, 0x52, 0x45, 0x53, 0x5F, 0x54, 0x45, 0x4D, 0x50, 0x53, 0x5F, 0x54, 0x52, 0x41, 0x56, 0x41, 0x49, 0x4C, 0x00, 0x01, 0x05, 0x43, 0x6C, 0x6F, 0x75, 0x64, 0x01, 0x07, 0x32, 0x30, 0x31, 0x38, 0x2E, 0x30, 0x31 };
            var fileData   = new MockFileData(data);

            fileSystem.AddFile(filePath, fileData);
            var b = fileSystem.File.Open(filePath, FileMode.Open);
            var o = conv.RawToVcs(b);

            o.Seek(0, SeekOrigin.Begin);
            var b2 = conv.VcsToRaw(o);

            for (var i = 0; i < data.Length; i++)
            {
                if (b2.ReadByte() != data[i])
                {
                    throw new Exception(string.Format("Metadata from vcs is not correct at position {0}", i));
                }
            }
        }
コード例 #16
0
 public void Setup()
 {
     _converter = new MetadataConverter();
 }
コード例 #17
0
 public InMemoryCachedCrmMetaDataProvider(IEntityMetadataRepository repository)
 {
     _repository             = repository;
     this._metadataConverter = new MetadataConverter();
 }
コード例 #18
0
        public void ComputeGpsDmsToDecimalDegrees_NullDms()
        {
            var actual = MetadataConverter.DegreesMinutesSecondsToDecimalDegrees(null, "S");

            Assert.Null(actual);
        }
コード例 #19
0
        public void Convert_v0_1_0alpha3WithVals_ConvertsProperly()
        {
            var           creationDate = "2020-12-20";
            var           contactName  = "TestUser";
            var           startDate    = "1999-20-01";
            var           tempExtent   = $"{startDate}/{startDate}";
            List <string> expectedQC   = new List <string>()
            {
                "Assurance",
                "Point",
                "Review"
            };

            Models.v0_1_0alpha3.Metadata input =
                new Models.v0_1_0alpha3.Metadata()
            {
                File = new Models.v0_1_0alpha3.File()
                {
                    CreationDate = creationDate
                },
                Dataset = new Models.v0_1_0alpha3.Dataset()
                {
                    Zone        = Models.v0_1_0alpha3.Zones.Production,
                    Project     = "UnitTest",
                    Name        = "Convert_v0_1_0alpha3WithVals_ConvertsProperly",
                    Description = "Pleh",
                    Format      = "geotiff",
                    Contacts    = new List <Models.v0_1_0alpha3.Person>()
                    {
                        new Models.v0_1_0alpha3.Person()
                        {
                            Name  = contactName,
                            Email = "*****@*****.**",
                            Role  = "Tool"
                        }
                    },
                    StartDate = startDate,
                    EndDate   = startDate,
                    Variables = new List <Models.v0_1_0alpha3.Variable>()
                    {
                        new Models.v0_1_0alpha3.Variable()
                        {
                            Name            = "value",
                            IsQCSpecified   = false,
                            ProcessingLevel = Models.v0_1_0alpha3.ProcessingLevels.Calculated
                        },
                        new Models.v0_1_0alpha3.Variable()
                        {
                            Name          = "value2",
                            IsQCSpecified = true,
                            QCApplied     = new Models.v0_1_0alpha3.QCApplied()
                            {
                                Assurance = true,
                                Point     = true,
                                Review    = true
                            },
                            StartDate = startDate,
                            EndDate   = startDate
                        }
                    }
                }
            };

            var sut = new MetadataConverter();

            Models.v0_2.Metadata actual = sut.Convert(input);

            Assert.Equal(creationDate, actual.CreationDate.ToString());
            Assert.Equal(contactName, actual.Dataset.Contacts[0].Name);
            Assert.Equal(tempExtent, actual.Dataset.TemporalExtent);
            Assert.False(actual.Dataset.Variables[0].IsQCSpecified);
            Assert.Equal("Calculated", actual.Dataset.Variables[0].ProcessingLevel);
            Assert.Equal(expectedQC, actual.Dataset.Variables[1].QCApplied);
            Assert.Equal(tempExtent, actual.Dataset.Variables[1].TemporalExtent);
        }