Exemplo n.º 1
0
        public async System.Threading.Tasks.Task SetPropertiesFromFileInfo()
        {
            var simpleJson = GetJson("Extensions", "MinimalSample");

            ValidateJson(simpleJson);

            StacItem simpleitem = StacConvert.Deserialize <StacItem>(simpleJson);

            StacAsset stacAsset = StacAsset.CreateDataAsset(simpleitem,
                                                            new Uri("file:///srid.csv"),
                                                            new System.Net.Mime.ContentType("text/csv"),
                                                            "System reference Ids");
            await stacAsset.FileExtension().SetFileExtensionProperties(new System.IO.FileInfo("SRID.csv"));

            simpleitem.Assets.Add("srid", stacAsset);

            Assert.Equal <UInt64>(1536937, stacAsset.FileExtension().Size.Value);

            string actualJson = JsonConvert.SerializeObject(simpleitem);

            ValidateJson(actualJson);

            string expectedJson = GetJson("Extensions");

            JsonAssert.AreEqual(expectedJson, actualJson);
        }
Exemplo n.º 2
0
        public void SetAssetBands()
        {
            var k3CompleteJson     = GetJson("Item", "K3A_20200508102646_28267_00027320_L1G");
            var k3MissingBandsJson = GetJson("Item", "K3A_20200508102646_28267_00027320_L1G_missing_bands");

            ValidateJson(k3CompleteJson);
            ValidateJson(k3MissingBandsJson);

            StacItem k3MissingBands = StacConvert.Deserialize <StacItem>(k3MissingBandsJson);

            EoBandObject eoBandObject = new EoBandObject("MS1", EoBandCommonName.blue)
            {
                CenterWavelength = 0.485
            };

            eoBandObject.Properties.Add("scale", 27.62430939226519);
            eoBandObject.Properties.Add("offset", -22.1416);
            eoBandObject.SolarIllumination = 2001.0;

            Assert.NotNull(k3MissingBands.Assets["MS1"]);

            k3MissingBands.Assets["MS1"].EoExtension().Bands = new EoBandObject[] { eoBandObject };

            Assert.Same(k3MissingBands, k3MissingBands.StacObjectContainer);
            Assert.Same(k3MissingBands, k3MissingBands.Assets.First().Value.StacObjectContainer);

            Assert.NotNull(k3MissingBands.GetAsset(EoBandCommonName.blue));
            Assert.Equal(2001, k3MissingBands.GetBandObject(EoBandCommonName.blue).SolarIllumination);

            k3MissingBandsJson = JsonConvert.SerializeObject(k3MissingBands);

            ValidateJson(k3MissingBandsJson);

            JsonAssert.AreEqual(k3CompleteJson, k3MissingBandsJson);
        }
        public static BaselineVector CalculateBaseline(this SatStacExtension sat1, SatStacExtension sat2)
        {
            StacItem masterItem = sat1.StacItem;
            StacItem slaveItem  = sat2.StacItem;

            if (sat1.OrbitStateVectors.Count() == 0)
            {
                throw new OperationCanceledException("sat1 has no orbit state vectors");
            }
            if (sat2.OrbitStateVectors.Count() == 0)
            {
                throw new OperationCanceledException("sat2 has no orbit state vectors");
            }

            DateTime masterAnxDate = sat1.AscendingNodeCrossingDateTime;
            DateTime slaveAnxDate  = sat2.AscendingNodeCrossingDateTime;

            var masterOrbits = sat1.OrbitStateVectors.Values;
            var slaveOrbits  = sat2.OrbitStateVectors.Values;

            IPosition p0 = new Position(sat1.SceneCenterCoordinates[0], sat1.SceneCenterCoordinates[1], sat1.SceneCenterCoordinates[2]);

            DateTime[] times = new DateTime[3] {
                masterAnxDate, slaveAnxDate, masterItem.DateTime.Start.Add(TimeSpan.FromMilliseconds(masterItem.DateTime.End.Subtract(masterItem.DateTime.Start).TotalMilliseconds / 2))
            };

            var baseline = BaselineCalculation.CalculateBaseline(times, masterOrbits.ToArray(), slaveOrbits.ToArray(), p0);

            return(baseline);
        }
