Beispiel #1
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");
        }
Beispiel #2
0
        public void CanDeserializeMinimalSample()
        {
            var json = GetJson("Catalog");

            ValidateJson(json);

            var catalog = StacConvert.Deserialize <StacCatalog>(json);

            Assert.NotNull(catalog);

            Assert.Equal(Versions.StacVersionList.Current, catalog.StacVersion);

            Assert.Empty(catalog.StacExtensions);

            Assert.Equal("NAIP", catalog.Id);

            Assert.Equal("Catalog of NAIP Imagery", catalog.Description);

            Assert.Contains(catalog.Links, link => link.RelationshipType == "self" && link.Uri == new Uri("https://www.fsa.usda.gov/naip/catalog.json"));
            Assert.Contains(catalog.Links, link => link.RelationshipType == "child" && link.Uri == new Uri("https://www.fsa.usda.gov/naip/30087/catalog.json"));
            Assert.Contains(catalog.Links, link => link.RelationshipType == "root" && link.Uri == new Uri("https://www.fsa.usda.gov/catalog.json"));

            var json2 = StacConvert.Serialize(catalog);

            ValidateJson(json2);

            JsonAssert.AreEqual(json, json2);
        }
Beispiel #3
0
        public void UpdateCollection()
        {
            var collectionJson = GetJson("Collection", "CanDeserializeSentinel2Sample");

            ValidateJson(collectionJson);

            var collection = StacConvert.Deserialize <StacCollection>(collectionJson);

            var itemJson = GetJson("Collection", "K3A_20200508102646_28267_00027320_L1G");

            ValidateJson(itemJson);

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

            Dictionary <Uri, StacItem> items = new Dictionary <Uri, StacItem>();

            items.Add(new Uri("http://test/test.json"), item);

            collection.Update(items);

            var actualJson = StacConvert.Serialize(collection);

            var expectedJson = GetJson("Collection");

            JsonAssert.AreEqual(expectedJson, actualJson);
        }
        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"));
        }
        public void CanCreateBaseCollectionExample()
        {
            var expectedJson = httpClient.GetStringAsync($"https://raw.githubusercontent.com/radiantearth/stac-spec/v{Versions.StacVersionList.Current}/examples/collection.json").GetAwaiter().GetResult();

            //TMP
            expectedJson = expectedJson.Replace("\"proj:epsg\": {\n      \"minimum\": 32659,\n      \"maximum\": 32659\n    }", "\"proj:epsg\":[32659]");

            ValidateJson(expectedJson);

            Dictionary <Uri, StacItem> items = new Dictionary <Uri, StacItem>();
            Uri simpleItemUri = new Uri($"https://raw.githubusercontent.com/radiantearth/stac-spec/v{Versions.StacVersionList.Current}/examples/simple-item.json");

            items.Add(simpleItemUri, StacConvert.Deserialize <StacItem>(httpClient.GetStringAsync(simpleItemUri).GetAwaiter().GetResult()));
            items[simpleItemUri].Title = "Simple Item";
            Uri    coreItemUri  = new Uri($"https://raw.githubusercontent.com/radiantearth/stac-spec/v{Versions.StacVersionList.Current}/examples/core-item.json");
            string coreItemJson = httpClient.GetStringAsync(coreItemUri).GetAwaiter().GetResult();

            coreItemJson = coreItemJson.Replace("cool_sat2", "cool_sat1");
            items.Add(coreItemUri, StacConvert.Deserialize <StacItem>(coreItemJson));
            Uri    extendedItemUri  = new Uri($"https://raw.githubusercontent.com/radiantearth/stac-spec/v{Versions.StacVersionList.Current}/examples/extended-item.json");
            string extendedItemJson = httpClient.GetStringAsync(extendedItemUri).GetAwaiter().GetResult();

            extendedItemJson = extendedItemJson.Replace("cool_sensor_v1", "cool_sensor_v2");
            items.Add(extendedItemUri, StacConvert.Deserialize <StacItem>(extendedItemJson));
            StacCollection collection = StacCollection.Create("simple-collection",
                                                              "A simple collection demonstrating core catalog fields with links to a couple of items",
                                                              items,
                                                              "CC-BY-4.0",
                                                              new Uri($"https://raw.githubusercontent.com/radiantearth/stac-spec/v{Versions.StacVersionList.Current}/examples/collection.json"),
                                                              null);

            collection.Title = "Simple Example Collection";
            collection.Links.Insert(0, StacLink.CreateRootLink(new Uri("./collection.json", UriKind.Relative), StacCollection.MEDIATYPE, "Simple Example Collection"));
            collection.Links.Add(StacLink.CreateSelfLink(new Uri($"https://raw.githubusercontent.com/radiantearth/stac-spec/v{Versions.StacVersionList.Current}/examples/collection.json"), StacCollection.MEDIATYPE));
            collection.Providers.Add(new StacProvider("Remote Data, Inc")
            {
                Description = "Producers of awesome spatiotemporal assets",
                Uri         = new Uri("http://remotedata.io")
            });
            collection.Providers[0].Roles.Add(StacProviderRole.producer);
            collection.Providers[0].Roles.Add(StacProviderRole.processor);
            var orderedext = collection.StacExtensions.OrderBy(a => a).ToArray();

            collection.StacExtensions.Clear();
            collection.StacExtensions.AddRange(orderedext);

            Assert.Equal(Versions.StacVersionList.Current.ToString(), collection.StacVersion.ToString());

            string actualJson = StacConvert.Serialize(collection);

            ValidateJson(actualJson);

            JsonAssert.AreEqual(expectedJson, actualJson);
        }
        public void CanDeserializeBaseCatalogExample()
        {
            var json = httpClient.GetStringAsync($"https://raw.githubusercontent.com/radiantearth/stac-spec/v{Versions.StacVersionList.Current}/examples/catalog.json").GetAwaiter().GetResult();

            StacCatalog catalog = StacConvert.Deserialize <StacCatalog>(json);

            Assert.NotNull(catalog);

            Assert.Equal(Versions.StacVersionList.Current.ToString(), catalog.StacVersion.ToString());

            string catalog2json = StacConvert.Serialize(catalog);

            JsonAssert.AreEqual(json, catalog2json);
        }
Beispiel #7
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));
        }
Beispiel #8
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);
        }
Beispiel #9
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);
        }
Beispiel #10
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);
        }
Beispiel #11
0
        public void CollectionClone()
        {
            var simpleJson = GetJson("Collection");

            ValidateJson(simpleJson);
            StacCollection simpleCollection      = StacConvert.Deserialize <StacCollection>(simpleJson);
            StacCollection simpleCollectionClone = new StacCollection(simpleCollection);

            var clonedJson = StacConvert.Serialize(simpleCollectionClone);

            ValidateJson(clonedJson);

            JsonAssert.AreEqual(simpleJson, clonedJson);

            simpleCollectionClone = (StacCollection)simpleCollection.Clone();

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

            JsonAssert.AreEqual(simpleJson, clonedJson);
        }
Beispiel #12
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);
        }
        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);
        }
Beispiel #14
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);
        }
        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);
        }