Exemplo n.º 4
0
        public void GetProperty()
        {
            var coordinates = new[]
            {
                new List <IPosition>
                {
                    new Position(37.488035566, -122.308150179),
                    new Position(37.538869539, -122.597502109),
                    new Position(37.613537207, -122.576687533),
                    new Position(37.562818007, -122.288048600),
                    new Position(37.488035566, -122.308150179)
                }
            };

            var geometry = new Polygon(new LineString[] { new LineString(coordinates[0]) });

            var properties = new Dictionary <string, object>();

            properties.Add("datetime", DateTime.Parse("2016-05-03T13:21:30.040Z").ToUniversalTime());
            properties.Add("collection", "CS3");

            StacItem item = new StacItem("CS3-20160503_132130_04", geometry, properties);

            item.SetProperty("test", new string[] { "test1", "test2", "test3" });

            string json = StacConvert.Serialize(item);

            ValidateJson(json);

            item = StacConvert.Deserialize <StacItem>(json);

            var array = item.GetProperty <string[]>("test");
        }
 internal ProcessingStacExtension(StacItem stacItem) : base(JsonSchemaUrl, stacItem)
 {
     itemFields = new Dictionary <string, Type>();
     itemFields.Add(LineageField, typeof(string));
     itemFields.Add(LevelField, typeof(string));
     itemFields.Add(FacilityField, typeof(string));
     itemFields.Add(SoftwareField, typeof(IDictionary <string, string>));
 }
Exemplo n.º 6
0
        public void CreateEoExtension()
        {
            var coordinates = new[]
            {
                new List <IPosition>
                {
                    new Position(37.488035566, -122.308150179),
                    new Position(37.538869539, -122.597502109),
                    new Position(37.613537207, -122.576687533),
                    new Position(37.562818007, -122.288048600),
                    new Position(37.488035566, -122.308150179)
                }
            };

            var geometry = new Polygon(new LineString[] { new LineString(coordinates[0]) });

            var properties = new Dictionary <string, object>();

            properties.Add("datetime", DateTime.Parse("2016-05-03T13:21:30.040Z").ToUniversalTime());

            StacItem item = new StacItem("CS3-20160503_132130_04", geometry, properties);

            item.Links.Add(StacLink.CreateSelfLink(new Uri("http://cool-sat.com/catalog/CS3-20160503_132130_04/CS3-20160503_132130_04.json")));
            item.SetCollection("CS3", new Uri("http://cool-sat.com/catalog.json"));

            var asset = new StacAsset(item, new Uri("relative-path/to/analytic.tif", UriKind.Relative), null, "4-Band Analytic", null);

            asset.EoExtension().CloudCover = 0;

            item.Assets.Add("analytic", asset);
            item.Assets.Add("thumbnail", StacAsset.CreateThumbnailAsset(item, new Uri("http://cool-sat.com/catalog/CS3-20160503_132130_04/thumbnail.png"), null, "Thumbnail"));

            // item.BoundingBoxes = new double[4] { -122.59750209, 37.48803556, -122.2880486, 37.613537207 };
            item.BoundingBoxes = item.GetBoundingBoxFromGeometryExtent();

            EoStacExtension eo = item.EoExtension();

            eo.CloudCover = 0;

            Assert.Equal <double>(0.0, eo.CloudCover.Value);
            Assert.Equal <double>(0.0, double.Parse(asset.Properties["eo:cloud_cover"].ToString()));

            var actualJson = StacConvert.Serialize(item);

            ValidateJson(actualJson);

            var expectedJson = GetJson("Item");

            ValidateJson(expectedJson);

            JsonAssert.AreEqual(expectedJson, actualJson);

            asset.EoExtension().Bands = null;

            Assert.Null(asset.GetProperty("eo:bands"));
        }
Exemplo n.º 7
0
        public void CalculatePerpendicularBaseline()
        {
            var sentinel1Json_1 = GetJson("Item", "S1A_IW_SLC__1SDV_20150305T051937_20150305T052005_004892_006196_ABBB");
            var sentinel1Json_2 = GetJson("Item", "S1A_IW_SLC__1SDV_20150317T051938_20150317T052005_005067_0065D5_B405");

            StacItem sentinel1Item_1 = StacConvert.Deserialize <StacItem>(sentinel1Json_1);
            StacItem sentinel1Item_2 = StacConvert.Deserialize <StacItem>(sentinel1Json_2);

            var baseline = sentinel1Item_1.SatExtension().CalculateBaseline(sentinel1Item_2.SatExtension());
        }
Exemplo n.º 8
0
 internal ProjectionStacExtension(StacItem stacItem) : base(JsonSchemaUrl, stacItem)
 {
     itemFields = new Dictionary <string, Type>();
     itemFields.Add(EpsgField, typeof(int));
     itemFields.Add(Wkt2Field, typeof(string));
     itemFields.Add(ProjJsonField, typeof(string));
     itemFields.Add(ProjGeometryField, typeof(IGeometryObject));
     itemFields.Add(ProjBboxField, typeof(double[]));
     itemFields.Add(ProjCentroidField, typeof(CentroidObject));
 }
Exemplo n.º 9
0
        public static StacAsset CreateStacAsset(this IAsset asset, StacItem stacItem)
        {
            if (asset is StacAssetAsset)
            {
                return(new StacAsset((asset as StacAssetAsset).StacAsset, stacItem));
            }
            var stacAsset = new StacAsset(stacItem, asset.Uri, asset.Roles, asset.Title, asset.ContentType);

            stacAsset.FileExtension().Size = asset.ContentLength;
            return(stacAsset);
        }
Exemplo n.º 10
0
 public static void MergeAssets(this StacItem stacItem, IAssetsContainer assetContainer, bool removeIfNotInContainer = false)
 {
     if (removeIfNotInContainer)
     {
         stacItem.Assets.Clear();
     }
     foreach (var asset in assetContainer.Assets)
     {
         if (stacItem.Assets.ContainsKey(asset.Key))
         {
             stacItem.Assets.Remove(asset.Key);
         }
         stacItem.Assets.Add(asset.Key, asset.Value.CreateStacAsset(stacItem));
     }
 }
Exemplo n.º 11
0
        public void ReadCoordinateSystem()
        {
            var k3CompleteJson = GetJson("Item", "K3A_20200508102646_28267_00027320_L1G");

            ValidateJson(k3CompleteJson);

            StacItem k3Complete = StacConvert.Deserialize <StacItem>(k3CompleteJson);

            k3Complete.ProjectionExtension().SetCoordinateSystem(4326);

            Assert.Equal("GEOGCS[\"WGS 84\", DATUM[\"WGS_1984\", SPHEROID[\"WGS 84\", 6378137, 298.257223563, AUTHORITY[\"EPSG\", \"7030\"]], AUTHORITY[\"EPSG\", \"6326\"]], PRIMEM[\"Greenwich\", 0, AUTHORITY[\"EPSG\", \"8901\"]], UNIT[\"degree\", 0.01745329251994328, AUTHORITY[\"EPSG\", \"9122\"]], AUTHORITY[\"EPSG\", \"4326\"]]",
                         k3Complete.ProjectionExtension().Wkt2);

            ValidateJson(StacConvert.Serialize(k3Complete));
        }
Exemplo n.º 12
0
        public void StacObjectLink()
        {
            var simpleJson = GetJson("Exceptions", "MinimalSample");

            ValidateJson(simpleJson);
            StacItem       simpleitem     = StacConvert.Deserialize <StacItem>(simpleJson);
            StacObjectLink stacObjectLink = (StacObjectLink)StacLink.CreateObjectLink(simpleitem, new Uri("file:///test"));

            Assert.Throws <InvalidOperationException>(() => stacObjectLink.Title       = "test");
            Assert.Throws <InvalidOperationException>(() => stacObjectLink.ContentType = new System.Net.Mime.ContentType("text/plain"));
            Assert.Equal(simpleitem, stacObjectLink.StacObject);
            StacLink nullStacLink = null;

            Assert.Throws <ArgumentNullException>(() => new StacLink(nullStacLink));
        }
Exemplo n.º 13
0
        public void CanSerializeMinimalSample()
        {
            var coordinates = new[]
            {
                new List <IPosition>
                {
                    new Position(37.488035566, -122.308150179),
                    new Position(37.538869539, -122.597502109),
                    new Position(37.613537207, -122.576687533),
                    new Position(37.562818007, -122.288048600),
                    new Position(37.488035566, -122.308150179)
                }
            };

            var geometry = new Polygon(new LineString[] { new LineString(coordinates[0]) });

            var properties = new Dictionary <string, object>();

            properties.Add("collection", "CS3");

            StacItem item = new StacItem("CS3-20160503_132130_04", geometry, properties);

            item.DateTime = new Itenso.TimePeriod.TimeInterval(DateTime.Parse("2016-05-03T13:21:30.040Z"));

            item.Links.Add(StacLink.CreateSelfLink(new Uri("http://cool-sat.com/catalog/CS3-20160503_132130_04/CS3-20160503_132130_04.json")));
            item.SetCollection("cool-sat", new Uri("http://cool-sat.com/catalog.json"));

            item.Assets.Add("analytic", new StacAsset(item, new Uri("relative-path/to/analytic.tif", UriKind.Relative), null, "4-Band Analytic", null));
            item.Assets.Add("thumbnail", StacAsset.CreateThumbnailAsset(item, new Uri("http://cool-sat.com/catalog/CS3-20160503_132130_04/thumbnail.png"), null, "Thumbnail"));

            // item.BoundingBoxes = new double[4] { -122.59750209, 37.48803556, -122.2880486, 37.613537207 };
            item.BoundingBoxes = item.GetBoundingBoxFromGeometryExtent();

            var actualJson = StacConvert.Serialize(item);

            ValidateJson(actualJson);

            var expectedJson = GetJson("Item");

            ValidateJson(expectedJson);

            JsonAssert.AreEqual(expectedJson, actualJson);

            item.Links.Remove(item.Links.First(l => l.RelationshipType == "collection"));
            Assert.Null(item.Collection);
        }
Exemplo n.º 14
0
        public void SetCoordinateSystem()
        {
            var k3CompleteJson = GetJson("Item", "K3A_20200508102646_28267_00027320_L1G");

            ValidateJson(k3CompleteJson);

            StacItem k3Complete = StacConvert.Deserialize <StacItem>(k3CompleteJson);

            k3Complete.ProjectionExtension().SetCoordinateSystem(ProjNet.CoordinateSystems.GeocentricCoordinateSystem.WGS84);

            string k3newProjJson = StacConvert.Serialize(k3Complete);

            var expectedJson = GetJson("Item", "K3A_20200508102646_28267_00027320_L1G_newproj");

            ValidateJson(expectedJson);

            JsonAssert.AreEqual(expectedJson, k3newProjJson);
        }
Exemplo n.º 15
0
        public void ItemProviders()
        {
            var simpleJson = GetJson("Item", "ItemProvidersIn");

            ValidateJson(simpleJson);
            StacItem simpleItem = StacConvert.Deserialize <StacItem>(simpleJson);

            simpleItem.Providers.Add(new StacProvider("ESA", new StacProviderRole[] { StacProviderRole.licensor }));

            Assert.Contains <string, object>("providers", simpleItem.Properties);

            simpleItem.Providers.RemoveAt(0);

            Assert.DoesNotContain <string, object>("providers", simpleItem.Properties);

            var newJson = StacConvert.Serialize(simpleItem);

            ValidateJson(newJson);
        }
Exemplo n.º 16
0
        public void SetVersion()
        {
            var simpleJson = GetJson("Extensions", "MinimalSample");

            ValidateJson(simpleJson);

            StacItem simpleitem = StacConvert.Deserialize <StacItem>(simpleJson);

            simpleitem.VersionExtension().Version = "1";

            Assert.Equal("1", simpleitem.Properties["version"]);

            string actualJson = JsonConvert.SerializeObject(simpleitem);

            ValidateJson(actualJson);

            string expectedJson = GetJson("Extensions");

            JsonAssert.AreEqual(expectedJson, actualJson);
        }
Exemplo n.º 17
0
        public void GetAssetsBands()
        {
            var k3CompleteJson = GetJson("Item", "GetAssetsBands_K3_20201112193439_45302_18521139_L1G");

            ValidateJson(k3CompleteJson);

            StacItem k3complete = StacConvert.Deserialize <StacItem>(k3CompleteJson);

            var overviewAssets = k3complete.Assets.Where(a =>
            {
                if (a.Value.Properties.ContainsKey("eo:bands"))
                {
                    Assert.NotNull(k3complete.EoExtension().Bands);
                    Assert.NotEmpty(k3complete.EoExtension().Bands);
                    return(k3complete.EoExtension().Bands.Any(band => !string.IsNullOrEmpty(band.Name)));
                }
                return(false);
            });

            Assert.Equal(5, overviewAssets.Count());
        }
Exemplo n.º 18
0
        public void CloneEoItem()
        {
            var json = GetJson("Item");

            ValidateJson(json);

            var item = StacConvert.Deserialize <StacItem>(json);

            var actualJson = StacConvert.Serialize(item);

            ValidateJson(actualJson);

            JsonAssert.AreEqual(json, actualJson);

            item = item = StacConvert.Deserialize <StacItem>(json);

            item = new StacItem(item as StacItem);

            actualJson = JsonConvert.SerializeObject(item);

            JsonAssert.AreEqual(json, actualJson);
        }
Exemplo n.º 19
0
        public void TestObservableDictionary()
        {
            var k3CompleteJson        = GetJson("Item", "K3A_20200508102646_28267_00027320_L1G_software");
            var k3MissingSoftwareJson = GetJson("Item", "K3A_20200508102646_28267_00027320_L1G_missing_software");

            ValidateJson(k3CompleteJson);
            ValidateJson(k3MissingSoftwareJson);

            StacItem k3MissingSoftware = StacConvert.Deserialize <StacItem>(k3MissingSoftwareJson);

            Assert.NotNull(k3MissingSoftware.ProcessingExtension().Software);
            Assert.Equal(0, k3MissingSoftware.ProcessingExtension().Software.Count);

            k3MissingSoftware.ProcessingExtension().Software.Add("proc_IPF", "2.0.1");

            Assert.Equal(1, k3MissingSoftware.ProcessingExtension().Software.Count);

            k3MissingSoftwareJson = StacConvert.Serialize(k3MissingSoftware);

            ValidateJson(k3MissingSoftwareJson);

            JsonAssert.AreEqual(k3CompleteJson, k3MissingSoftwareJson);
        }
Exemplo n.º 20
0
        public void ItemClone()
        {
            var simpleJson = GetJson("Item", "ItemCloneIn");

            ValidateJson(simpleJson);
            StacItem simpleItem      = StacConvert.Deserialize <StacItem>(simpleJson);
            StacItem simpleItemClone = new StacItem(simpleItem);

            var clonedJson = StacConvert.Serialize(simpleItemClone);

            ValidateJson(clonedJson);

            var expectedJson = GetJson("Item");

            JsonAssert.AreEqual(simpleJson, expectedJson);

            simpleItemClone = (StacItem)simpleItem.Clone();

            clonedJson = StacConvert.Serialize(simpleItemClone);
            ValidateJson(clonedJson);

            JsonAssert.AreEqual(simpleJson, expectedJson);
        }
Exemplo n.º 21
0
        public void TestFullSar()
        {
            var coordinates = new[]
            {
                new List <IPosition>
                {
                    new Position(14.953436, -5.730959),
                    new Position(15.388663, -3.431006),
                    new Position(13.880572, -3.136116),
                    new Position(13.441674, -5.419919),
                    new Position(14.953436, -5.730959)
                }
            };

            var geometry = new Polygon(new LineString[] { new LineString(coordinates[0]) });

            var properties = new Dictionary <string, object>();

            StacItem stacItem = new StacItem("S1A_IW_GRDH_1SDV_20160822T182823_20160822T182848_012717_013FFE_90AF", geometry, properties);

            stacItem.DateTime = new Itenso.TimePeriod.TimeInterval(DateTime.Parse("2016-08-22T18:28:23.368922Z"));
            stacItem.Platform = "sentinel-1a";

            stacItem.SarExtension().Required("IW", SarCommonFrequencyBandName.C, new string[2] {
                "VV", "VH"
            }, "GRD");

            var actualJson = StacConvert.Serialize(stacItem);

            ValidateJson(actualJson);

            var expectedJson = GetJson("Item", "S1A_IW_GRDH_1SDV_20160822T182823_20160822T182848_012717_013FFE_90AF");

            ValidateJson(expectedJson);

            JsonAssert.AreEqual(expectedJson, actualJson);
        }
Exemplo n.º 22
0
 /// <summary>
 /// Get a STAC EO Band object from a STAC item by its common name
 /// </summary>
 /// <param name="stacItem">Stac Item</param>
 /// <param name="commonName">common name</param>
 /// <returns></returns>
 public static EoBandObject GetBandObject(this StacItem stacItem, EoBandCommonName commonName)
 {
     return(stacItem.Assets.Values.Where(a => a.EoExtension().Bands != null).Select(a => a.EoExtension().Bands.FirstOrDefault(b => b.CommonName == commonName)).First());
 }
Exemplo n.º 23
0
 /// <summary>
 /// Initilize a EoStacExtension class from a STAC item
 /// </summary>
 public static EoStacExtension EoExtension(this StacItem stacItem)
 {
     return(new EoStacExtension(stacItem));
 }
Exemplo n.º 24
0
 public static SarStacExtension SarExtension(this StacItem stacItem)
 {
     return(new SarStacExtension(stacItem));
 }
Exemplo n.º 25
0
 /// <summary>
 /// Get a STAC asset from a STAC item by its common name
 /// </summary>
 /// <param name="stacItem">Stac Item</param>
 /// <param name="commonName">common name</param>
 /// <returns></returns>
 public static StacAsset GetAsset(this StacItem stacItem, EoBandCommonName commonName)
 {
     return(stacItem.Assets.Values.Where(a => a.EoExtension().Bands != null).FirstOrDefault(a => a.EoExtension().Bands.Any(b => b.CommonName == commonName)));
 }
Exemplo n.º 26
0
 /// <summary>
 /// Initilize a EoStacExtension class from a STAC item
 /// </summary>
 public static ProcessingStacExtension ProcessingExtension(this StacItem stacItem)
 {
     return(new ProcessingStacExtension(stacItem));
 }
Exemplo n.º 27
0
 public static StacAsset GetAsset(this StacItem stacItem, string polarization)
 {
     return(stacItem.Assets.Values.FirstOrDefault(a => a.SarExtension().Polarizations.Contains(polarization)));
 }
Exemplo n.º 28
0
 public StacItemNode(StacItem stacItem, Uri uri, ICredentials credentials = null) : base(stacItem, uri, credentials)
 {
 }
Exemplo n.º 29
0
 public static ViewStacExtension ViewExtension(this StacItem stacItem)
 {
     return(new ViewStacExtension(stacItem));
 }
Exemplo n.º 30
0
 public static StacItemNode CreateUnlocatedNode(StacItem stacItem)
 {
     return(new StacItemNode(stacItem, new Uri(stacItem.Id + ".json", UriKind.Relative)));
 }