diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml
index 161423ea..ccdcc643 100644
--- a/.github/workflows/build.yaml
+++ b/.github/workflows/build.yaml
@@ -53,5 +53,5 @@ jobs:
- name: Install dotnet format
run: dotnet tool update -g dotnet-format
- name: Check Format
- run: dotnet format --verify-no-changes --severity error src/
+ run: dotnet format --verify-no-changes --severity warn src/
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 20e0f7c0..11d74fd7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,7 +7,41 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
-## [1.6.6](https://github.com/Terradue/DotNetStac/compare/1.6.5...1.6.6)
+## [1.7.0](https://github.com/Terradue/DotNetStac/compare/1.6.6...1.7.0)
+
+Style and format improvements
+
+### Merged
+
+- Style and format improvements [`#23`](https://github.com/Terradue/DotNetStac/pull/23)
+
+### Commits
+
+- removed item-collection extension [`f99d497`](https://github.com/Terradue/DotNetStac/commit/f99d4970501650ddb04811e13a81e9445b3f2e01)
+- many format fix with dotnet format [`f7a3898`](https://github.com/Terradue/DotNetStac/commit/f7a3898967bb3f8d8eb37aed46866f71a258bd27)
+- and more linting [`b201bcf`](https://github.com/Terradue/DotNetStac/commit/b201bcff3f655766b7903d4d4e603a5e95496566)
+- Prefix local calls with this [`ac186ea`](https://github.com/Terradue/DotNetStac/commit/ac186ea9d87b39724aff5b627e499b4553e60e12)
+- Elements must appear in the correct order [`6505476`](https://github.com/Terradue/DotNetStac/commit/6505476b85d2bfba412f00bff32edb20d4883716)
+- fields [`5d6219d`](https://github.com/Terradue/DotNetStac/commit/5d6219d6ad37562f0c97295cc1d130deb3d4671f)
+- more styling [`d47db36`](https://github.com/Terradue/DotNetStac/commit/d47db36bf8c0ee60a361497d5e661a93a049ce61)
+- more style [`596b5e1`](https://github.com/Terradue/DotNetStac/commit/596b5e11ea5c37cdcf7e083d7a568bde596b9a5b)
+- SA1513 [`b7ac0bd`](https://github.com/Terradue/DotNetStac/commit/b7ac0bd271bf95e0fca8a91ffac63956944a7ee7)
+- Element documentation header must be preceded by blank line [`0a08850`](https://github.com/Terradue/DotNetStac/commit/0a0885044f5e320a1e5fae0096ecf7b21cfd8d13)
+- styling [`e95db31`](https://github.com/Terradue/DotNetStac/commit/e95db311f5ceb41c6542e257b7aa62859deead5f)
+- no warinings [`da591b0`](https://github.com/Terradue/DotNetStac/commit/da591b098397fe44d098153a5fcbd1c1301f2595)
+- Do not use placeholders in summaries [`466baaf`](https://github.com/Terradue/DotNetStac/commit/466baaf763bb32c377dc4b0742699d9cb180184e)
+- remove blank lines [`7ccb21a`](https://github.com/Terradue/DotNetStac/commit/7ccb21ab1d379d242e8f04567ddc45bb56019483)
+- removed empty values [`d6d6cba`](https://github.com/Terradue/DotNetStac/commit/d6d6cba7e081978030f248b4f7ea1851653a9cbc)
+- more linting [`6b6d074`](https://github.com/Terradue/DotNetStac/commit/6b6d0749103bde3e4be4e817f52c2f15c5810d9c)
+- SA1115 [`4ab4544`](https://github.com/Terradue/DotNetStac/commit/4ab454479fc8bbf9f4263b6d94e64af39a143d1c)
+- removed empty return [`a0cb741`](https://github.com/Terradue/DotNetStac/commit/a0cb74141c0f0d864b0b85be91c5b562f9c833aa)
+- Do not use regions [`ebce9c3`](https://github.com/Terradue/DotNetStac/commit/ebce9c3f241dead6710be6a19bd50d8bb7d7e69b)
+- Statement must not use unnecessary parenthesis [`87c4fb6`](https://github.com/Terradue/DotNetStac/commit/87c4fb6bb835838511331866aa83424bcfb52ada)
+- remove static [`b0b16e0`](https://github.com/Terradue/DotNetStac/commit/b0b16e075b96e0d5b3e5d6b3f1f4f5c3f018a882)
+- linting [`664ce61`](https://github.com/Terradue/DotNetStac/commit/664ce612c8c35e79e95d3f058cb9566d17497eb5)
+- severity warning for code liniting [`6f2ddfd`](https://github.com/Terradue/DotNetStac/commit/6f2ddfd5ae1995eada15d8a2cf111946a0dc015e)
+
+## [1.6.6](https://github.com/Terradue/DotNetStac/compare/1.6.5...1.6.6) - 2023-02-03
### Commits
diff --git a/README.md b/README.md
index 8779aebc..7b3020cb 100644
--- a/README.md
+++ b/README.md
@@ -12,9 +12,9 @@
-![Build Status](https://github.com/Terradue/DotNetStac/actions/workflows/build.yaml/badge.svg?branch=hotfix/1.6.6)
+![Build Status](https://github.com/Terradue/DotNetStac/actions/workflows/build.yaml/badge.svg?branch=release/1.7.0)
[![NuGet](https://img.shields.io/nuget/vpre/DotNetStac)](https://www.nuget.org/packages/DotNetStac/)
-[![codecov](https://codecov.io/gh/Terradue/DotNetStac/branch/hotfix/1.6.6/graph/badge.svg)](https://codecov.io/gh/Terradue/DotNetStac)
+[![codecov](https://codecov.io/gh/Terradue/DotNetStac/branch/release/1.7.0/graph/badge.svg)](https://codecov.io/gh/Terradue/DotNetStac)
[![Gitter](https://img.shields.io/gitter/room/SpatioTemporal-Asset-Catalog/Lobby?color=yellow)](https://gitter.im/SpatioTemporal-Asset-Catalog/Lobby)
[![License](https://img.shields.io/badge/license-AGPL3-blue.svg)](LICENSE)
[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/Terradue/DotNetStac/master?filepath=example.ipynb)
diff --git a/omnisharp.json b/omnisharp.json
new file mode 100644
index 00000000..a984c924
--- /dev/null
+++ b/omnisharp.json
@@ -0,0 +1,18 @@
+{
+ "RoslynExtensionsOptions": {
+ "enableAnalyzersSupport": true
+ },
+ "FormattingOptions": {
+ "enableEditorConfigSupport": true,
+ "OrganizeImports": true
+ },
+ "RenameOptions": {
+ "RenameInComments": true,
+ "RenameOverloads": true,
+ "RenameInStrings": true
+ },
+ "ImplementTypeOptions": {
+ "PropertyGenerationBehavior": "PreferAutoProperties",
+ "InsertionBehavior": "WithOtherMembersOfTheSameKind"
+ }
+}
\ No newline at end of file
diff --git a/src/.editorconfig b/src/.editorconfig
index 5d7c8f7d..a2a6773f 100644
--- a/src/.editorconfig
+++ b/src/.editorconfig
@@ -88,7 +88,7 @@ dotnet_naming_rule.constants_must_be_pascal_cased.style
dotnet_naming_rule.constants_must_be_pascal_cased.severity = warning
dotnet_naming_rule.private_static_fields_must_be_camel_cased_and_prefixed_with_s_underscore.symbols = private_static_field_symbols
-dotnet_naming_rule.private_static_fields_must_be_camel_cased_and_prefixed_with_s_underscore.style = camel_case_and_prefix_with_s_underscore_style
+dotnet_naming_rule.private_static_fields_must_be_camel_cased_and_prefixed_with_s_underscore.style = pascal_case_style
dotnet_naming_rule.private_static_fields_must_be_camel_cased_and_prefixed_with_s_underscore.severity = warning
dotnet_naming_rule.private_instance_fields_must_be_camel_cased_and_prefixed_with_underscore.symbols = private_field_symbols
@@ -370,6 +370,7 @@ dotnet_diagnostic.RS0018.severity = warning
dotnet_diagnostic.RS0010.severity = warning
# Microsoft.CodeAnalysis.CSharp.Features
+# Prefix local calls with this
# Name: Before: After:
dotnet_diagnostic.IDE0001.severity = warning # Simplify names System.Version version; Version version;
dotnet_diagnostic.IDE0002.severity = warning # Simplify (member access) System.Version.Equals("1", "2"); Version.Equals("1", "2");
@@ -396,6 +397,54 @@ dotnet_diagnostic.VSTHRD111.severity = none # Use ConfigureAwait(true).
dotnet_diagnostic.VSSDK006.severity = none # Check whether the result of GetService calls is null
# Microsoft.CodeAnalysis.VisualBasic.CodeStyle/Microsoft.CodeAnalysis.CSharp.CodeStyle
-dotnet_diagnostic.IDE0073.severity = warning # Enforce file header
-file_header_template = Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license. See the LICENSE.md file in the project root for more information.
-
+dotnet_diagnostic.IDE0073.severity = warning # Enforce file header
+
+file_header_template = Copyright (c) by Terradue Srl. All Rights Reserved.\nLicense under the AGPL, Version 3.0.\nFile Name: {fileName}
+
+# Microsoft.CodeAnalysis.CSharp.CodeStyle
+dotnet_diagnostic.SA1005.severity = warning # Single line comments should begin with single space
+dotnet_diagnostic.SA1028.severity = warning # Code should not contain trailing whitespace
+dotnet_diagnostic.SA1101.severity = warning # Prefix local calls with this
+dotnet_diagnostic.SA1107.severity = warning # Code should not contain multiple statements on one line
+dotnet_diagnostic.SA1111.severity = warning # Closing parenthesis should be on line of last parameter
+dotnet_diagnostic.SA1115.severity = warning # Parameter should follow comma
+dotnet_diagnostic.SA1116.severity = warning # Split parameters should start on line after declaration
+dotnet_diagnostic.SA1119.severity = warning # Statement must not use unnecessary parenthesis
+dotnet_diagnostic.SA1122.severity = warning # Use string.Empty for empty strings
+dotnet_diagnostic.SA1124.severity = warning # Do not use regions
+dotnet_diagnostic.SA1127.severity = warning # Generic type constraints must be on their own line or share line with previous
+dotnet_diagnostic.SA1128.severity = warning # Put constructor initializers on their own line
+dotnet_diagnostic.SA1129.severity = warning # Do not use default value type constructor
+dotnet_diagnostic.SA1132.severity = warning # Do not combine fields
+dotnet_diagnostic.SA1137.severity = warning # Elements should have the same indentation
+dotnet_diagnostic.SA1201.severity = warning # Elements must appear in the correct order
+dotnet_diagnostic.SA1202.severity = warning # Elements must be ordered by access
+dotnet_diagnostic.SA1204.severity = warning # Static elements must appear before instance elements
+dotnet_diagnostic.SA1214.severity = warning # Readonly fields must appear before non-readonly fields
+dotnet_diagnostic.SA1306.severity = none # Field names must begin with lower-case letter
+dotnet_diagnostic.SA1311.severity = warning # Static readonly fields must begin with upper-case letter
+dotnet_diagnostic.SA1407.severity = warning # Arithmetic expressions must declare precedence
+dotnet_diagnostic.SA1412.severity = warning # Store files as UTF-8 with byte order mark
+dotnet_diagnostic.SA1413.severity = warning # Use trailing comma in multi-line initializers
+dotnet_diagnostic.SA1500.severity = warning # Braces for multi-line statements must not share line
+dotnet_diagnostic.SA1501.severity = warning # Braces must not be omitted
+dotnet_diagnostic.SA1503.severity = warning # Braces must not be omitted
+dotnet_diagnostic.SA1504.severity = warning # All accessors must be single-line or multi-line
+dotnet_diagnostic.SA1505.severity = warning # An opening brace must not be followed by a blank line
+dotnet_diagnostic.SA1506.severity = warning # Element documentation header must not be preceded by blank line
+dotnet_diagnostic.SA1507.severity = warning # Code should not contain multiple blank lines in a row
+dotnet_diagnostic.SA1508.severity = warning # A closing brace must not be preceded by a blank line
+dotnet_diagnostic.SA1513.severity = warning # Closing brace must be followed by blank line
+dotnet_diagnostic.SA1514.severity = warning # Element documentation header must be preceded by blank line
+dotnet_diagnostic.SA1515.severity = warning # Single-line comment must be preceded by blank line
+dotnet_diagnostic.SA1516.severity = warning # Elements must be separated by blank line
+dotnet_diagnostic.SA1518.severity = warning # Code should end with a newline
+dotnet_diagnostic.SA1519.severity = warning # Braces should not be omitted from multi-line child statement
+dotnet_diagnostic.SA1520.severity = warning # Use braces consistently
+dotnet_diagnostic.SA1623.severity = warning # Property summary documentation must match accessors
+dotnet_diagnostic.SA1626.severity = warning # Single-line comments must not use documentation style slashes
+dotnet_diagnostic.SA1636.severity = none # Disable file header matching
+dotnet_diagnostic.SA1642.severity = warning # Constructor summary documentation must begin with standard text
+dotnet_diagnostic.SA1649.severity = warning # File name must match first type name
+dotnet_diagnostic.SA1651.severity = warning # Do not use placeholders in summaries
+dotnet_diagnostic.SX1309.severity = warning # Field names should begin with underscore
diff --git a/src/DotNetStac.Test/Catalog/CatalogTests.cs b/src/DotNetStac.Test/Catalog/CatalogTests.cs
index f035f774..283f0147 100644
--- a/src/DotNetStac.Test/Catalog/CatalogTests.cs
+++ b/src/DotNetStac.Test/Catalog/CatalogTests.cs
@@ -1,4 +1,8 @@
-using System;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: CatalogTests.cs
+
+using System;
using Newtonsoft.Json;
using Xunit;
diff --git a/src/DotNetStac.Test/Catalog/StacRepositoryCatalogTests.cs b/src/DotNetStac.Test/Catalog/StacRepositoryCatalogTests.cs
index 567fb4db..f8c619bf 100644
--- a/src/DotNetStac.Test/Catalog/StacRepositoryCatalogTests.cs
+++ b/src/DotNetStac.Test/Catalog/StacRepositoryCatalogTests.cs
@@ -1,6 +1,7 @@
-using System;
-using Newtonsoft.Json;
-using Newtonsoft.Json.Linq;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: StacRepositoryCatalogTests.cs
+
using Xunit;
namespace Stac.Test.Catalog
@@ -10,7 +11,7 @@ public class StacRepositoryCatalogTests : TestBase
[Fact]
public void CanDeserializeBaseCatalogExample()
{
- var json = httpClient.GetStringAsync($"https://raw.githubusercontent.com/radiantearth/stac-spec/v{Versions.StacVersionList.Current}/examples/catalog.json").GetAwaiter().GetResult();
+ var json = HttpClient.GetStringAsync($"https://raw.githubusercontent.com/radiantearth/stac-spec/v{Versions.StacVersionList.Current}/examples/catalog.json").GetAwaiter().GetResult();
StacCatalog catalog = StacConvert.Deserialize(json);
diff --git a/src/DotNetStac.Test/Collection/CollectionTests.cs b/src/DotNetStac.Test/Collection/CollectionTests.cs
index c0d22712..ac66fe1d 100644
--- a/src/DotNetStac.Test/Collection/CollectionTests.cs
+++ b/src/DotNetStac.Test/Collection/CollectionTests.cs
@@ -1,11 +1,12 @@
-using System;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: CollectionTests.cs
+
+using System;
using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
using System.IO;
using System.Linq;
using System.Text;
-using GeoJSON.Net;
-using GeoJSON.Net.Geometry;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Stac.Collection;
@@ -45,10 +46,10 @@ public void CanDeserializeSentinel2Sample()
Assert.IsType>(item.Summaries["datetime"]);
- Assert.Equal(DateTime.Parse("2015-06-23T00:00:00Z").ToUniversalTime(), (item.Summaries["datetime"] as StacSummaryRangeObject).Min);
+ Assert.Equal(DateTime.Parse("2015-06-23T00:00:00Z").ToUniversalTime(), (item.Summaries["datetime"] as StacSummaryRangeObject).Min);
- Assert.Equal(32601, (item.Summaries["proj:epsg"] as StacSummaryValueSet).Min());
- Assert.Equal(32660, (item.Summaries["proj:epsg"] as StacSummaryValueSet).Max());
+ Assert.Equal(32601, (item.Summaries["proj:epsg"] as StacSummaryValueSet).Min());
+ Assert.Equal(32660, (item.Summaries["proj:epsg"] as StacSummaryValueSet).Max());
Assert.Equal(60, (item.Summaries["proj:epsg"] as StacSummaryValueSet).Count);
Assert.Equal(13, item.Summaries["eo:bands"].LongCount());
diff --git a/src/DotNetStac.Test/Collection/StacRepositoryCollectionTests.cs b/src/DotNetStac.Test/Collection/StacRepositoryCollectionTests.cs
index 3e2a03ae..a34d59e6 100644
--- a/src/DotNetStac.Test/Collection/StacRepositoryCollectionTests.cs
+++ b/src/DotNetStac.Test/Collection/StacRepositoryCollectionTests.cs
@@ -1,9 +1,10 @@
-using System;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: StacRepositoryCollectionTests.cs
+
+using System;
using System.Collections.Generic;
-using System.Globalization;
using System.Linq;
-using Newtonsoft.Json;
-using Newtonsoft.Json.Linq;
using Xunit;
namespace Stac.Test.Catalog
@@ -14,7 +15,7 @@ public class StacRepositoryCollectionTests : TestBase
[Fact]
public void CanDeserializeBaseCollectionExample()
{
- var json = httpClient.GetStringAsync($"https://raw.githubusercontent.com/radiantearth/stac-spec/v{Versions.StacVersionList.Current}/examples/collection.json").GetAwaiter().GetResult();
+ var json = HttpClient.GetStringAsync($"https://raw.githubusercontent.com/radiantearth/stac-spec/v{Versions.StacVersionList.Current}/examples/collection.json").GetAwaiter().GetResult();
ValidateJson(json);
@@ -34,7 +35,7 @@ public void CanDeserializeBaseCollectionExample()
[Fact]
public void CanCreateBaseCollectionExample()
{
- var expectedJson = httpClient.GetStringAsync($"https://raw.githubusercontent.com/radiantearth/stac-spec/v{Versions.StacVersionList.Current}/examples/collection.json").GetAwaiter().GetResult();
+ 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]");
@@ -42,14 +43,14 @@ public void CanCreateBaseCollectionExample()
Dictionary items = new Dictionary();
Uri simpleItemUri = new Uri($"https://raw.githubusercontent.com/radiantearth/stac-spec/v{Versions.StacVersionList.Current}/examples/simple-item.json");
- items.Add(simpleItemUri, StacConvert.Deserialize(httpClient.GetStringAsync(simpleItemUri).GetAwaiter().GetResult()));
+ items.Add(simpleItemUri, StacConvert.Deserialize(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();
+ string coreItemJson = HttpClient.GetStringAsync(coreItemUri).GetAwaiter().GetResult();
coreItemJson = coreItemJson.Replace("cool_sat2", "cool_sat1");
items.Add(coreItemUri, StacConvert.Deserialize(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();
+ string extendedItemJson = HttpClient.GetStringAsync(extendedItemUri).GetAwaiter().GetResult();
extendedItemJson = extendedItemJson.Replace("cool_sensor_v1", "cool_sensor_v2");
items.Add(extendedItemUri, StacConvert.Deserialize(extendedItemJson));
StacCollection collection = StacCollection.Create("simple-collection",
diff --git a/src/DotNetStac.Test/Common/PatchHelpersTests.cs b/src/DotNetStac.Test/Common/PatchHelpersTests.cs
index 8ca024d9..b3605259 100644
--- a/src/DotNetStac.Test/Common/PatchHelpersTests.cs
+++ b/src/DotNetStac.Test/Common/PatchHelpersTests.cs
@@ -1,7 +1,8 @@
-using System.Collections.Generic;
-using GeoJSON.Net.Geometry;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: PatchHelpersTests.cs
+
using Newtonsoft.Json;
-using Stac.Collection;
using Stac.Common;
using Xunit;
@@ -16,7 +17,7 @@ public void PatchStacItemTest()
StacItem patchItem = StacConvert.Deserialize(GetJson("Common", "Patch"));
- StacItem patchedItem = baseItem.Patch(patchItem);
+ StacItem patchedItem = baseItem.Patch(patchItem);
JsonAssert.AreEqual(GetJson("Common", "PatchedItem"), StacConvert.Serialize(patchedItem));
}
@@ -28,7 +29,7 @@ public void PatchStacItemTest2()
Patch patchItem = JsonConvert.DeserializeObject(GetJson("Common", "Patch2"));
- StacItem patchedItem = baseItem.Patch(patchItem);
+ StacItem patchedItem = baseItem.Patch(patchItem);
JsonAssert.AreEqual(GetJson("Common", "PatchedItem2"), StacConvert.Serialize(patchedItem));
}
diff --git a/src/DotNetStac.Test/Common/StacAccessorsHelpersTests.cs b/src/DotNetStac.Test/Common/StacAccessorsHelpersTests.cs
index 4eefbe32..a0db1e5b 100644
--- a/src/DotNetStac.Test/Common/StacAccessorsHelpersTests.cs
+++ b/src/DotNetStac.Test/Common/StacAccessorsHelpersTests.cs
@@ -1,4 +1,8 @@
-using System.Collections.Generic;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: StacAccessorsHelpersTests.cs
+
+using System.Collections.Generic;
using GeoJSON.Net.Geometry;
using Stac.Collection;
using Stac.Common;
@@ -54,7 +58,7 @@ public void GetPropertyTest()
item.SetProperty("summary", summaryItemType);
- Assert.NotNull(item.GetProperty("summary"));
+ Assert.NotNull(item.GetProperty("summary"));
summaryItemType = SummaryItemType.RangeObject;
diff --git a/src/DotNetStac.Test/Examples/Example1Test.cs b/src/DotNetStac.Test/Examples/Example1Test.cs
index 3d36c28c..d9039102 100644
--- a/src/DotNetStac.Test/Examples/Example1Test.cs
+++ b/src/DotNetStac.Test/Examples/Example1Test.cs
@@ -1,7 +1,10 @@
-using System;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: Example1Test.cs
+
+using System;
using System.Collections.Generic;
using System.Linq;
-using System.Net;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Stac.Collection;
@@ -12,19 +15,19 @@ namespace Stac.Test.Example
public class Example1Test : TestBase
{
//[Fact]
- public void Deserialize()
- {
- Uri catalogUri = new Uri("https://landsat-stac.s3.amazonaws.com/catalog.json");
- StacCatalog catalog = StacConvert.Deserialize(httpClient.GetStringAsync(catalogUri).GetAwaiter().GetResult());
+ // public void Deserialize()
+ // {
+ // Uri catalogUri = new Uri("https://landsat-stac.s3.amazonaws.com/catalog.json");
+ // StacCatalog catalog = StacConvert.Deserialize(httpClient.GetStringAsync(catalogUri).GetAwaiter().GetResult());
- Console.Out.WriteLine(catalog.Id);
- Console.Out.WriteLine(catalog.StacVersion);
+ // Console.Out.WriteLine(catalog.Id);
+ // Console.Out.WriteLine(catalog.StacVersion);
- ListChildrensItemsAndAssets(catalog, catalogUri);
+ // ListChildrensItemsAndAssets(catalog, catalogUri);
- }
+ // }
- void ListChildrensItemsAndAssets(IStacParent catalog, Uri baseUri, string prefix = "", int limit = 2)
+ private void ListChildrensItemsAndAssets(IStacParent catalog, Uri baseUri, string prefix = "", int limit = 2)
{
// Get children first (sub catalogs and collections)
foreach (var childLink in catalog.GetChildrenLinks().Concat(catalog.GetItemLinks()))
@@ -32,7 +35,7 @@ void ListChildrensItemsAndAssets(IStacParent catalog, Uri baseUri, string prefix
Uri childUri = childLink.Uri;
if (!childUri.IsAbsoluteUri)
childUri = new Uri(baseUri, childUri.ToString());
- IStacObject child = StacConvert.Deserialize(httpClient.GetStringAsync(childUri).GetAwaiter().GetResult());
+ IStacObject child = StacConvert.Deserialize(HttpClient.GetStringAsync(childUri).GetAwaiter().GetResult());
Console.Out.WriteLine(prefix + child.Id + ": " + child.Title);
if (child is StacCatalog || child is StacCollection)
diff --git a/src/DotNetStac.Test/Exceptions/ExceptionsTests.cs b/src/DotNetStac.Test/Exceptions/ExceptionsTests.cs
index b9fa2e08..f2f88078 100644
--- a/src/DotNetStac.Test/Exceptions/ExceptionsTests.cs
+++ b/src/DotNetStac.Test/Exceptions/ExceptionsTests.cs
@@ -1,4 +1,8 @@
-using System;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: ExceptionsTests.cs
+
+using System;
using Stac.Exceptions;
using Xunit;
diff --git a/src/DotNetStac.Test/Extensions/AlternateExtensionTests.cs b/src/DotNetStac.Test/Extensions/AlternateExtensionTests.cs
index a5082146..11de46d4 100644
--- a/src/DotNetStac.Test/Extensions/AlternateExtensionTests.cs
+++ b/src/DotNetStac.Test/Extensions/AlternateExtensionTests.cs
@@ -1,5 +1,8 @@
-using System;
-using System.IO;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: AlternateExtensionTests.cs
+
+using System;
using Newtonsoft.Json;
using Stac.Extensions.Alternate;
using Xunit;
@@ -9,7 +12,7 @@ namespace Stac.Test.Extensions
public class AlternateExtensionTests : TestBase
{
[Fact]
- public async System.Threading.Tasks.Task SetAlternateAsset()
+ public System.Threading.Tasks.Task SetAlternateAsset()
{
var simpleJson = GetJson("Extensions", "MinimalSample");
ValidateJson(simpleJson);
@@ -32,10 +35,11 @@ public async System.Threading.Tasks.Task SetAlternateAsset()
JsonAssert.AreEqual(expectedJson, actualJson);
Assert.Equal("s3://bucket/key/srid.csv", simpleitem.Assets["srid"].AlternateExtension().AlternateAssets["s3"].Uri.ToString());
+ return System.Threading.Tasks.Task.CompletedTask;
}
[Fact]
- public async System.Threading.Tasks.Task LS9Alternates()
+ public System.Threading.Tasks.Task LS9Alternates()
{
var simpleJson = GetJson("Extensions", "LS9Sample");
ValidateJson(simpleJson);
@@ -43,7 +47,7 @@ public async System.Threading.Tasks.Task LS9Alternates()
StacItem ls9item = StacConvert.Deserialize(simpleJson);
Assert.Equal("s3://usgs-landsat/collection02/level-2/standard/oli-tirs/2022/088/084/LC09_L2SP_088084_20220405_20220407_02_T2/LC09_L2SP_088084_20220405_20220407_02_T2_thumb_small.jpeg", ls9item.Assets["thumbnail"].AlternateExtension().AlternateAssets["s3"].Uri.ToString());
+ return System.Threading.Tasks.Task.CompletedTask;
}
-
}
}
diff --git a/src/DotNetStac.Test/Extensions/DatacubeExtensionTests.cs b/src/DotNetStac.Test/Extensions/DatacubeExtensionTests.cs
index 8a08e2e7..972b9eea 100644
--- a/src/DotNetStac.Test/Extensions/DatacubeExtensionTests.cs
+++ b/src/DotNetStac.Test/Extensions/DatacubeExtensionTests.cs
@@ -1,12 +1,12 @@
-using System;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: DatacubeExtensionTests.cs
+
+using System;
using System.Collections.Generic;
-using System.Linq;
using System.Net.Mime;
using GeoJSON.Net.Geometry;
-using Newtonsoft.Json;
-using Newtonsoft.Json.Linq;
using Stac.Extensions.Datacube;
-using Stac.Extensions.Eo;
using Xunit;
namespace Stac.Test.Extensions
@@ -106,7 +106,7 @@ public void CanSerializeDatacube123()
item.DatacubeStacExtension().Variables.Add("temp", tempVar);
var colorVar = new DatacubeVariable();
- colorVar.Dimensions = new string[] { };
+ colorVar.Dimensions = Array.Empty();
colorVar.Type = DatacubeVariableType.auxiliary;
colorVar.Values = new string[] { "red", "green", "blue" };
item.DatacubeStacExtension().Variables.Add("color", colorVar);
diff --git a/src/DotNetStac.Test/Extensions/EoExtensionTests.cs b/src/DotNetStac.Test/Extensions/EoExtensionTests.cs
index 2f74082c..e7ebc4a5 100644
--- a/src/DotNetStac.Test/Extensions/EoExtensionTests.cs
+++ b/src/DotNetStac.Test/Extensions/EoExtensionTests.cs
@@ -1,9 +1,12 @@
-using System;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: EoExtensionTests.cs
+
+using System;
using System.Collections.Generic;
using System.Linq;
using GeoJSON.Net.Geometry;
using Newtonsoft.Json;
-using Newtonsoft.Json.Linq;
using Stac.Extensions.Eo;
using Xunit;
@@ -109,8 +112,8 @@ public void CreateEoExtension()
EoStacExtension eo = item.EoExtension();
eo.CloudCover = 0;
- Assert.Equal(0.0, eo.CloudCover.Value);
- Assert.Equal(0.0, double.Parse(asset.Properties["eo:cloud_cover"].ToString()));
+ Assert.Equal(0.0, eo.CloudCover.Value);
+ Assert.Equal(0.0, double.Parse(asset.Properties["eo:cloud_cover"].ToString()));
var actualJson = StacConvert.Serialize(item);
diff --git a/src/DotNetStac.Test/Extensions/FileExtensionTests.cs b/src/DotNetStac.Test/Extensions/FileExtensionTests.cs
index fb539bec..2168adce 100644
--- a/src/DotNetStac.Test/Extensions/FileExtensionTests.cs
+++ b/src/DotNetStac.Test/Extensions/FileExtensionTests.cs
@@ -1,10 +1,10 @@
-using System;
-using System.Collections.Generic;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: FileExtensionTests.cs
+
+using System;
using System.IO;
-using System.Linq;
-using GeoJSON.Net.Geometry;
using Newtonsoft.Json;
-using Newtonsoft.Json.Linq;
using Stac.Extensions.File;
using Xunit;
@@ -24,7 +24,7 @@ public async System.Threading.Tasks.Task SetPropertiesFromFileInfo()
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"));
+ await stacAsset.FileExtension().SetFileExtensionProperties(new FileInfo("SRID.csv"));
simpleitem.Assets.Add("srid", stacAsset);
Assert.Equal(1536937, stacAsset.FileExtension().Size.Value);
diff --git a/src/DotNetStac.Test/Extensions/ItemCollectionTests.cs b/src/DotNetStac.Test/Extensions/ItemCollectionTests.cs
deleted file mode 100644
index c62dbe45..00000000
--- a/src/DotNetStac.Test/Extensions/ItemCollectionTests.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-using Newtonsoft.Json;
-using Stac.Extensions.ItemCollections;
-using Xunit;
-
-namespace Stac.Test.Extensions
-{
- public class ItemCollectionTests : TestBase
- {
- // [Fact]
- public void CanDeserializeResto()
- {
- var json = GetJson("Extensions");
-
- ValidateJson(json);
-
- var stacObject = StacConvert.Deserialize(json);
-
- Assert.IsAssignableFrom(stacObject);
-
- ItemCollection itemCollection = stacObject as ItemCollection;
-
- Assert.Equal("1.0.0", itemCollection.StacVersion);
-
- Assert.NotEmpty(itemCollection.Features);
-
- }
-
- }
-}
diff --git a/src/DotNetStac.Test/Extensions/RasterExtensionTests.cs b/src/DotNetStac.Test/Extensions/RasterExtensionTests.cs
index edb66f34..ceb40bde 100644
--- a/src/DotNetStac.Test/Extensions/RasterExtensionTests.cs
+++ b/src/DotNetStac.Test/Extensions/RasterExtensionTests.cs
@@ -1,10 +1,7 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using GeoJSON.Net.Geometry;
-using Newtonsoft.Json;
-using Newtonsoft.Json.Linq;
-using Stac.Extensions.Eo;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: RasterExtensionTests.cs
+
using Xunit;
namespace Stac.Test.Extensions
diff --git a/src/DotNetStac.Test/Extensions/StorageExtensionTests.cs b/src/DotNetStac.Test/Extensions/StorageExtensionTests.cs
index bdb04562..de834c7b 100644
--- a/src/DotNetStac.Test/Extensions/StorageExtensionTests.cs
+++ b/src/DotNetStac.Test/Extensions/StorageExtensionTests.cs
@@ -1,5 +1,8 @@
-using System;
-using System.IO;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: StorageExtensionTests.cs
+
+using System;
using Newtonsoft.Json;
using Stac.Extensions.Alternate;
using Xunit;
@@ -9,7 +12,7 @@ namespace Stac.Test.Extensions
public class StorageExtensionTests : TestBase
{
[Fact]
- public async System.Threading.Tasks.Task SetAlternateStorageAsset()
+ public System.Threading.Tasks.Task SetAlternateStorageAsset()
{
var simpleJson = GetJson("Extensions", "MinimalSample");
ValidateJson(simpleJson);
@@ -37,7 +40,7 @@ public async System.Threading.Tasks.Task SetAlternateStorageAsset()
Assert.Equal("s3://bucket/key/srid.csv", simpleitem.Assets["srid"].AlternateExtension().AlternateAssets["s3"].Uri.ToString());
Assert.Equal("fr-par", simpleitem.Assets["srid"].AlternateExtension().AlternateAssets["s3"].StorageExtension().Region);
+ return System.Threading.Tasks.Task.CompletedTask;
}
-
}
}
diff --git a/src/DotNetStac.Test/Extensions/VersionExtensionTests.cs b/src/DotNetStac.Test/Extensions/VersionExtensionTests.cs
index e65d0e7b..e0ca8827 100644
--- a/src/DotNetStac.Test/Extensions/VersionExtensionTests.cs
+++ b/src/DotNetStac.Test/Extensions/VersionExtensionTests.cs
@@ -1,4 +1,8 @@
-using Newtonsoft.Json;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: VersionExtensionTests.cs
+
+using Newtonsoft.Json;
using Stac.Extensions.Version;
using Xunit;
diff --git a/src/DotNetStac.Test/Item/ItemTests.cs b/src/DotNetStac.Test/Item/ItemTests.cs
index 7141dd74..3ba8d22e 100644
--- a/src/DotNetStac.Test/Item/ItemTests.cs
+++ b/src/DotNetStac.Test/Item/ItemTests.cs
@@ -1,4 +1,8 @@
-using System;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: ItemTests.cs
+
+using System;
using System.Collections.Generic;
using System.Linq;
using GeoJSON.Net;
@@ -42,9 +46,9 @@ public void CanDeserializeMinimalSample()
Assert.Equal(DateTime.Parse("2016-05-03T13:21:30.040Z").ToUniversalTime(), item.Properties["datetime"]);
- Assert.Contains(item.Links, l => l.RelationshipType == "self" && l.Uri.ToString() == "http://cool-sat.com/catalog/CS3-20160503_132130_04/CS3-20160503_132130_04.json");
+ Assert.Contains(item.Links, l => l.RelationshipType == "self" && l.Uri.ToString() == "http://cool-sat.com/catalog/CS3-20160503_132130_04/CS3-20160503_132130_04.json");
- Assert.Contains(item.Links, l => l.RelationshipType == "collection" && l.Uri.ToString() == "http://cool-sat.com/catalog.json");
+ Assert.Contains(item.Links, l => l.RelationshipType == "collection" && l.Uri.ToString() == "http://cool-sat.com/catalog.json");
Assert.Equal("relative-path/to/analytic.tif", item.Assets["analytic"].Uri.ToString());
Assert.Equal("4-Band Analytic", item.Assets["analytic"].Title);
@@ -320,7 +324,7 @@ public void Geometry()
Point point = new Point(coordinates[0][0]);
var extent = StacGeometryHelpers.GetBoundingBox(point);
Assert.Equal(pextentCheck.First().ToArray(), extent);
- MultiPoint mpoint = new MultiPoint(Array.ConvertAll(coordinates[0].ToArray(), p => new Point(p)));
+ MultiPoint mpoint = new MultiPoint(Array.ConvertAll(coordinates[0].ToArray(), p => new Point(p)));
extent = StacGeometryHelpers.GetBoundingBox(mpoint);
Assert.Equal(extentCheck.First().ToArray(), extent);
var lineString = new LineString(coordinates[0]);
@@ -373,11 +377,11 @@ public void ItemProviders()
simpleItem.Providers.Add(new StacProvider("ESA", new StacProviderRole[] { StacProviderRole.licensor }));
- Assert.Contains("providers", simpleItem.Properties);
+ Assert.Contains("providers", simpleItem.Properties);
simpleItem.Providers.RemoveAt(0);
- Assert.DoesNotContain("providers", simpleItem.Properties);
+ Assert.DoesNotContain("providers", simpleItem.Properties);
var newJson = StacConvert.Serialize(simpleItem);
ValidateJson(newJson);
diff --git a/src/DotNetStac.Test/Item/ProcessingExtensionTests.cs b/src/DotNetStac.Test/Item/ProcessingExtensionTests.cs
index 76b0d296..ee7db320 100644
--- a/src/DotNetStac.Test/Item/ProcessingExtensionTests.cs
+++ b/src/DotNetStac.Test/Item/ProcessingExtensionTests.cs
@@ -1,4 +1,7 @@
-using Newtonsoft.Json;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: ProcessingExtensionTests.cs
+
using Stac.Extensions.Processing;
using Xunit;
diff --git a/src/DotNetStac.Test/Item/ProjExtensionTests.cs b/src/DotNetStac.Test/Item/ProjExtensionTests.cs
index 24f8831e..6bee3f58 100644
--- a/src/DotNetStac.Test/Item/ProjExtensionTests.cs
+++ b/src/DotNetStac.Test/Item/ProjExtensionTests.cs
@@ -1,4 +1,7 @@
-using Newtonsoft.Json;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: ProjExtensionTests.cs
+
using Stac.Extensions.Projection;
using Xunit;
diff --git a/src/DotNetStac.Test/Item/SarExtensionTests.cs b/src/DotNetStac.Test/Item/SarExtensionTests.cs
index 62624fc4..fa39eb46 100644
--- a/src/DotNetStac.Test/Item/SarExtensionTests.cs
+++ b/src/DotNetStac.Test/Item/SarExtensionTests.cs
@@ -1,4 +1,8 @@
-using System;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: SarExtensionTests.cs
+
+using System;
using System.Collections.Generic;
using GeoJSON.Net.Geometry;
using Stac.Extensions.Sar;
diff --git a/src/DotNetStac.Test/Item/SatExtensionTests.cs b/src/DotNetStac.Test/Item/SatExtensionTests.cs
index 6ec49f12..28ecb4ca 100644
--- a/src/DotNetStac.Test/Item/SatExtensionTests.cs
+++ b/src/DotNetStac.Test/Item/SatExtensionTests.cs
@@ -1,4 +1,7 @@
-using Newtonsoft.Json;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: SatExtensionTests.cs
+
using Stac.Extensions.Sat;
using Xunit;
diff --git a/src/DotNetStac.Test/JsonAssert.cs b/src/DotNetStac.Test/JsonAssert.cs
index 2e7e30e4..5b5c65d9 100644
--- a/src/DotNetStac.Test/JsonAssert.cs
+++ b/src/DotNetStac.Test/JsonAssert.cs
@@ -1,4 +1,7 @@
-using System;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: JsonAssert.cs
+
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
diff --git a/src/DotNetStac.Test/PriorityOrderer.cs b/src/DotNetStac.Test/PriorityOrderer.cs
index 155a45a3..6b9184b7 100644
--- a/src/DotNetStac.Test/PriorityOrderer.cs
+++ b/src/DotNetStac.Test/PriorityOrderer.cs
@@ -1,4 +1,8 @@
-using System;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: PriorityOrderer.cs
+
+using System;
using System.Collections.Generic;
using System.Linq;
using Xunit.Abstractions;
@@ -30,7 +34,7 @@ public IEnumerable OrderTestCases(IEnumerable t
}
}
- static TValue GetOrCreate(IDictionary dictionary, TKey key)
+ private static TValue GetOrCreate(IDictionary dictionary, TKey key)
where TValue : new()
{
diff --git a/src/DotNetStac.Test/Resources/Extensions/ItemCollectionTests_CanDeserializeResto.json b/src/DotNetStac.Test/Resources/Extensions/ItemCollectionTests_CanDeserializeResto.json
deleted file mode 100644
index 22cc64d6..00000000
--- a/src/DotNetStac.Test/Resources/Extensions/ItemCollectionTests_CanDeserializeResto.json
+++ /dev/null
@@ -1,6939 +0,0 @@
-{
- "type": "FeatureCollection",
- "id": "b083c1b2-75b9-59a0-bd76-ce0955f1467c",
- "stac_version": "1.0.0",
- "context": {
- "returned": 20,
- "limit": 20,
- "matched": 440000,
- "exactCount": false,
- "startIndex": 1,
- "query": {
- "inputFilters": {
- "q": "#month:01"
- },
- "appliedFilters": {
- "q": "#month:01"
- },
- "processingTime": 32.56619095802307
- }
- },
- "links": [
- {
- "rel": "self",
- "type": "application/geo+json",
- "href": "https://tamn.snapplanet.io/catalogs/classifications/temporal/month/month:01.json?&fields=_all"
- },
- {
- "rel": "search",
- "type": "application/opensearchdescription+xml",
- "href": "https://tamn.snapplanet.io/services/osdd"
- },
- {
- "rel": "next",
- "type": "application/geo+json",
- "href": "https://tamn.snapplanet.io/catalogs/classifications/temporal/month/month:01.json?&fields=_all&next=211306015173002329"
- }
- ],
- "features": [
- {
- "type": "Feature",
- "id": "32d4808b-627a-5888-b05a-e31bc02cb87b",
- "geometry": {
- "type": "Polygon",
- "coordinates": [
- [
- [
- 172.608145,
- 52.338619
- ],
- [
- 172.993108,
- 52.332663
- ],
- [
- 172.952793,
- 52.257366
- ],
- [
- 172.611713,
- 52.338205
- ],
- [
- 172.608145,
- 52.338619
- ]
- ]
- ]
- },
- "properties": {
- "productIdentifier": "S2B_MSIL1C_20210131T235129_N0209_R073_T59UPT_20210201T011827",
- "datetime": "2021-01-31T23:51:46.690000Z",
- "start_datetime": "2021-01-31T23:51:46.690000Z",
- "end_datetime": "2021-01-31T23:51:46.690000Z",
- "authority": "ESA",
- "productType": "REFLECTANCE",
- "processingLevel": "LEVEL1C",
- "platform": "S2B",
- "instruments": [
- "MSI"
- ],
- "tileId": "59UPT",
- "dataTakeId": "GS2B_20210131T235129_020405_N02.09",
- "eo:cloud_cover": 27.03,
- "coverage": 0.92,
- "datastripId": "S2B_OPER_MSI_L1C_DS_EPAE_20210201T011827_S20210131T235130_N02.09",
- "path": "tiles/59/U/PT/2021/1/31/0",
- "sciHubIngestion": "2021-02-01T01:58:09.907Z",
- "s3Ingestion": "2021-02-01T02:17:07.849Z",
- "eo:sun_elevation": 69.7446064532251,
- "eo:sun_azimuth": 167.619997914823,
- "viewZenith": 11.0439323553914,
- "view:azimuth": 297.676437469211,
- "updated": "2021-02-01T02:17:08.884763Z",
- "published": "2021-02-01T02:17:08.884763Z",
- "keywords": [
- {
- "id": "sea:BeringSea:4031788",
- "name": "Bering Sea",
- "type": "sea",
- "value": 100,
- "gcover": 0,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23sea%3ABeringSea%3A4031788"
- },
- {
- "id": "landcover:water",
- "name": "Water",
- "type": "landcover:water",
- "area": 109.93555,
- "value": 100,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23landcover%3Awater"
- },
- {
- "id": "location:northern",
- "name": "Northern",
- "type": "location",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23location%3Anorthern"
- },
- {
- "id": "season:winter",
- "name": "Winter",
- "type": "season",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23season%3Awinter"
- },
- {
- "id": "collection:S2",
- "name": "S2",
- "type": "collection",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23collection%3AS2"
- },
- {
- "id": "productType:REFLECTANCE",
- "name": "REFLECTANCE",
- "type": "productType",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23productType%3AREFLECTANCE"
- },
- {
- "id": "processingLevel:LEVEL1C",
- "name": "LEVEL1C",
- "type": "processingLevel",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23processingLevel%3ALEVEL1C"
- },
- {
- "id": "platform:S2B",
- "name": "S2B",
- "type": "platform",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23platform%3AS2B"
- },
- {
- "id": "instrument:MSI",
- "name": "MSI",
- "type": "instrument",
- "parentId": "platform:S2B",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23instrument%3AMSI"
- },
- {
- "id": "year:2021",
- "name": "2021",
- "type": "year",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23year%3A2021"
- },
- {
- "id": "month:01",
- "name": "01",
- "type": "month",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23month%3A01"
- },
- {
- "id": "day:31",
- "name": "31",
- "type": "day",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23day%3A31"
- }
- ],
- "hashtags": [
- "sea:BeringSea:4031788",
- "landcover:water",
- "location:northern",
- "season:winter",
- "collection:S2",
- "productType:REFLECTANCE",
- "processingLevel:LEVEL1C",
- "platform:S2B",
- "instrument:MSI",
- "year:2021",
- "month:01",
- "day:31"
- ],
- "likes": 0,
- "comments": 0,
- "status": 1,
- "centroid": [
- 172.851992,
- 52.30954
- ]
- },
- "collection": "S2",
- "links": [
- {
- "rel": "self",
- "type": "application/geo+json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/32d4808b-627a-5888-b05a-e31bc02cb87b"
- },
- {
- "rel": "parent",
- "type": "application/json",
- "title": "S2",
- "href": "https://tamn.snapplanet.io/collections/S2"
- },
- {
- "rel": "collection",
- "type": "application/json",
- "title": "S2",
- "href": "https://tamn.snapplanet.io/collections/S2"
- },
- {
- "rel": "root",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io"
- },
- {
- "rel": "child",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/32d4808b-627a-5888-b05a-e31bc02cb87b/hasSample"
- },
- {
- "rel": "isSampleOf",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/32d4808b-627a-5888-b05a-e31bc02cb87b/isSampleOf"
- },
- {
- "rel": "preview",
- "type": "image/jpeg",
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/U/PT/2021/1/31/0/preview.jpg"
- }
- ],
- "assets": {
- "thumbnail": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/U/PT/2021/1/31/0/preview.jpg",
- "type": "image/jpeg",
- "role": "thumbnail"
- },
- "metadata": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/U/PT/2021/1/31/0/metadata.xml",
- "type": "text/xml",
- "role": "metadata"
- },
- "tileInfo": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/U/PT/2021/1/31/0/tileInfo.json",
- "type": "application/json"
- },
- "productInfo": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/U/PT/2021/1/31/0/productInfo.json",
- "type": "application/json"
- },
- "B1": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/PT/2021/1/31/0/B1.jp2",
- "title": "B1 60m (coastal)",
- "type": "image/jp2",
- "eo:bands": [
- 0
- ]
- },
- "B2": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/PT/2021/1/31/0/B2.jp2",
- "title": "B2 10m (blue)",
- "type": "image/jp2",
- "eo:bands": [
- 1
- ]
- },
- "B3": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/PT/2021/1/31/0/B3.jp2",
- "title": "B3 10m (green)",
- "type": "image/jp2",
- "eo:bands": [
- 2
- ]
- },
- "B4": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/PT/2021/1/31/0/B4.jp2",
- "title": "B4 10m (red)",
- "type": "image/jp2",
- "eo:bands": [
- 3
- ]
- },
- "B5": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/PT/2021/1/31/0/B5.jp2",
- "title": "B5 20m",
- "type": "image/jp2",
- "eo:bands": [
- 4
- ]
- },
- "B6": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/PT/2021/1/31/0/B6.jp2",
- "title": "B6 20m",
- "type": "image/jp2",
- "eo:bands": [
- 5
- ]
- },
- "B7": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/PT/2021/1/31/0/B7.jp2",
- "title": "B7 20m",
- "type": "image/jp2",
- "eo:bands": [
- 6
- ]
- },
- "B8": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/PT/2021/1/31/0/B8.jp2",
- "title": "B8 10m (nir)",
- "type": "image/jp2",
- "eo:bands": [
- 7
- ]
- },
- "B8A": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/PT/2021/1/31/0/B8A.jp2",
- "title": "B8A 20m",
- "type": "image/jp2",
- "eo:bands": [
- 8
- ]
- },
- "B9": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/PT/2021/1/31/0/B9.jp2",
- "title": "B9 60m",
- "type": "image/jp2",
- "eo:bands": [
- 9
- ]
- },
- "B10": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/PT/2021/1/31/0/B10.jp2",
- "title": "B10 60m",
- "type": "image/jp2",
- "eo:bands": [
- 10
- ]
- },
- "B11": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/PT/2021/1/31/0/B11.jp2",
- "title": "B11 20m (swir16)",
- "type": "image/jp2",
- "eo:bands": [
- 11
- ]
- },
- "B12": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/PT/2021/1/31/0/B12.jp2",
- "title": "B12 20m (swir22)",
- "type": "image/jp2",
- "eo:bands": [
- 12
- ]
- }
- },
- "stac_version": "1.0.0",
- "stac_extensions": [
- "https://stac-extensions.github.io/sat/v1.0.0/schema.json",
- "https://stac-extensions.github.io/view/v1.0.0/schema.json",
- "https://stac-extensions.github.io/eo/v1.0.0/schema.json"
- ],
- "bbox": [
- 172.608145212924,
- 52.2573660798308,
- 172.993108056175,
- 52.3386191897609
- ]
- },
- {
- "type": "Feature",
- "id": "441579b1-15a9-5063-9413-59e718387f68",
- "geometry": null,
- "properties": {
- "productIdentifier": "S2B_MSIL1C_20210131T235129_N0209_R073_T58UGD_20210201T011827",
- "datetime": "2021-01-31T23:51:46.336000Z",
- "start_datetime": "2021-01-31T23:51:46.336000Z",
- "end_datetime": "2021-01-31T23:51:46.336000Z",
- "authority": "ESA",
- "productType": "REFLECTANCE",
- "processingLevel": "LEVEL1C",
- "platform": "S2B",
- "instruments": [
- "MSI"
- ],
- "tileId": "58UGD",
- "dataTakeId": "GS2B_20210131T235129_020405_N02.09",
- "eo:cloud_cover": 11.35,
- "datastripId": "S2B_OPER_MSI_L1C_DS_EPAE_20210201T011827_S20210131T235130_N02.09",
- "path": "tiles/58/U/GD/2021/1/31/0",
- "sciHubIngestion": "2021-02-01T01:58:11.806Z",
- "s3Ingestion": "2021-02-01T02:16:43.973Z",
- "eo:sun_elevation": 71.2688448525249,
- "eo:sun_azimuth": 163.205909231337,
- "viewZenith": 9.66188157061808,
- "view:azimuth": 105.593914657734,
- "updated": "2021-02-01T02:16:45.771858Z",
- "published": "2021-02-01T02:16:45.771858Z",
- "keywords": [
- {
- "id": "collection:S2",
- "name": "S2",
- "type": "collection",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23collection%3AS2"
- },
- {
- "id": "productType:REFLECTANCE",
- "name": "REFLECTANCE",
- "type": "productType",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23productType%3AREFLECTANCE"
- },
- {
- "id": "processingLevel:LEVEL1C",
- "name": "LEVEL1C",
- "type": "processingLevel",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23processingLevel%3ALEVEL1C"
- },
- {
- "id": "platform:S2B",
- "name": "S2B",
- "type": "platform",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23platform%3AS2B"
- },
- {
- "id": "instrument:MSI",
- "name": "MSI",
- "type": "instrument",
- "parentId": "platform:S2B",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23instrument%3AMSI"
- },
- {
- "id": "year:2021",
- "name": "2021",
- "type": "year",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23year%3A2021"
- },
- {
- "id": "month:01",
- "name": "01",
- "type": "month",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23month%3A01"
- },
- {
- "id": "day:31",
- "name": "31",
- "type": "day",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23day%3A31"
- }
- ],
- "hashtags": [
- "collection:S2",
- "productType:REFLECTANCE",
- "processingLevel:LEVEL1C",
- "platform:S2B",
- "instrument:MSI",
- "year:2021",
- "month:01",
- "day:31"
- ],
- "likes": 0,
- "comments": 0,
- "status": 1
- },
- "collection": "S2",
- "links": [
- {
- "rel": "self",
- "type": "application/geo+json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/441579b1-15a9-5063-9413-59e718387f68"
- },
- {
- "rel": "parent",
- "type": "application/json",
- "title": "S2",
- "href": "https://tamn.snapplanet.io/collections/S2"
- },
- {
- "rel": "collection",
- "type": "application/json",
- "title": "S2",
- "href": "https://tamn.snapplanet.io/collections/S2"
- },
- {
- "rel": "root",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io"
- },
- {
- "rel": "child",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/441579b1-15a9-5063-9413-59e718387f68/hasSample"
- },
- {
- "rel": "isSampleOf",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/441579b1-15a9-5063-9413-59e718387f68/isSampleOf"
- },
- {
- "rel": "preview",
- "type": "image/jpeg",
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/58/U/GD/2021/1/31/0/preview.jpg"
- }
- ],
- "assets": {
- "thumbnail": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/58/U/GD/2021/1/31/0/preview.jpg",
- "type": "image/jpeg",
- "role": "thumbnail"
- },
- "metadata": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/58/U/GD/2021/1/31/0/metadata.xml",
- "type": "text/xml",
- "role": "metadata"
- },
- "tileInfo": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/58/U/GD/2021/1/31/0/tileInfo.json",
- "type": "application/json"
- },
- "productInfo": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/58/U/GD/2021/1/31/0/productInfo.json",
- "type": "application/json"
- },
- "B1": {
- "href": "s3://sentinel-s2-l1c/tiles/58/U/GD/2021/1/31/0/B1.jp2",
- "title": "B1 60m (coastal)",
- "type": "image/jp2",
- "eo:bands": [
- 0
- ]
- },
- "B2": {
- "href": "s3://sentinel-s2-l1c/tiles/58/U/GD/2021/1/31/0/B2.jp2",
- "title": "B2 10m (blue)",
- "type": "image/jp2",
- "eo:bands": [
- 1
- ]
- },
- "B3": {
- "href": "s3://sentinel-s2-l1c/tiles/58/U/GD/2021/1/31/0/B3.jp2",
- "title": "B3 10m (green)",
- "type": "image/jp2",
- "eo:bands": [
- 2
- ]
- },
- "B4": {
- "href": "s3://sentinel-s2-l1c/tiles/58/U/GD/2021/1/31/0/B4.jp2",
- "title": "B4 10m (red)",
- "type": "image/jp2",
- "eo:bands": [
- 3
- ]
- },
- "B5": {
- "href": "s3://sentinel-s2-l1c/tiles/58/U/GD/2021/1/31/0/B5.jp2",
- "title": "B5 20m",
- "type": "image/jp2",
- "eo:bands": [
- 4
- ]
- },
- "B6": {
- "href": "s3://sentinel-s2-l1c/tiles/58/U/GD/2021/1/31/0/B6.jp2",
- "title": "B6 20m",
- "type": "image/jp2",
- "eo:bands": [
- 5
- ]
- },
- "B7": {
- "href": "s3://sentinel-s2-l1c/tiles/58/U/GD/2021/1/31/0/B7.jp2",
- "title": "B7 20m",
- "type": "image/jp2",
- "eo:bands": [
- 6
- ]
- },
- "B8": {
- "href": "s3://sentinel-s2-l1c/tiles/58/U/GD/2021/1/31/0/B8.jp2",
- "title": "B8 10m (nir)",
- "type": "image/jp2",
- "eo:bands": [
- 7
- ]
- },
- "B8A": {
- "href": "s3://sentinel-s2-l1c/tiles/58/U/GD/2021/1/31/0/B8A.jp2",
- "title": "B8A 20m",
- "type": "image/jp2",
- "eo:bands": [
- 8
- ]
- },
- "B9": {
- "href": "s3://sentinel-s2-l1c/tiles/58/U/GD/2021/1/31/0/B9.jp2",
- "title": "B9 60m",
- "type": "image/jp2",
- "eo:bands": [
- 9
- ]
- },
- "B10": {
- "href": "s3://sentinel-s2-l1c/tiles/58/U/GD/2021/1/31/0/B10.jp2",
- "title": "B10 60m",
- "type": "image/jp2",
- "eo:bands": [
- 10
- ]
- },
- "B11": {
- "href": "s3://sentinel-s2-l1c/tiles/58/U/GD/2021/1/31/0/B11.jp2",
- "title": "B11 20m (swir16)",
- "type": "image/jp2",
- "eo:bands": [
- 11
- ]
- },
- "B12": {
- "href": "s3://sentinel-s2-l1c/tiles/58/U/GD/2021/1/31/0/B12.jp2",
- "title": "B12 20m (swir22)",
- "type": "image/jp2",
- "eo:bands": [
- 12
- ]
- }
- },
- "stac_version": "1.0.0",
- "stac_extensions": [
- "https://stac-extensions.github.io/sat/v1.0.0/schema.json",
- "https://stac-extensions.github.io/view/v1.0.0/schema.json",
- "https://stac-extensions.github.io/eo/v1.0.0/schema.json"
- ]
- },
- {
- "type": "Feature",
- "id": "bcdce118-b082-5b4e-acde-e10c4db4d134",
- "geometry": {
- "type": "Polygon",
- "coordinates": [
- [
- [
- 168.863983,
- 53.230477
- ],
- [
- 169.648327,
- 53.241954
- ],
- [
- 169.659341,
- 52.888738
- ],
- [
- 169.658543,
- 52.889548
- ],
- [
- 169.506406,
- 52.912827
- ],
- [
- 168.810779,
- 53.007014
- ],
- [
- 168.7938,
- 53.010522
- ],
- [
- 168.769257,
- 53.012774
- ],
- [
- 168.863983,
- 53.230477
- ]
- ]
- ]
- },
- "properties": {
- "productIdentifier": "S2B_MSIL1C_20210131T235129_N0209_R073_T59ULU_20210201T011827",
- "datetime": "2021-01-31T23:51:45.837000Z",
- "start_datetime": "2021-01-31T23:51:45.837000Z",
- "end_datetime": "2021-01-31T23:51:45.837000Z",
- "authority": "ESA",
- "productType": "REFLECTANCE",
- "processingLevel": "LEVEL1C",
- "platform": "S2B",
- "instruments": [
- "MSI"
- ],
- "tileId": "59ULU",
- "dataTakeId": "GS2B_20210131T235129_020405_N02.09",
- "eo:cloud_cover": 12.22,
- "coverage": 14.85,
- "datastripId": "S2B_OPER_MSI_L1C_DS_EPAE_20210201T011827_S20210131T235130_N02.09",
- "path": "tiles/59/U/LU/2021/1/31/0",
- "sciHubIngestion": "2021-02-01T01:58:10.816Z",
- "s3Ingestion": "2021-02-01T02:16:58.145Z",
- "eo:sun_elevation": 71.294555053769,
- "eo:sun_azimuth": 163.284834906908,
- "viewZenith": 9.53533124456668,
- "view:azimuth": 105.711509832165,
- "updated": "2021-02-01T02:17:00.041303Z",
- "published": "2021-02-01T02:17:00.041303Z",
- "keywords": [
- {
- "id": "ocean:NorthPacificOcean:4030875",
- "name": "North Pacific Ocean",
- "type": "ocean",
- "value": 93.06,
- "gcover": 0,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23ocean%3ANorthPacificOcean%3A4030875"
- },
- {
- "id": "sea:BeringSea:4031788",
- "name": "Bering Sea",
- "type": "sea",
- "value": 6.83,
- "gcover": 0,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23sea%3ABeringSea%3A4031788"
- },
- {
- "id": "landcover:water",
- "name": "Water",
- "type": "landcover:water",
- "area": 1783.50706,
- "value": 100,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23landcover%3Awater"
- },
- {
- "id": "location:northern",
- "name": "Northern",
- "type": "location",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23location%3Anorthern"
- },
- {
- "id": "season:winter",
- "name": "Winter",
- "type": "season",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23season%3Awinter"
- },
- {
- "id": "collection:S2",
- "name": "S2",
- "type": "collection",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23collection%3AS2"
- },
- {
- "id": "productType:REFLECTANCE",
- "name": "REFLECTANCE",
- "type": "productType",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23productType%3AREFLECTANCE"
- },
- {
- "id": "processingLevel:LEVEL1C",
- "name": "LEVEL1C",
- "type": "processingLevel",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23processingLevel%3ALEVEL1C"
- },
- {
- "id": "platform:S2B",
- "name": "S2B",
- "type": "platform",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23platform%3AS2B"
- },
- {
- "id": "instrument:MSI",
- "name": "MSI",
- "type": "instrument",
- "parentId": "platform:S2B",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23instrument%3AMSI"
- },
- {
- "id": "year:2021",
- "name": "2021",
- "type": "year",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23year%3A2021"
- },
- {
- "id": "month:01",
- "name": "01",
- "type": "month",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23month%3A01"
- },
- {
- "id": "day:31",
- "name": "31",
- "type": "day",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23day%3A31"
- }
- ],
- "hashtags": [
- "ocean:NorthPacificOcean:4030875",
- "landcover:water",
- "location:northern",
- "season:winter",
- "collection:S2",
- "productType:REFLECTANCE",
- "processingLevel:LEVEL1C",
- "platform:S2B",
- "instrument:MSI",
- "year:2021",
- "month:01",
- "day:31"
- ],
- "likes": 0,
- "comments": 0,
- "status": 1,
- "centroid": [
- 169.265475,
- 53.088661
- ]
- },
- "collection": "S2",
- "links": [
- {
- "rel": "self",
- "type": "application/geo+json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/bcdce118-b082-5b4e-acde-e10c4db4d134"
- },
- {
- "rel": "parent",
- "type": "application/json",
- "title": "S2",
- "href": "https://tamn.snapplanet.io/collections/S2"
- },
- {
- "rel": "collection",
- "type": "application/json",
- "title": "S2",
- "href": "https://tamn.snapplanet.io/collections/S2"
- },
- {
- "rel": "root",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io"
- },
- {
- "rel": "child",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/bcdce118-b082-5b4e-acde-e10c4db4d134/hasSample"
- },
- {
- "rel": "isSampleOf",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/bcdce118-b082-5b4e-acde-e10c4db4d134/isSampleOf"
- },
- {
- "rel": "preview",
- "type": "image/jpeg",
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/U/LU/2021/1/31/0/preview.jpg"
- }
- ],
- "assets": {
- "thumbnail": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/U/LU/2021/1/31/0/preview.jpg",
- "type": "image/jpeg",
- "role": "thumbnail"
- },
- "metadata": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/U/LU/2021/1/31/0/metadata.xml",
- "type": "text/xml",
- "role": "metadata"
- },
- "tileInfo": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/U/LU/2021/1/31/0/tileInfo.json",
- "type": "application/json"
- },
- "productInfo": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/U/LU/2021/1/31/0/productInfo.json",
- "type": "application/json"
- },
- "B1": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/LU/2021/1/31/0/B1.jp2",
- "title": "B1 60m (coastal)",
- "type": "image/jp2",
- "eo:bands": [
- 0
- ]
- },
- "B2": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/LU/2021/1/31/0/B2.jp2",
- "title": "B2 10m (blue)",
- "type": "image/jp2",
- "eo:bands": [
- 1
- ]
- },
- "B3": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/LU/2021/1/31/0/B3.jp2",
- "title": "B3 10m (green)",
- "type": "image/jp2",
- "eo:bands": [
- 2
- ]
- },
- "B4": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/LU/2021/1/31/0/B4.jp2",
- "title": "B4 10m (red)",
- "type": "image/jp2",
- "eo:bands": [
- 3
- ]
- },
- "B5": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/LU/2021/1/31/0/B5.jp2",
- "title": "B5 20m",
- "type": "image/jp2",
- "eo:bands": [
- 4
- ]
- },
- "B6": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/LU/2021/1/31/0/B6.jp2",
- "title": "B6 20m",
- "type": "image/jp2",
- "eo:bands": [
- 5
- ]
- },
- "B7": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/LU/2021/1/31/0/B7.jp2",
- "title": "B7 20m",
- "type": "image/jp2",
- "eo:bands": [
- 6
- ]
- },
- "B8": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/LU/2021/1/31/0/B8.jp2",
- "title": "B8 10m (nir)",
- "type": "image/jp2",
- "eo:bands": [
- 7
- ]
- },
- "B8A": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/LU/2021/1/31/0/B8A.jp2",
- "title": "B8A 20m",
- "type": "image/jp2",
- "eo:bands": [
- 8
- ]
- },
- "B9": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/LU/2021/1/31/0/B9.jp2",
- "title": "B9 60m",
- "type": "image/jp2",
- "eo:bands": [
- 9
- ]
- },
- "B10": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/LU/2021/1/31/0/B10.jp2",
- "title": "B10 60m",
- "type": "image/jp2",
- "eo:bands": [
- 10
- ]
- },
- "B11": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/LU/2021/1/31/0/B11.jp2",
- "title": "B11 20m (swir16)",
- "type": "image/jp2",
- "eo:bands": [
- 11
- ]
- },
- "B12": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/LU/2021/1/31/0/B12.jp2",
- "title": "B12 20m (swir22)",
- "type": "image/jp2",
- "eo:bands": [
- 12
- ]
- }
- },
- "stac_version": "1.0.0",
- "stac_extensions": [
- "https://stac-extensions.github.io/sat/v1.0.0/schema.json",
- "https://stac-extensions.github.io/view/v1.0.0/schema.json",
- "https://stac-extensions.github.io/eo/v1.0.0/schema.json"
- ],
- "bbox": [
- 168.769256545929,
- 52.8887382170239,
- 169.659341170422,
- 53.2419543907225
- ]
- },
- {
- "type": "Feature",
- "id": "e9c45bb5-8ffb-55c3-810f-b4be9f591ebd",
- "geometry": {
- "type": "Polygon",
- "coordinates": [
- [
- [
- 169.500956,
- 53.240192
- ],
- [
- 171.146262,
- 53.249528
- ],
- [
- 171.14422,
- 52.63991
- ],
- [
- 171.139523,
- 52.640642
- ],
- [
- 171.139528,
- 52.642042
- ],
- [
- 171.132349,
- 52.64205
- ],
- [
- 170.908712,
- 52.684124
- ],
- [
- 170.274018,
- 52.793596
- ],
- [
- 169.52327,
- 52.910191
- ],
- [
- 169.51238,
- 52.910055
- ],
- [
- 169.500956,
- 53.240192
- ]
- ]
- ]
- },
- "properties": {
- "productIdentifier": "S2B_MSIL1C_20210131T235129_N0209_R073_T59UMU_20210201T011827",
- "datetime": "2021-01-31T23:51:44.308000Z",
- "start_datetime": "2021-01-31T23:51:44.308000Z",
- "end_datetime": "2021-01-31T23:51:44.308000Z",
- "authority": "ESA",
- "productType": "REFLECTANCE",
- "processingLevel": "LEVEL1C",
- "platform": "S2B",
- "instruments": [
- "MSI"
- ],
- "tileId": "59UMU",
- "dataTakeId": "GS2B_20210131T235129_020405_N02.09",
- "eo:cloud_cover": 50.89,
- "coverage": 47.19,
- "datastripId": "S2B_OPER_MSI_L1C_DS_EPAE_20210201T011827_S20210131T235130_N02.09",
- "path": "tiles/59/U/MU/2021/1/31/0",
- "sciHubIngestion": "2021-02-01T01:58:25.726Z",
- "s3Ingestion": "2021-02-01T02:15:31.322Z",
- "eo:sun_elevation": 71.0671977054969,
- "eo:sun_azimuth": 164.743250184417,
- "viewZenith": 4.16172109583659,
- "view:azimuth": 108.977400948379,
- "updated": "2021-02-01T02:15:35.639375Z",
- "published": "2021-02-01T02:15:35.639375Z",
- "keywords": [
- {
- "id": "sea:BeringSea:4031788",
- "name": "Bering Sea",
- "type": "sea",
- "value": 78.52,
- "gcover": 0.2,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23sea%3ABeringSea%3A4031788"
- },
- {
- "id": "ocean:NorthPacificOcean:4030875",
- "name": "North Pacific Ocean",
- "type": "ocean",
- "value": 21.48,
- "gcover": 0,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23ocean%3ANorthPacificOcean%3A4030875"
- },
- {
- "id": "landcover:water",
- "name": "Water",
- "type": "landcover:water",
- "area": 5684.69081,
- "value": 100,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23landcover%3Awater"
- },
- {
- "id": "location:northern",
- "name": "Northern",
- "type": "location",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23location%3Anorthern"
- },
- {
- "id": "season:winter",
- "name": "Winter",
- "type": "season",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23season%3Awinter"
- },
- {
- "id": "collection:S2",
- "name": "S2",
- "type": "collection",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23collection%3AS2"
- },
- {
- "id": "productType:REFLECTANCE",
- "name": "REFLECTANCE",
- "type": "productType",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23productType%3AREFLECTANCE"
- },
- {
- "id": "processingLevel:LEVEL1C",
- "name": "LEVEL1C",
- "type": "processingLevel",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23processingLevel%3ALEVEL1C"
- },
- {
- "id": "platform:S2B",
- "name": "S2B",
- "type": "platform",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23platform%3AS2B"
- },
- {
- "id": "instrument:MSI",
- "name": "MSI",
- "type": "instrument",
- "parentId": "platform:S2B",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23instrument%3AMSI"
- },
- {
- "id": "year:2021",
- "name": "2021",
- "type": "year",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23year%3A2021"
- },
- {
- "id": "month:01",
- "name": "01",
- "type": "month",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23month%3A01"
- },
- {
- "id": "day:31",
- "name": "31",
- "type": "day",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23day%3A31"
- }
- ],
- "hashtags": [
- "sea:BeringSea:4031788",
- "ocean:NorthPacificOcean:4030875",
- "landcover:water",
- "location:northern",
- "season:winter",
- "collection:S2",
- "productType:REFLECTANCE",
- "processingLevel:LEVEL1C",
- "platform:S2B",
- "instrument:MSI",
- "year:2021",
- "month:01",
- "day:31"
- ],
- "likes": 0,
- "comments": 0,
- "status": 1,
- "centroid": [
- 170.408579,
- 53.006683
- ]
- },
- "collection": "S2",
- "links": [
- {
- "rel": "self",
- "type": "application/geo+json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/e9c45bb5-8ffb-55c3-810f-b4be9f591ebd"
- },
- {
- "rel": "parent",
- "type": "application/json",
- "title": "S2",
- "href": "https://tamn.snapplanet.io/collections/S2"
- },
- {
- "rel": "collection",
- "type": "application/json",
- "title": "S2",
- "href": "https://tamn.snapplanet.io/collections/S2"
- },
- {
- "rel": "root",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io"
- },
- {
- "rel": "child",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/e9c45bb5-8ffb-55c3-810f-b4be9f591ebd/hasSample"
- },
- {
- "rel": "isSampleOf",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/e9c45bb5-8ffb-55c3-810f-b4be9f591ebd/isSampleOf"
- },
- {
- "rel": "preview",
- "type": "image/jpeg",
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/U/MU/2021/1/31/0/preview.jpg"
- }
- ],
- "assets": {
- "thumbnail": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/U/MU/2021/1/31/0/preview.jpg",
- "type": "image/jpeg",
- "role": "thumbnail"
- },
- "metadata": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/U/MU/2021/1/31/0/metadata.xml",
- "type": "text/xml",
- "role": "metadata"
- },
- "tileInfo": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/U/MU/2021/1/31/0/tileInfo.json",
- "type": "application/json"
- },
- "productInfo": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/U/MU/2021/1/31/0/productInfo.json",
- "type": "application/json"
- },
- "B1": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/MU/2021/1/31/0/B1.jp2",
- "title": "B1 60m (coastal)",
- "type": "image/jp2",
- "eo:bands": [
- 0
- ]
- },
- "B2": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/MU/2021/1/31/0/B2.jp2",
- "title": "B2 10m (blue)",
- "type": "image/jp2",
- "eo:bands": [
- 1
- ]
- },
- "B3": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/MU/2021/1/31/0/B3.jp2",
- "title": "B3 10m (green)",
- "type": "image/jp2",
- "eo:bands": [
- 2
- ]
- },
- "B4": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/MU/2021/1/31/0/B4.jp2",
- "title": "B4 10m (red)",
- "type": "image/jp2",
- "eo:bands": [
- 3
- ]
- },
- "B5": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/MU/2021/1/31/0/B5.jp2",
- "title": "B5 20m",
- "type": "image/jp2",
- "eo:bands": [
- 4
- ]
- },
- "B6": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/MU/2021/1/31/0/B6.jp2",
- "title": "B6 20m",
- "type": "image/jp2",
- "eo:bands": [
- 5
- ]
- },
- "B7": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/MU/2021/1/31/0/B7.jp2",
- "title": "B7 20m",
- "type": "image/jp2",
- "eo:bands": [
- 6
- ]
- },
- "B8": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/MU/2021/1/31/0/B8.jp2",
- "title": "B8 10m (nir)",
- "type": "image/jp2",
- "eo:bands": [
- 7
- ]
- },
- "B8A": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/MU/2021/1/31/0/B8A.jp2",
- "title": "B8A 20m",
- "type": "image/jp2",
- "eo:bands": [
- 8
- ]
- },
- "B9": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/MU/2021/1/31/0/B9.jp2",
- "title": "B9 60m",
- "type": "image/jp2",
- "eo:bands": [
- 9
- ]
- },
- "B10": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/MU/2021/1/31/0/B10.jp2",
- "title": "B10 60m",
- "type": "image/jp2",
- "eo:bands": [
- 10
- ]
- },
- "B11": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/MU/2021/1/31/0/B11.jp2",
- "title": "B11 20m (swir16)",
- "type": "image/jp2",
- "eo:bands": [
- 11
- ]
- },
- "B12": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/MU/2021/1/31/0/B12.jp2",
- "title": "B12 20m (swir22)",
- "type": "image/jp2",
- "eo:bands": [
- 12
- ]
- }
- },
- "stac_version": "1.0.0",
- "stac_extensions": [
- "https://stac-extensions.github.io/sat/v1.0.0/schema.json",
- "https://stac-extensions.github.io/view/v1.0.0/schema.json",
- "https://stac-extensions.github.io/eo/v1.0.0/schema.json"
- ],
- "bbox": [
- 169.500955705136,
- 52.6399099302,
- 171.146261854414,
- 53.2495277635177
- ]
- },
- {
- "type": "Feature",
- "id": "3cea4878-d3d8-5558-903f-02a065c25dd7",
- "geometry": {
- "type": "Polygon",
- "coordinates": [
- [
- [
- 170.999715,
- 53.249617
- ],
- [
- 172.492848,
- 53.24027
- ],
- [
- 172.643759,
- 53.207671
- ],
- [
- 172.611326,
- 52.338288
- ],
- [
- 171.922968,
- 52.487266
- ],
- [
- 171.223517,
- 52.626231
- ],
- [
- 171.008295,
- 52.665035
- ],
- [
- 171.008296,
- 52.666397
- ],
- [
- 170.999719,
- 52.666397
- ],
- [
- 170.999715,
- 53.249617
- ]
- ]
- ]
- },
- "properties": {
- "productIdentifier": "S2B_MSIL1C_20210131T235129_N0209_R073_T59UNU_20210201T011827",
- "datetime": "2021-01-31T23:51:42.270000Z",
- "start_datetime": "2021-01-31T23:51:42.270000Z",
- "end_datetime": "2021-01-31T23:51:42.270000Z",
- "authority": "ESA",
- "productType": "REFLECTANCE",
- "processingLevel": "LEVEL1C",
- "platform": "S2B",
- "instruments": [
- "MSI"
- ],
- "tileId": "59UNU",
- "dataTakeId": "GS2B_20210131T235129_020405_N02.09",
- "eo:cloud_cover": 39.29,
- "coverage": 74.65,
- "datastripId": "S2B_OPER_MSI_L1C_DS_EPAE_20210201T011827_S20210131T235130_N02.09",
- "path": "tiles/59/U/NU/2021/1/31/0",
- "sciHubIngestion": "2021-02-01T01:58:31.142Z",
- "s3Ingestion": "2021-02-01T02:14:50.558Z",
- "eo:sun_elevation": 70.8436703859328,
- "eo:sun_azimuth": 166.207492787993,
- "viewZenith": 5.1314947372972,
- "view:azimuth": 268.501062464515,
- "updated": "2021-02-01T02:14:56.559895Z",
- "published": "2021-02-01T02:14:56.559895Z",
- "keywords": [
- {
- "id": "continent:NorthAmerica:6255149",
- "name": "North America",
- "type": "continent",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23continent%3ANorthAmerica%3A6255149"
- },
- {
- "id": "country:UnitedStatesOfAmerica:6252001",
- "name": "United States of America",
- "type": "country",
- "parentId": "continent:NorthAmerica:6255149",
- "value": 0.58,
- "gcover": 0,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23country%3AUnitedStatesOfAmerica%3A6252001"
- },
- {
- "id": "region:West:11887751",
- "name": "West",
- "type": "region",
- "parentId": "country:UnitedStatesOfAmerica:6252001",
- "value": 0.57,
- "gcover": 0,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23region%3AWest%3A11887751"
- },
- {
- "id": "state:Alaska:5879092",
- "name": "Alaska",
- "type": "state",
- "parentId": "region:West:11887751",
- "value": 0.58,
- "gcover": 0,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23state%3AAlaska%3A5879092"
- },
- {
- "id": "sea:BeringSea:4031788",
- "name": "Bering Sea",
- "type": "sea",
- "value": 99.46,
- "gcover": 0.4,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23sea%3ABeringSea%3A4031788"
- },
- {
- "id": "landcover:water",
- "name": "Water",
- "type": "landcover:water",
- "area": 8933.57992,
- "value": 99.59,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23landcover%3Awater"
- },
- {
- "id": "landcover:herbaceous",
- "name": "Herbaceous",
- "type": "landcover:herbaceous",
- "area": 61.72668,
- "value": 0.68,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23landcover%3Aherbaceous"
- },
- {
- "id": "landcover:desert",
- "name": "Desert",
- "type": "landcover:desert",
- "area": 15.62816,
- "value": 0.17,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23landcover%3Adesert"
- },
- {
- "id": "location:northern",
- "name": "Northern",
- "type": "location",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23location%3Anorthern"
- },
- {
- "id": "location:coastal",
- "name": "Coastal",
- "type": "location",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23location%3Acoastal"
- },
- {
- "id": "season:winter",
- "name": "Winter",
- "type": "season",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23season%3Awinter"
- },
- {
- "id": "collection:S2",
- "name": "S2",
- "type": "collection",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23collection%3AS2"
- },
- {
- "id": "productType:REFLECTANCE",
- "name": "REFLECTANCE",
- "type": "productType",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23productType%3AREFLECTANCE"
- },
- {
- "id": "processingLevel:LEVEL1C",
- "name": "LEVEL1C",
- "type": "processingLevel",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23processingLevel%3ALEVEL1C"
- },
- {
- "id": "platform:S2B",
- "name": "S2B",
- "type": "platform",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23platform%3AS2B"
- },
- {
- "id": "instrument:MSI",
- "name": "MSI",
- "type": "instrument",
- "parentId": "platform:S2B",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23instrument%3AMSI"
- },
- {
- "id": "year:2021",
- "name": "2021",
- "type": "year",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23year%3A2021"
- },
- {
- "id": "month:01",
- "name": "01",
- "type": "month",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23month%3A01"
- },
- {
- "id": "day:31",
- "name": "31",
- "type": "day",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23day%3A31"
- }
- ],
- "hashtags": [
- "continent:NorthAmerica:6255149",
- "sea:BeringSea:4031788",
- "landcover:water",
- "location:northern",
- "location:coastal",
- "season:winter",
- "collection:S2",
- "productType:REFLECTANCE",
- "processingLevel:LEVEL1C",
- "platform:S2B",
- "instrument:MSI",
- "year:2021",
- "month:01",
- "day:31"
- ],
- "likes": 0,
- "comments": 0,
- "status": 1,
- "centroid": [
- 171.871912,
- 52.870142
- ]
- },
- "collection": "S2",
- "links": [
- {
- "rel": "self",
- "type": "application/geo+json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/3cea4878-d3d8-5558-903f-02a065c25dd7"
- },
- {
- "rel": "parent",
- "type": "application/json",
- "title": "S2",
- "href": "https://tamn.snapplanet.io/collections/S2"
- },
- {
- "rel": "collection",
- "type": "application/json",
- "title": "S2",
- "href": "https://tamn.snapplanet.io/collections/S2"
- },
- {
- "rel": "root",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io"
- },
- {
- "rel": "child",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/3cea4878-d3d8-5558-903f-02a065c25dd7/hasSample"
- },
- {
- "rel": "isSampleOf",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/3cea4878-d3d8-5558-903f-02a065c25dd7/isSampleOf"
- },
- {
- "rel": "preview",
- "type": "image/jpeg",
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/U/NU/2021/1/31/0/preview.jpg"
- }
- ],
- "assets": {
- "thumbnail": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/U/NU/2021/1/31/0/preview.jpg",
- "type": "image/jpeg",
- "role": "thumbnail"
- },
- "metadata": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/U/NU/2021/1/31/0/metadata.xml",
- "type": "text/xml",
- "role": "metadata"
- },
- "tileInfo": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/U/NU/2021/1/31/0/tileInfo.json",
- "type": "application/json"
- },
- "productInfo": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/U/NU/2021/1/31/0/productInfo.json",
- "type": "application/json"
- },
- "B1": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/NU/2021/1/31/0/B1.jp2",
- "title": "B1 60m (coastal)",
- "type": "image/jp2",
- "eo:bands": [
- 0
- ]
- },
- "B2": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/NU/2021/1/31/0/B2.jp2",
- "title": "B2 10m (blue)",
- "type": "image/jp2",
- "eo:bands": [
- 1
- ]
- },
- "B3": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/NU/2021/1/31/0/B3.jp2",
- "title": "B3 10m (green)",
- "type": "image/jp2",
- "eo:bands": [
- 2
- ]
- },
- "B4": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/NU/2021/1/31/0/B4.jp2",
- "title": "B4 10m (red)",
- "type": "image/jp2",
- "eo:bands": [
- 3
- ]
- },
- "B5": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/NU/2021/1/31/0/B5.jp2",
- "title": "B5 20m",
- "type": "image/jp2",
- "eo:bands": [
- 4
- ]
- },
- "B6": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/NU/2021/1/31/0/B6.jp2",
- "title": "B6 20m",
- "type": "image/jp2",
- "eo:bands": [
- 5
- ]
- },
- "B7": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/NU/2021/1/31/0/B7.jp2",
- "title": "B7 20m",
- "type": "image/jp2",
- "eo:bands": [
- 6
- ]
- },
- "B8": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/NU/2021/1/31/0/B8.jp2",
- "title": "B8 10m (nir)",
- "type": "image/jp2",
- "eo:bands": [
- 7
- ]
- },
- "B8A": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/NU/2021/1/31/0/B8A.jp2",
- "title": "B8A 20m",
- "type": "image/jp2",
- "eo:bands": [
- 8
- ]
- },
- "B9": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/NU/2021/1/31/0/B9.jp2",
- "title": "B9 60m",
- "type": "image/jp2",
- "eo:bands": [
- 9
- ]
- },
- "B10": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/NU/2021/1/31/0/B10.jp2",
- "title": "B10 60m",
- "type": "image/jp2",
- "eo:bands": [
- 10
- ]
- },
- "B11": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/NU/2021/1/31/0/B11.jp2",
- "title": "B11 20m (swir16)",
- "type": "image/jp2",
- "eo:bands": [
- 11
- ]
- },
- "B12": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/NU/2021/1/31/0/B12.jp2",
- "title": "B12 20m (swir22)",
- "type": "image/jp2",
- "eo:bands": [
- 12
- ]
- }
- },
- "stac_version": "1.0.0",
- "stac_extensions": [
- "https://stac-extensions.github.io/sat/v1.0.0/schema.json",
- "https://stac-extensions.github.io/view/v1.0.0/schema.json",
- "https://stac-extensions.github.io/eo/v1.0.0/schema.json"
- ],
- "bbox": [
- 170.999715239247,
- 52.3382882629184,
- 172.643759075872,
- 53.2496174782598
- ]
- },
- {
- "type": "Feature",
- "id": "566e68c3-edf8-5bb8-9380-31b519e26bb4",
- "geometry": {
- "type": "Polygon",
- "coordinates": [
- [
- [
- 169.69675,
- 53.729373
- ],
- [
- 169.624678,
- 53.071266
- ],
- [
- 168.806983,
- 53.100282
- ],
- [
- 169.122016,
- 53.806343
- ],
- [
- 169.412774,
- 53.766658
- ],
- [
- 169.69675,
- 53.729373
- ]
- ]
- ]
- },
- "properties": {
- "productIdentifier": "S2B_MSIL1C_20210131T235129_N0209_R073_T58UGE_20210201T011827",
- "datetime": "2021-01-31T23:51:40.686000Z",
- "start_datetime": "2021-01-31T23:51:40.686000Z",
- "end_datetime": "2021-01-31T23:51:40.686000Z",
- "authority": "ESA",
- "productType": "REFLECTANCE",
- "processingLevel": "LEVEL1C",
- "platform": "S2B",
- "instruments": [
- "MSI"
- ],
- "tileId": "58UGE",
- "dataTakeId": "GS2B_20210131T235129_020405_N02.09",
- "eo:cloud_cover": 12.43,
- "coverage": 29.82,
- "datastripId": "S2B_OPER_MSI_L1C_DS_EPAE_20210201T011827_S20210131T235130_N02.09",
- "path": "tiles/58/U/GE/2021/1/31/0",
- "sciHubIngestion": "2021-02-01T01:58:20.687Z",
- "s3Ingestion": "2021-02-01T02:16:18.681Z",
- "eo:sun_elevation": 72.1243419752625,
- "eo:sun_azimuth": 163.30922647126,
- "viewZenith": 10.0654368612105,
- "view:azimuth": 105.644581591674,
- "updated": "2021-02-01T02:16:21.807412Z",
- "published": "2021-02-01T02:16:21.807412Z",
- "keywords": [
- {
- "id": "sea:BeringSea:4031788",
- "name": "Bering Sea",
- "type": "sea",
- "value": 69.3,
- "gcover": 0.11,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23sea%3ABeringSea%3A4031788"
- },
- {
- "id": "ocean:NorthPacificOcean:4030875",
- "name": "North Pacific Ocean",
- "type": "ocean",
- "value": 30.6,
- "gcover": 0,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23ocean%3ANorthPacificOcean%3A4030875"
- },
- {
- "id": "landcover:water",
- "name": "Water",
- "type": "landcover:water",
- "area": 3575.24064,
- "value": 100,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23landcover%3Awater"
- },
- {
- "id": "location:northern",
- "name": "Northern",
- "type": "location",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23location%3Anorthern"
- },
- {
- "id": "season:winter",
- "name": "Winter",
- "type": "season",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23season%3Awinter"
- },
- {
- "id": "collection:S2",
- "name": "S2",
- "type": "collection",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23collection%3AS2"
- },
- {
- "id": "productType:REFLECTANCE",
- "name": "REFLECTANCE",
- "type": "productType",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23productType%3AREFLECTANCE"
- },
- {
- "id": "processingLevel:LEVEL1C",
- "name": "LEVEL1C",
- "type": "processingLevel",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23processingLevel%3ALEVEL1C"
- },
- {
- "id": "platform:S2B",
- "name": "S2B",
- "type": "platform",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23platform%3AS2B"
- },
- {
- "id": "instrument:MSI",
- "name": "MSI",
- "type": "instrument",
- "parentId": "platform:S2B",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23instrument%3AMSI"
- },
- {
- "id": "year:2021",
- "name": "2021",
- "type": "year",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23year%3A2021"
- },
- {
- "id": "month:01",
- "name": "01",
- "type": "month",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23month%3A01"
- },
- {
- "id": "day:31",
- "name": "31",
- "type": "day",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23day%3A31"
- }
- ],
- "hashtags": [
- "sea:BeringSea:4031788",
- "ocean:NorthPacificOcean:4030875",
- "landcover:water",
- "location:northern",
- "season:winter",
- "collection:S2",
- "productType:REFLECTANCE",
- "processingLevel:LEVEL1C",
- "platform:S2B",
- "instrument:MSI",
- "year:2021",
- "month:01",
- "day:31"
- ],
- "likes": 0,
- "comments": 0,
- "status": 1,
- "centroid": [
- 169.301825,
- 53.40875
- ]
- },
- "collection": "S2",
- "links": [
- {
- "rel": "self",
- "type": "application/geo+json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/566e68c3-edf8-5bb8-9380-31b519e26bb4"
- },
- {
- "rel": "parent",
- "type": "application/json",
- "title": "S2",
- "href": "https://tamn.snapplanet.io/collections/S2"
- },
- {
- "rel": "collection",
- "type": "application/json",
- "title": "S2",
- "href": "https://tamn.snapplanet.io/collections/S2"
- },
- {
- "rel": "root",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io"
- },
- {
- "rel": "child",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/566e68c3-edf8-5bb8-9380-31b519e26bb4/hasSample"
- },
- {
- "rel": "isSampleOf",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/566e68c3-edf8-5bb8-9380-31b519e26bb4/isSampleOf"
- },
- {
- "rel": "preview",
- "type": "image/jpeg",
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/58/U/GE/2021/1/31/0/preview.jpg"
- }
- ],
- "assets": {
- "thumbnail": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/58/U/GE/2021/1/31/0/preview.jpg",
- "type": "image/jpeg",
- "role": "thumbnail"
- },
- "metadata": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/58/U/GE/2021/1/31/0/metadata.xml",
- "type": "text/xml",
- "role": "metadata"
- },
- "tileInfo": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/58/U/GE/2021/1/31/0/tileInfo.json",
- "type": "application/json"
- },
- "productInfo": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/58/U/GE/2021/1/31/0/productInfo.json",
- "type": "application/json"
- },
- "B1": {
- "href": "s3://sentinel-s2-l1c/tiles/58/U/GE/2021/1/31/0/B1.jp2",
- "title": "B1 60m (coastal)",
- "type": "image/jp2",
- "eo:bands": [
- 0
- ]
- },
- "B2": {
- "href": "s3://sentinel-s2-l1c/tiles/58/U/GE/2021/1/31/0/B2.jp2",
- "title": "B2 10m (blue)",
- "type": "image/jp2",
- "eo:bands": [
- 1
- ]
- },
- "B3": {
- "href": "s3://sentinel-s2-l1c/tiles/58/U/GE/2021/1/31/0/B3.jp2",
- "title": "B3 10m (green)",
- "type": "image/jp2",
- "eo:bands": [
- 2
- ]
- },
- "B4": {
- "href": "s3://sentinel-s2-l1c/tiles/58/U/GE/2021/1/31/0/B4.jp2",
- "title": "B4 10m (red)",
- "type": "image/jp2",
- "eo:bands": [
- 3
- ]
- },
- "B5": {
- "href": "s3://sentinel-s2-l1c/tiles/58/U/GE/2021/1/31/0/B5.jp2",
- "title": "B5 20m",
- "type": "image/jp2",
- "eo:bands": [
- 4
- ]
- },
- "B6": {
- "href": "s3://sentinel-s2-l1c/tiles/58/U/GE/2021/1/31/0/B6.jp2",
- "title": "B6 20m",
- "type": "image/jp2",
- "eo:bands": [
- 5
- ]
- },
- "B7": {
- "href": "s3://sentinel-s2-l1c/tiles/58/U/GE/2021/1/31/0/B7.jp2",
- "title": "B7 20m",
- "type": "image/jp2",
- "eo:bands": [
- 6
- ]
- },
- "B8": {
- "href": "s3://sentinel-s2-l1c/tiles/58/U/GE/2021/1/31/0/B8.jp2",
- "title": "B8 10m (nir)",
- "type": "image/jp2",
- "eo:bands": [
- 7
- ]
- },
- "B8A": {
- "href": "s3://sentinel-s2-l1c/tiles/58/U/GE/2021/1/31/0/B8A.jp2",
- "title": "B8A 20m",
- "type": "image/jp2",
- "eo:bands": [
- 8
- ]
- },
- "B9": {
- "href": "s3://sentinel-s2-l1c/tiles/58/U/GE/2021/1/31/0/B9.jp2",
- "title": "B9 60m",
- "type": "image/jp2",
- "eo:bands": [
- 9
- ]
- },
- "B10": {
- "href": "s3://sentinel-s2-l1c/tiles/58/U/GE/2021/1/31/0/B10.jp2",
- "title": "B10 60m",
- "type": "image/jp2",
- "eo:bands": [
- 10
- ]
- },
- "B11": {
- "href": "s3://sentinel-s2-l1c/tiles/58/U/GE/2021/1/31/0/B11.jp2",
- "title": "B11 20m (swir16)",
- "type": "image/jp2",
- "eo:bands": [
- 11
- ]
- },
- "B12": {
- "href": "s3://sentinel-s2-l1c/tiles/58/U/GE/2021/1/31/0/B12.jp2",
- "title": "B12 20m (swir22)",
- "type": "image/jp2",
- "eo:bands": [
- 12
- ]
- }
- },
- "stac_version": "1.0.0",
- "stac_extensions": [
- "https://stac-extensions.github.io/sat/v1.0.0/schema.json",
- "https://stac-extensions.github.io/view/v1.0.0/schema.json",
- "https://stac-extensions.github.io/eo/v1.0.0/schema.json"
- ],
- "bbox": [
- 168.806982582281,
- 53.0712660676314,
- 169.696750016091,
- 53.8063430799066
- ]
- },
- {
- "type": "Feature",
- "id": "02a48642-bce5-5d97-91b9-8b4e611bc00e",
- "geometry": null,
- "properties": {
- "productIdentifier": "S2B_MSIL1C_20210131T235129_N0209_R073_T59UPU_20210201T011827",
- "datetime": "2021-01-31T23:51:40.446000Z",
- "start_datetime": "2021-01-31T23:51:40.446000Z",
- "end_datetime": "2021-01-31T23:51:40.446000Z",
- "authority": "ESA",
- "productType": "REFLECTANCE",
- "processingLevel": "LEVEL1C",
- "platform": "S2B",
- "instruments": [
- "MSI"
- ],
- "tileId": "59UPU",
- "dataTakeId": "GS2B_20210131T235129_020405_N02.09",
- "eo:cloud_cover": 32.14,
- "datastripId": "S2B_OPER_MSI_L1C_DS_EPAE_20210201T011827_S20210131T235130_N02.09",
- "path": "tiles/59/U/PU/2021/1/31/0",
- "sciHubIngestion": "2021-02-01T01:58:23.635Z",
- "s3Ingestion": "2021-02-01T02:16:12.348Z",
- "eo:sun_elevation": 70.624235432197,
- "eo:sun_azimuth": 167.674990748947,
- "viewZenith": 9.85074071979077,
- "view:azimuth": 288.855492854153,
- "updated": "2021-02-01T02:16:15.527344Z",
- "published": "2021-02-01T02:16:15.527344Z",
- "keywords": [
- {
- "id": "collection:S2",
- "name": "S2",
- "type": "collection",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23collection%3AS2"
- },
- {
- "id": "productType:REFLECTANCE",
- "name": "REFLECTANCE",
- "type": "productType",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23productType%3AREFLECTANCE"
- },
- {
- "id": "processingLevel:LEVEL1C",
- "name": "LEVEL1C",
- "type": "processingLevel",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23processingLevel%3ALEVEL1C"
- },
- {
- "id": "platform:S2B",
- "name": "S2B",
- "type": "platform",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23platform%3AS2B"
- },
- {
- "id": "instrument:MSI",
- "name": "MSI",
- "type": "instrument",
- "parentId": "platform:S2B",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23instrument%3AMSI"
- },
- {
- "id": "year:2021",
- "name": "2021",
- "type": "year",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23year%3A2021"
- },
- {
- "id": "month:01",
- "name": "01",
- "type": "month",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23month%3A01"
- },
- {
- "id": "day:31",
- "name": "31",
- "type": "day",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23day%3A31"
- }
- ],
- "hashtags": [
- "collection:S2",
- "productType:REFLECTANCE",
- "processingLevel:LEVEL1C",
- "platform:S2B",
- "instrument:MSI",
- "year:2021",
- "month:01",
- "day:31"
- ],
- "likes": 0,
- "comments": 0,
- "status": 1
- },
- "collection": "S2",
- "links": [
- {
- "rel": "self",
- "type": "application/geo+json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/02a48642-bce5-5d97-91b9-8b4e611bc00e"
- },
- {
- "rel": "parent",
- "type": "application/json",
- "title": "S2",
- "href": "https://tamn.snapplanet.io/collections/S2"
- },
- {
- "rel": "collection",
- "type": "application/json",
- "title": "S2",
- "href": "https://tamn.snapplanet.io/collections/S2"
- },
- {
- "rel": "root",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io"
- },
- {
- "rel": "child",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/02a48642-bce5-5d97-91b9-8b4e611bc00e/hasSample"
- },
- {
- "rel": "isSampleOf",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/02a48642-bce5-5d97-91b9-8b4e611bc00e/isSampleOf"
- },
- {
- "rel": "preview",
- "type": "image/jpeg",
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/U/PU/2021/1/31/0/preview.jpg"
- }
- ],
- "assets": {
- "thumbnail": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/U/PU/2021/1/31/0/preview.jpg",
- "type": "image/jpeg",
- "role": "thumbnail"
- },
- "metadata": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/U/PU/2021/1/31/0/metadata.xml",
- "type": "text/xml",
- "role": "metadata"
- },
- "tileInfo": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/U/PU/2021/1/31/0/tileInfo.json",
- "type": "application/json"
- },
- "productInfo": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/U/PU/2021/1/31/0/productInfo.json",
- "type": "application/json"
- },
- "B1": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/PU/2021/1/31/0/B1.jp2",
- "title": "B1 60m (coastal)",
- "type": "image/jp2",
- "eo:bands": [
- 0
- ]
- },
- "B2": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/PU/2021/1/31/0/B2.jp2",
- "title": "B2 10m (blue)",
- "type": "image/jp2",
- "eo:bands": [
- 1
- ]
- },
- "B3": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/PU/2021/1/31/0/B3.jp2",
- "title": "B3 10m (green)",
- "type": "image/jp2",
- "eo:bands": [
- 2
- ]
- },
- "B4": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/PU/2021/1/31/0/B4.jp2",
- "title": "B4 10m (red)",
- "type": "image/jp2",
- "eo:bands": [
- 3
- ]
- },
- "B5": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/PU/2021/1/31/0/B5.jp2",
- "title": "B5 20m",
- "type": "image/jp2",
- "eo:bands": [
- 4
- ]
- },
- "B6": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/PU/2021/1/31/0/B6.jp2",
- "title": "B6 20m",
- "type": "image/jp2",
- "eo:bands": [
- 5
- ]
- },
- "B7": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/PU/2021/1/31/0/B7.jp2",
- "title": "B7 20m",
- "type": "image/jp2",
- "eo:bands": [
- 6
- ]
- },
- "B8": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/PU/2021/1/31/0/B8.jp2",
- "title": "B8 10m (nir)",
- "type": "image/jp2",
- "eo:bands": [
- 7
- ]
- },
- "B8A": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/PU/2021/1/31/0/B8A.jp2",
- "title": "B8A 20m",
- "type": "image/jp2",
- "eo:bands": [
- 8
- ]
- },
- "B9": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/PU/2021/1/31/0/B9.jp2",
- "title": "B9 60m",
- "type": "image/jp2",
- "eo:bands": [
- 9
- ]
- },
- "B10": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/PU/2021/1/31/0/B10.jp2",
- "title": "B10 60m",
- "type": "image/jp2",
- "eo:bands": [
- 10
- ]
- },
- "B11": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/PU/2021/1/31/0/B11.jp2",
- "title": "B11 20m (swir16)",
- "type": "image/jp2",
- "eo:bands": [
- 11
- ]
- },
- "B12": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/PU/2021/1/31/0/B12.jp2",
- "title": "B12 20m (swir22)",
- "type": "image/jp2",
- "eo:bands": [
- 12
- ]
- }
- },
- "stac_version": "1.0.0",
- "stac_extensions": [
- "https://stac-extensions.github.io/sat/v1.0.0/schema.json",
- "https://stac-extensions.github.io/view/v1.0.0/schema.json",
- "https://stac-extensions.github.io/eo/v1.0.0/schema.json"
- ]
- },
- {
- "type": "Feature",
- "id": "77cac508-6a47-56ba-a27b-81c2caa78c38",
- "geometry": {
- "type": "Polygon",
- "coordinates": [
- [
- [
- 169.632461,
- 53.737967
- ],
- [
- 169.651106,
- 53.153544
- ],
- [
- 168.824759,
- 53.141314
- ],
- [
- 169.121629,
- 53.806218
- ],
- [
- 169.499597,
- 53.754944
- ],
- [
- 169.632461,
- 53.737967
- ]
- ]
- ]
- },
- "properties": {
- "productIdentifier": "S2B_MSIL1C_20210131T235129_N0209_R073_T59ULV_20210201T011827",
- "datetime": "2021-01-31T23:51:40.297000Z",
- "start_datetime": "2021-01-31T23:51:40.297000Z",
- "end_datetime": "2021-01-31T23:51:40.297000Z",
- "authority": "ESA",
- "productType": "REFLECTANCE",
- "processingLevel": "LEVEL1C",
- "platform": "S2B",
- "instruments": [
- "MSI"
- ],
- "tileId": "59ULV",
- "dataTakeId": "GS2B_20210131T235129_020405_N02.09",
- "eo:cloud_cover": 11.74,
- "coverage": 25.85,
- "datastripId": "S2B_OPER_MSI_L1C_DS_EPAE_20210201T011827_S20210131T235130_N02.09",
- "path": "tiles/59/U/LV/2021/1/31/0",
- "sciHubIngestion": "2021-02-01T01:58:24.436Z",
- "s3Ingestion": "2021-02-01T02:15:48.861Z",
- "eo:sun_elevation": 72.1727746740516,
- "eo:sun_azimuth": 163.265392355451,
- "viewZenith": 10.1566282124261,
- "view:azimuth": 106.150186796944,
- "updated": "2021-02-01T02:15:51.302810Z",
- "published": "2021-02-01T02:15:51.302810Z",
- "keywords": [
- {
- "id": "sea:BeringSea:4031788",
- "name": "Bering Sea",
- "type": "sea",
- "value": 76.53,
- "gcover": 0.1,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23sea%3ABeringSea%3A4031788"
- },
- {
- "id": "ocean:NorthPacificOcean:4030875",
- "name": "North Pacific Ocean",
- "type": "ocean",
- "value": 23.4,
- "gcover": 0,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23ocean%3ANorthPacificOcean%3A4030875"
- },
- {
- "id": "landcover:water",
- "name": "Water",
- "type": "landcover:water",
- "area": 3104.88928,
- "value": 100,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23landcover%3Awater"
- },
- {
- "id": "location:northern",
- "name": "Northern",
- "type": "location",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23location%3Anorthern"
- },
- {
- "id": "season:winter",
- "name": "Winter",
- "type": "season",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23season%3Awinter"
- },
- {
- "id": "collection:S2",
- "name": "S2",
- "type": "collection",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23collection%3AS2"
- },
- {
- "id": "productType:REFLECTANCE",
- "name": "REFLECTANCE",
- "type": "productType",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23productType%3AREFLECTANCE"
- },
- {
- "id": "processingLevel:LEVEL1C",
- "name": "LEVEL1C",
- "type": "processingLevel",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23processingLevel%3ALEVEL1C"
- },
- {
- "id": "platform:S2B",
- "name": "S2B",
- "type": "platform",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23platform%3AS2B"
- },
- {
- "id": "instrument:MSI",
- "name": "MSI",
- "type": "instrument",
- "parentId": "platform:S2B",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23instrument%3AMSI"
- },
- {
- "id": "year:2021",
- "name": "2021",
- "type": "year",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23year%3A2021"
- },
- {
- "id": "month:01",
- "name": "01",
- "type": "month",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23month%3A01"
- },
- {
- "id": "day:31",
- "name": "31",
- "type": "day",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23day%3A31"
- }
- ],
- "hashtags": [
- "sea:BeringSea:4031788",
- "ocean:NorthPacificOcean:4030875",
- "landcover:water",
- "location:northern",
- "season:winter",
- "collection:S2",
- "productType:REFLECTANCE",
- "processingLevel:LEVEL1C",
- "platform:S2B",
- "instrument:MSI",
- "year:2021",
- "month:01",
- "day:31"
- ],
- "likes": 0,
- "comments": 0,
- "status": 1,
- "centroid": [
- 169.294038,
- 53.436997
- ]
- },
- "collection": "S2",
- "links": [
- {
- "rel": "self",
- "type": "application/geo+json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/77cac508-6a47-56ba-a27b-81c2caa78c38"
- },
- {
- "rel": "parent",
- "type": "application/json",
- "title": "S2",
- "href": "https://tamn.snapplanet.io/collections/S2"
- },
- {
- "rel": "collection",
- "type": "application/json",
- "title": "S2",
- "href": "https://tamn.snapplanet.io/collections/S2"
- },
- {
- "rel": "root",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io"
- },
- {
- "rel": "child",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/77cac508-6a47-56ba-a27b-81c2caa78c38/hasSample"
- },
- {
- "rel": "isSampleOf",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/77cac508-6a47-56ba-a27b-81c2caa78c38/isSampleOf"
- },
- {
- "rel": "preview",
- "type": "image/jpeg",
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/U/LV/2021/1/31/0/preview.jpg"
- }
- ],
- "assets": {
- "thumbnail": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/U/LV/2021/1/31/0/preview.jpg",
- "type": "image/jpeg",
- "role": "thumbnail"
- },
- "metadata": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/U/LV/2021/1/31/0/metadata.xml",
- "type": "text/xml",
- "role": "metadata"
- },
- "tileInfo": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/U/LV/2021/1/31/0/tileInfo.json",
- "type": "application/json"
- },
- "productInfo": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/U/LV/2021/1/31/0/productInfo.json",
- "type": "application/json"
- },
- "B1": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/LV/2021/1/31/0/B1.jp2",
- "title": "B1 60m (coastal)",
- "type": "image/jp2",
- "eo:bands": [
- 0
- ]
- },
- "B2": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/LV/2021/1/31/0/B2.jp2",
- "title": "B2 10m (blue)",
- "type": "image/jp2",
- "eo:bands": [
- 1
- ]
- },
- "B3": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/LV/2021/1/31/0/B3.jp2",
- "title": "B3 10m (green)",
- "type": "image/jp2",
- "eo:bands": [
- 2
- ]
- },
- "B4": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/LV/2021/1/31/0/B4.jp2",
- "title": "B4 10m (red)",
- "type": "image/jp2",
- "eo:bands": [
- 3
- ]
- },
- "B5": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/LV/2021/1/31/0/B5.jp2",
- "title": "B5 20m",
- "type": "image/jp2",
- "eo:bands": [
- 4
- ]
- },
- "B6": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/LV/2021/1/31/0/B6.jp2",
- "title": "B6 20m",
- "type": "image/jp2",
- "eo:bands": [
- 5
- ]
- },
- "B7": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/LV/2021/1/31/0/B7.jp2",
- "title": "B7 20m",
- "type": "image/jp2",
- "eo:bands": [
- 6
- ]
- },
- "B8": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/LV/2021/1/31/0/B8.jp2",
- "title": "B8 10m (nir)",
- "type": "image/jp2",
- "eo:bands": [
- 7
- ]
- },
- "B8A": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/LV/2021/1/31/0/B8A.jp2",
- "title": "B8A 20m",
- "type": "image/jp2",
- "eo:bands": [
- 8
- ]
- },
- "B9": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/LV/2021/1/31/0/B9.jp2",
- "title": "B9 60m",
- "type": "image/jp2",
- "eo:bands": [
- 9
- ]
- },
- "B10": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/LV/2021/1/31/0/B10.jp2",
- "title": "B10 60m",
- "type": "image/jp2",
- "eo:bands": [
- 10
- ]
- },
- "B11": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/LV/2021/1/31/0/B11.jp2",
- "title": "B11 20m (swir16)",
- "type": "image/jp2",
- "eo:bands": [
- 11
- ]
- },
- "B12": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/LV/2021/1/31/0/B12.jp2",
- "title": "B12 20m (swir22)",
- "type": "image/jp2",
- "eo:bands": [
- 12
- ]
- }
- },
- "stac_version": "1.0.0",
- "stac_extensions": [
- "https://stac-extensions.github.io/sat/v1.0.0/schema.json",
- "https://stac-extensions.github.io/view/v1.0.0/schema.json",
- "https://stac-extensions.github.io/eo/v1.0.0/schema.json"
- ],
- "bbox": [
- 168.824759448456,
- 53.1413140116774,
- 169.651105539306,
- 53.8062175914836
- ]
- },
- {
- "type": "Feature",
- "id": "9ce77bfd-296d-54cc-980f-02f2bd717620",
- "geometry": {
- "type": "Polygon",
- "coordinates": [
- [
- [
- 171.147122,
- 53.499923
- ],
- [
- 171.145961,
- 53.161093
- ],
- [
- 169.504037,
- 53.151787
- ],
- [
- 169.482598,
- 53.757371
- ],
- [
- 169.880821,
- 53.703685
- ],
- [
- 170.553239,
- 53.600628
- ],
- [
- 171.147122,
- 53.499923
- ]
- ]
- ]
- },
- "properties": {
- "productIdentifier": "S2B_MSIL1C_20210131T235129_N0209_R073_T59UMV_20210201T011827",
- "datetime": "2021-01-31T23:51:38.267000Z",
- "start_datetime": "2021-01-31T23:51:38.267000Z",
- "end_datetime": "2021-01-31T23:51:38.267000Z",
- "authority": "ESA",
- "productType": "REFLECTANCE",
- "processingLevel": "LEVEL1C",
- "platform": "S2B",
- "instruments": [
- "MSI"
- ],
- "tileId": "59UMV",
- "dataTakeId": "GS2B_20210131T235129_020405_N02.09",
- "eo:cloud_cover": 28.33,
- "coverage": 48.26,
- "datastripId": "S2B_OPER_MSI_L1C_DS_EPAE_20210201T011827_S20210131T235130_N02.09",
- "path": "tiles/59/U/MV/2021/1/31/0",
- "sciHubIngestion": "2021-02-01T01:58:26.422Z",
- "s3Ingestion": "2021-02-01T02:15:17.600Z",
- "eo:sun_elevation": 71.9458141124601,
- "eo:sun_azimuth": 164.748318031396,
- "viewZenith": 5.61760409900246,
- "view:azimuth": 102.586954355881,
- "updated": "2021-02-01T02:15:21.413892Z",
- "published": "2021-02-01T02:15:21.413892Z",
- "keywords": [
- {
- "id": "sea:BeringSea:4031788",
- "name": "Bering Sea",
- "type": "sea",
- "value": 99.89,
- "gcover": 0.26,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23sea%3ABeringSea%3A4031788"
- },
- {
- "id": "ocean:NorthPacificOcean:4030875",
- "name": "North Pacific Ocean",
- "type": "ocean",
- "value": 0.16,
- "gcover": 0,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23ocean%3ANorthPacificOcean%3A4030875"
- },
- {
- "id": "landcover:water",
- "name": "Water",
- "type": "landcover:water",
- "area": 5846.75686,
- "value": 100,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23landcover%3Awater"
- },
- {
- "id": "location:northern",
- "name": "Northern",
- "type": "location",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23location%3Anorthern"
- },
- {
- "id": "season:winter",
- "name": "Winter",
- "type": "season",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23season%3Awinter"
- },
- {
- "id": "collection:S2",
- "name": "S2",
- "type": "collection",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23collection%3AS2"
- },
- {
- "id": "productType:REFLECTANCE",
- "name": "REFLECTANCE",
- "type": "productType",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23productType%3AREFLECTANCE"
- },
- {
- "id": "processingLevel:LEVEL1C",
- "name": "LEVEL1C",
- "type": "processingLevel",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23processingLevel%3ALEVEL1C"
- },
- {
- "id": "platform:S2B",
- "name": "S2B",
- "type": "platform",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23platform%3AS2B"
- },
- {
- "id": "instrument:MSI",
- "name": "MSI",
- "type": "instrument",
- "parentId": "platform:S2B",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23instrument%3AMSI"
- },
- {
- "id": "year:2021",
- "name": "2021",
- "type": "year",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23year%3A2021"
- },
- {
- "id": "month:01",
- "name": "01",
- "type": "month",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23month%3A01"
- },
- {
- "id": "day:31",
- "name": "31",
- "type": "day",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23day%3A31"
- }
- ],
- "hashtags": [
- "sea:BeringSea:4031788",
- "landcover:water",
- "location:northern",
- "season:winter",
- "collection:S2",
- "productType:REFLECTANCE",
- "processingLevel:LEVEL1C",
- "platform:S2B",
- "instrument:MSI",
- "year:2021",
- "month:01",
- "day:31"
- ],
- "likes": 0,
- "comments": 0,
- "status": 1,
- "centroid": [
- 170.243035,
- 53.40172
- ]
- },
- "collection": "S2",
- "links": [
- {
- "rel": "self",
- "type": "application/geo+json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/9ce77bfd-296d-54cc-980f-02f2bd717620"
- },
- {
- "rel": "parent",
- "type": "application/json",
- "title": "S2",
- "href": "https://tamn.snapplanet.io/collections/S2"
- },
- {
- "rel": "collection",
- "type": "application/json",
- "title": "S2",
- "href": "https://tamn.snapplanet.io/collections/S2"
- },
- {
- "rel": "root",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io"
- },
- {
- "rel": "child",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/9ce77bfd-296d-54cc-980f-02f2bd717620/hasSample"
- },
- {
- "rel": "isSampleOf",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/9ce77bfd-296d-54cc-980f-02f2bd717620/isSampleOf"
- },
- {
- "rel": "preview",
- "type": "image/jpeg",
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/U/MV/2021/1/31/0/preview.jpg"
- }
- ],
- "assets": {
- "thumbnail": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/U/MV/2021/1/31/0/preview.jpg",
- "type": "image/jpeg",
- "role": "thumbnail"
- },
- "metadata": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/U/MV/2021/1/31/0/metadata.xml",
- "type": "text/xml",
- "role": "metadata"
- },
- "tileInfo": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/U/MV/2021/1/31/0/tileInfo.json",
- "type": "application/json"
- },
- "productInfo": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/U/MV/2021/1/31/0/productInfo.json",
- "type": "application/json"
- },
- "B1": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/MV/2021/1/31/0/B1.jp2",
- "title": "B1 60m (coastal)",
- "type": "image/jp2",
- "eo:bands": [
- 0
- ]
- },
- "B2": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/MV/2021/1/31/0/B2.jp2",
- "title": "B2 10m (blue)",
- "type": "image/jp2",
- "eo:bands": [
- 1
- ]
- },
- "B3": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/MV/2021/1/31/0/B3.jp2",
- "title": "B3 10m (green)",
- "type": "image/jp2",
- "eo:bands": [
- 2
- ]
- },
- "B4": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/MV/2021/1/31/0/B4.jp2",
- "title": "B4 10m (red)",
- "type": "image/jp2",
- "eo:bands": [
- 3
- ]
- },
- "B5": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/MV/2021/1/31/0/B5.jp2",
- "title": "B5 20m",
- "type": "image/jp2",
- "eo:bands": [
- 4
- ]
- },
- "B6": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/MV/2021/1/31/0/B6.jp2",
- "title": "B6 20m",
- "type": "image/jp2",
- "eo:bands": [
- 5
- ]
- },
- "B7": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/MV/2021/1/31/0/B7.jp2",
- "title": "B7 20m",
- "type": "image/jp2",
- "eo:bands": [
- 6
- ]
- },
- "B8": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/MV/2021/1/31/0/B8.jp2",
- "title": "B8 10m (nir)",
- "type": "image/jp2",
- "eo:bands": [
- 7
- ]
- },
- "B8A": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/MV/2021/1/31/0/B8A.jp2",
- "title": "B8A 20m",
- "type": "image/jp2",
- "eo:bands": [
- 8
- ]
- },
- "B9": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/MV/2021/1/31/0/B9.jp2",
- "title": "B9 60m",
- "type": "image/jp2",
- "eo:bands": [
- 9
- ]
- },
- "B10": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/MV/2021/1/31/0/B10.jp2",
- "title": "B10 60m",
- "type": "image/jp2",
- "eo:bands": [
- 10
- ]
- },
- "B11": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/MV/2021/1/31/0/B11.jp2",
- "title": "B11 20m (swir16)",
- "type": "image/jp2",
- "eo:bands": [
- 11
- ]
- },
- "B12": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/MV/2021/1/31/0/B12.jp2",
- "title": "B12 20m (swir22)",
- "type": "image/jp2",
- "eo:bands": [
- 12
- ]
- }
- },
- "stac_version": "1.0.0",
- "stac_extensions": [
- "https://stac-extensions.github.io/sat/v1.0.0/schema.json",
- "https://stac-extensions.github.io/view/v1.0.0/schema.json",
- "https://stac-extensions.github.io/eo/v1.0.0/schema.json"
- ],
- "bbox": [
- 169.482597719027,
- 53.1517871616411,
- 171.147122207848,
- 53.757371210086
- ]
- },
- {
- "type": "Feature",
- "id": "5242f7e0-44c6-5123-bbdb-ae5160f734da",
- "geometry": {
- "type": "Polygon",
- "coordinates": [
- [
- [
- 172.643759,
- 53.207672
- ],
- [
- 172.64155,
- 53.149869
- ],
- [
- 170.999716,
- 53.161183
- ],
- [
- 170.999713,
- 53.525535
- ],
- [
- 171.288571,
- 53.475184
- ],
- [
- 171.313764,
- 53.46948
- ],
- [
- 171.606867,
- 53.415477
- ],
- [
- 171.632085,
- 53.412112
- ],
- [
- 172.327039,
- 53.274998
- ],
- [
- 172.643759,
- 53.207672
- ]
- ]
- ]
- },
- "properties": {
- "productIdentifier": "S2B_MSIL1C_20210131T235129_N0209_R073_T59UNV_20210201T011827",
- "datetime": "2021-01-31T23:51:36.377000Z",
- "start_datetime": "2021-01-31T23:51:36.377000Z",
- "end_datetime": "2021-01-31T23:51:36.377000Z",
- "authority": "ESA",
- "productType": "REFLECTANCE",
- "processingLevel": "LEVEL1C",
- "platform": "S2B",
- "instruments": [
- "MSI"
- ],
- "tileId": "59UNV",
- "dataTakeId": "GS2B_20210131T235129_020405_N02.09",
- "eo:cloud_cover": 17.3,
- "coverage": 21.73,
- "datastripId": "S2B_OPER_MSI_L1C_DS_EPAE_20210201T011827_S20210131T235130_N02.09",
- "path": "tiles/59/U/NV/2021/1/31/0",
- "sciHubIngestion": "2021-02-01T01:58:19.269Z",
- "s3Ingestion": "2021-02-01T02:16:34.757Z",
- "eo:sun_elevation": 71.7224663414524,
- "eo:sun_azimuth": 166.23705737965,
- "viewZenith": 3.43186496736798,
- "view:azimuth": 219.56672015587,
- "updated": "2021-02-01T02:16:37.203538Z",
- "published": "2021-02-01T02:16:37.203538Z",
- "keywords": [
- {
- "id": "sea:BeringSea:4031788",
- "name": "Bering Sea",
- "type": "sea",
- "value": 100,
- "gcover": 0.11,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23sea%3ABeringSea%3A4031788"
- },
- {
- "id": "landcover:water",
- "name": "Water",
- "type": "landcover:water",
- "area": 2638.29249,
- "value": 100,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23landcover%3Awater"
- },
- {
- "id": "location:northern",
- "name": "Northern",
- "type": "location",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23location%3Anorthern"
- },
- {
- "id": "season:winter",
- "name": "Winter",
- "type": "season",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23season%3Awinter"
- },
- {
- "id": "collection:S2",
- "name": "S2",
- "type": "collection",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23collection%3AS2"
- },
- {
- "id": "productType:REFLECTANCE",
- "name": "REFLECTANCE",
- "type": "productType",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23productType%3AREFLECTANCE"
- },
- {
- "id": "processingLevel:LEVEL1C",
- "name": "LEVEL1C",
- "type": "processingLevel",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23processingLevel%3ALEVEL1C"
- },
- {
- "id": "platform:S2B",
- "name": "S2B",
- "type": "platform",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23platform%3AS2B"
- },
- {
- "id": "instrument:MSI",
- "name": "MSI",
- "type": "instrument",
- "parentId": "platform:S2B",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23instrument%3AMSI"
- },
- {
- "id": "year:2021",
- "name": "2021",
- "type": "year",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23year%3A2021"
- },
- {
- "id": "month:01",
- "name": "01",
- "type": "month",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23month%3A01"
- },
- {
- "id": "day:31",
- "name": "31",
- "type": "day",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23day%3A31"
- }
- ],
- "hashtags": [
- "sea:BeringSea:4031788",
- "landcover:water",
- "location:northern",
- "season:winter",
- "collection:S2",
- "productType:REFLECTANCE",
- "processingLevel:LEVEL1C",
- "platform:S2B",
- "instrument:MSI",
- "year:2021",
- "month:01",
- "day:31"
- ],
- "likes": 0,
- "comments": 0,
- "status": 1,
- "centroid": [
- 171.627856,
- 53.283216
- ]
- },
- "collection": "S2",
- "links": [
- {
- "rel": "self",
- "type": "application/geo+json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/5242f7e0-44c6-5123-bbdb-ae5160f734da"
- },
- {
- "rel": "parent",
- "type": "application/json",
- "title": "S2",
- "href": "https://tamn.snapplanet.io/collections/S2"
- },
- {
- "rel": "collection",
- "type": "application/json",
- "title": "S2",
- "href": "https://tamn.snapplanet.io/collections/S2"
- },
- {
- "rel": "root",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io"
- },
- {
- "rel": "child",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/5242f7e0-44c6-5123-bbdb-ae5160f734da/hasSample"
- },
- {
- "rel": "isSampleOf",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/5242f7e0-44c6-5123-bbdb-ae5160f734da/isSampleOf"
- },
- {
- "rel": "preview",
- "type": "image/jpeg",
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/U/NV/2021/1/31/0/preview.jpg"
- }
- ],
- "assets": {
- "thumbnail": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/U/NV/2021/1/31/0/preview.jpg",
- "type": "image/jpeg",
- "role": "thumbnail"
- },
- "metadata": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/U/NV/2021/1/31/0/metadata.xml",
- "type": "text/xml",
- "role": "metadata"
- },
- "tileInfo": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/U/NV/2021/1/31/0/tileInfo.json",
- "type": "application/json"
- },
- "productInfo": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/U/NV/2021/1/31/0/productInfo.json",
- "type": "application/json"
- },
- "B1": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/NV/2021/1/31/0/B1.jp2",
- "title": "B1 60m (coastal)",
- "type": "image/jp2",
- "eo:bands": [
- 0
- ]
- },
- "B2": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/NV/2021/1/31/0/B2.jp2",
- "title": "B2 10m (blue)",
- "type": "image/jp2",
- "eo:bands": [
- 1
- ]
- },
- "B3": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/NV/2021/1/31/0/B3.jp2",
- "title": "B3 10m (green)",
- "type": "image/jp2",
- "eo:bands": [
- 2
- ]
- },
- "B4": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/NV/2021/1/31/0/B4.jp2",
- "title": "B4 10m (red)",
- "type": "image/jp2",
- "eo:bands": [
- 3
- ]
- },
- "B5": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/NV/2021/1/31/0/B5.jp2",
- "title": "B5 20m",
- "type": "image/jp2",
- "eo:bands": [
- 4
- ]
- },
- "B6": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/NV/2021/1/31/0/B6.jp2",
- "title": "B6 20m",
- "type": "image/jp2",
- "eo:bands": [
- 5
- ]
- },
- "B7": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/NV/2021/1/31/0/B7.jp2",
- "title": "B7 20m",
- "type": "image/jp2",
- "eo:bands": [
- 6
- ]
- },
- "B8": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/NV/2021/1/31/0/B8.jp2",
- "title": "B8 10m (nir)",
- "type": "image/jp2",
- "eo:bands": [
- 7
- ]
- },
- "B8A": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/NV/2021/1/31/0/B8A.jp2",
- "title": "B8A 20m",
- "type": "image/jp2",
- "eo:bands": [
- 8
- ]
- },
- "B9": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/NV/2021/1/31/0/B9.jp2",
- "title": "B9 60m",
- "type": "image/jp2",
- "eo:bands": [
- 9
- ]
- },
- "B10": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/NV/2021/1/31/0/B10.jp2",
- "title": "B10 60m",
- "type": "image/jp2",
- "eo:bands": [
- 10
- ]
- },
- "B11": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/NV/2021/1/31/0/B11.jp2",
- "title": "B11 20m (swir16)",
- "type": "image/jp2",
- "eo:bands": [
- 11
- ]
- },
- "B12": {
- "href": "s3://sentinel-s2-l1c/tiles/59/U/NV/2021/1/31/0/B12.jp2",
- "title": "B12 20m (swir22)",
- "type": "image/jp2",
- "eo:bands": [
- 12
- ]
- }
- },
- "stac_version": "1.0.0",
- "stac_extensions": [
- "https://stac-extensions.github.io/sat/v1.0.0/schema.json",
- "https://stac-extensions.github.io/view/v1.0.0/schema.json",
- "https://stac-extensions.github.io/eo/v1.0.0/schema.json"
- ],
- "bbox": [
- 170.999713392047,
- 53.1498690808361,
- 172.643759120848,
- 53.5255348747255
- ]
- },
- {
- "type": "Feature",
- "id": "c06d5164-ebf5-5ba7-8d5f-d2bed31b5b38",
- "geometry": {
- "type": "Polygon",
- "coordinates": [
- [
- [
- 174.310511,
- 60.395296
- ],
- [
- 174.806733,
- 60.382017
- ],
- [
- 174.799207,
- 60.317462
- ],
- [
- 174.787225,
- 60.320874
- ],
- [
- 174.507019,
- 60.366343
- ],
- [
- 174.310511,
- 60.395296
- ]
- ]
- ]
- },
- "properties": {
- "productIdentifier": "S2B_MSIL1C_20210131T234819_N0209_R073_T59VPG_20210201T011900",
- "datetime": "2021-01-31T23:49:36.867000Z",
- "start_datetime": "2021-01-31T23:49:36.867000Z",
- "end_datetime": "2021-01-31T23:49:36.867000Z",
- "authority": "ESA",
- "productType": "REFLECTANCE",
- "processingLevel": "LEVEL1C",
- "platform": "S2B",
- "instruments": [
- "MSI"
- ],
- "tileId": "59VPG",
- "dataTakeId": "GS2B_20210131T234819_020405_N02.09",
- "eo:cloud_cover": 99.81,
- "coverage": 0.78,
- "datastripId": "S2B_OPER_MSI_L1C_DS_EPAE_20210201T011900_S20210131T234846_N02.09",
- "path": "tiles/59/V/PG/2021/1/31/0",
- "sciHubIngestion": "2021-02-01T02:38:09.558Z",
- "s3Ingestion": "2021-02-01T02:54:28.949Z",
- "eo:sun_elevation": 77.6464281057125,
- "eo:sun_azimuth": 168.09720264101,
- "viewZenith": 3.78879480183961,
- "view:azimuth": 129.400745351259,
- "updated": "2021-02-01T02:54:30.183538Z",
- "published": "2021-02-01T02:54:30.183538Z",
- "keywords": [
- {
- "id": "sea:BeringSea:4031788",
- "name": "Bering Sea",
- "type": "sea",
- "value": 100,
- "gcover": 0,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23sea%3ABeringSea%3A4031788"
- },
- {
- "id": "landcover:water",
- "name": "Water",
- "type": "landcover:water",
- "area": 93.79916,
- "value": 100,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23landcover%3Awater"
- },
- {
- "id": "location:northern",
- "name": "Northern",
- "type": "location",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23location%3Anorthern"
- },
- {
- "id": "season:winter",
- "name": "Winter",
- "type": "season",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23season%3Awinter"
- },
- {
- "id": "collection:S2",
- "name": "S2",
- "type": "collection",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23collection%3AS2"
- },
- {
- "id": "productType:REFLECTANCE",
- "name": "REFLECTANCE",
- "type": "productType",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23productType%3AREFLECTANCE"
- },
- {
- "id": "processingLevel:LEVEL1C",
- "name": "LEVEL1C",
- "type": "processingLevel",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23processingLevel%3ALEVEL1C"
- },
- {
- "id": "platform:S2B",
- "name": "S2B",
- "type": "platform",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23platform%3AS2B"
- },
- {
- "id": "instrument:MSI",
- "name": "MSI",
- "type": "instrument",
- "parentId": "platform:S2B",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23instrument%3AMSI"
- },
- {
- "id": "year:2021",
- "name": "2021",
- "type": "year",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23year%3A2021"
- },
- {
- "id": "month:01",
- "name": "01",
- "type": "month",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23month%3A01"
- },
- {
- "id": "day:31",
- "name": "31",
- "type": "day",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23day%3A31"
- }
- ],
- "hashtags": [
- "sea:BeringSea:4031788",
- "landcover:water",
- "location:northern",
- "season:winter",
- "collection:S2",
- "productType:REFLECTANCE",
- "processingLevel:LEVEL1C",
- "platform:S2B",
- "instrument:MSI",
- "year:2021",
- "month:01",
- "day:31"
- ],
- "likes": 0,
- "comments": 0,
- "status": 1,
- "centroid": [
- 174.641767,
- 60.365525
- ]
- },
- "collection": "S2",
- "links": [
- {
- "rel": "self",
- "type": "application/geo+json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/c06d5164-ebf5-5ba7-8d5f-d2bed31b5b38"
- },
- {
- "rel": "parent",
- "type": "application/json",
- "title": "S2",
- "href": "https://tamn.snapplanet.io/collections/S2"
- },
- {
- "rel": "collection",
- "type": "application/json",
- "title": "S2",
- "href": "https://tamn.snapplanet.io/collections/S2"
- },
- {
- "rel": "root",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io"
- },
- {
- "rel": "child",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/c06d5164-ebf5-5ba7-8d5f-d2bed31b5b38/hasSample"
- },
- {
- "rel": "isSampleOf",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/c06d5164-ebf5-5ba7-8d5f-d2bed31b5b38/isSampleOf"
- },
- {
- "rel": "preview",
- "type": "image/jpeg",
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/V/PG/2021/1/31/0/preview.jpg"
- }
- ],
- "assets": {
- "thumbnail": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/V/PG/2021/1/31/0/preview.jpg",
- "type": "image/jpeg",
- "role": "thumbnail"
- },
- "metadata": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/V/PG/2021/1/31/0/metadata.xml",
- "type": "text/xml",
- "role": "metadata"
- },
- "tileInfo": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/V/PG/2021/1/31/0/tileInfo.json",
- "type": "application/json"
- },
- "productInfo": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/V/PG/2021/1/31/0/productInfo.json",
- "type": "application/json"
- },
- "B1": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/PG/2021/1/31/0/B1.jp2",
- "title": "B1 60m (coastal)",
- "type": "image/jp2",
- "eo:bands": [
- 0
- ]
- },
- "B2": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/PG/2021/1/31/0/B2.jp2",
- "title": "B2 10m (blue)",
- "type": "image/jp2",
- "eo:bands": [
- 1
- ]
- },
- "B3": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/PG/2021/1/31/0/B3.jp2",
- "title": "B3 10m (green)",
- "type": "image/jp2",
- "eo:bands": [
- 2
- ]
- },
- "B4": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/PG/2021/1/31/0/B4.jp2",
- "title": "B4 10m (red)",
- "type": "image/jp2",
- "eo:bands": [
- 3
- ]
- },
- "B5": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/PG/2021/1/31/0/B5.jp2",
- "title": "B5 20m",
- "type": "image/jp2",
- "eo:bands": [
- 4
- ]
- },
- "B6": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/PG/2021/1/31/0/B6.jp2",
- "title": "B6 20m",
- "type": "image/jp2",
- "eo:bands": [
- 5
- ]
- },
- "B7": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/PG/2021/1/31/0/B7.jp2",
- "title": "B7 20m",
- "type": "image/jp2",
- "eo:bands": [
- 6
- ]
- },
- "B8": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/PG/2021/1/31/0/B8.jp2",
- "title": "B8 10m (nir)",
- "type": "image/jp2",
- "eo:bands": [
- 7
- ]
- },
- "B8A": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/PG/2021/1/31/0/B8A.jp2",
- "title": "B8A 20m",
- "type": "image/jp2",
- "eo:bands": [
- 8
- ]
- },
- "B9": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/PG/2021/1/31/0/B9.jp2",
- "title": "B9 60m",
- "type": "image/jp2",
- "eo:bands": [
- 9
- ]
- },
- "B10": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/PG/2021/1/31/0/B10.jp2",
- "title": "B10 60m",
- "type": "image/jp2",
- "eo:bands": [
- 10
- ]
- },
- "B11": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/PG/2021/1/31/0/B11.jp2",
- "title": "B11 20m (swir16)",
- "type": "image/jp2",
- "eo:bands": [
- 11
- ]
- },
- "B12": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/PG/2021/1/31/0/B12.jp2",
- "title": "B12 20m (swir22)",
- "type": "image/jp2",
- "eo:bands": [
- 12
- ]
- }
- },
- "stac_version": "1.0.0",
- "stac_extensions": [
- "https://stac-extensions.github.io/sat/v1.0.0/schema.json",
- "https://stac-extensions.github.io/view/v1.0.0/schema.json",
- "https://stac-extensions.github.io/eo/v1.0.0/schema.json"
- ],
- "bbox": [
- 174.310510609492,
- 60.3174621691917,
- 174.806732571519,
- 60.3952957318506
- ]
- },
- {
- "type": "Feature",
- "id": "b7f02914-0522-5659-b7fc-e1010591c8da",
- "geometry": {
- "type": "Polygon",
- "coordinates": [
- [
- [
- 174.229619,
- 60.407637
- ],
- [
- 175.361607,
- 60.426376
- ],
- [
- 175.37187,
- 60.220928
- ],
- [
- 174.873021,
- 60.306618
- ],
- [
- 174.544196,
- 60.360238
- ],
- [
- 174.229619,
- 60.407637
- ]
- ]
- ]
- },
- "properties": {
- "productIdentifier": "S2B_MSIL1C_20210131T234819_N0209_R073_T60VUM_20210201T011900",
- "datetime": "2021-01-31T23:49:35.159000Z",
- "start_datetime": "2021-01-31T23:49:35.159000Z",
- "end_datetime": "2021-01-31T23:49:35.159000Z",
- "authority": "ESA",
- "productType": "REFLECTANCE",
- "processingLevel": "LEVEL1C",
- "platform": "S2B",
- "instruments": [
- "MSI"
- ],
- "tileId": "60VUM",
- "dataTakeId": "GS2B_20210131T234819_020405_N02.09",
- "eo:cloud_cover": 99.91,
- "coverage": 5.82,
- "datastripId": "S2B_OPER_MSI_L1C_DS_EPAE_20210201T011900_S20210131T234846_N02.09",
- "path": "tiles/60/V/UM/2021/1/31/0",
- "sciHubIngestion": "2021-02-01T02:38:11.726Z",
- "s3Ingestion": "2021-02-01T03:02:51.230Z",
- "eo:sun_elevation": 77.5867141237258,
- "eo:sun_azimuth": 168.708457972102,
- "viewZenith": 2.58570365478071,
- "view:azimuth": 93.9644000472411,
- "updated": "2021-02-01T03:02:52.482509Z",
- "published": "2021-02-01T03:02:52.482509Z",
- "keywords": [
- {
- "id": "sea:BeringSea:4031788",
- "name": "Bering Sea",
- "type": "sea",
- "value": 100,
- "gcover": 0.03,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23sea%3ABeringSea%3A4031788"
- },
- {
- "id": "landcover:water",
- "name": "Water",
- "type": "landcover:water",
- "area": 698.03382,
- "value": 100,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23landcover%3Awater"
- },
- {
- "id": "location:northern",
- "name": "Northern",
- "type": "location",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23location%3Anorthern"
- },
- {
- "id": "season:winter",
- "name": "Winter",
- "type": "season",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23season%3Awinter"
- },
- {
- "id": "collection:S2",
- "name": "S2",
- "type": "collection",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23collection%3AS2"
- },
- {
- "id": "productType:REFLECTANCE",
- "name": "REFLECTANCE",
- "type": "productType",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23productType%3AREFLECTANCE"
- },
- {
- "id": "processingLevel:LEVEL1C",
- "name": "LEVEL1C",
- "type": "processingLevel",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23processingLevel%3ALEVEL1C"
- },
- {
- "id": "platform:S2B",
- "name": "S2B",
- "type": "platform",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23platform%3AS2B"
- },
- {
- "id": "instrument:MSI",
- "name": "MSI",
- "type": "instrument",
- "parentId": "platform:S2B",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23instrument%3AMSI"
- },
- {
- "id": "year:2021",
- "name": "2021",
- "type": "year",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23year%3A2021"
- },
- {
- "id": "month:01",
- "name": "01",
- "type": "month",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23month%3A01"
- },
- {
- "id": "day:31",
- "name": "31",
- "type": "day",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23day%3A31"
- }
- ],
- "hashtags": [
- "sea:BeringSea:4031788",
- "landcover:water",
- "location:northern",
- "season:winter",
- "collection:S2",
- "productType:REFLECTANCE",
- "processingLevel:LEVEL1C",
- "platform:S2B",
- "instrument:MSI",
- "year:2021",
- "month:01",
- "day:31"
- ],
- "likes": 0,
- "comments": 0,
- "status": 1,
- "centroid": [
- 174.993583,
- 60.352445
- ]
- },
- "collection": "S2",
- "links": [
- {
- "rel": "self",
- "type": "application/geo+json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/b7f02914-0522-5659-b7fc-e1010591c8da"
- },
- {
- "rel": "parent",
- "type": "application/json",
- "title": "S2",
- "href": "https://tamn.snapplanet.io/collections/S2"
- },
- {
- "rel": "collection",
- "type": "application/json",
- "title": "S2",
- "href": "https://tamn.snapplanet.io/collections/S2"
- },
- {
- "rel": "root",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io"
- },
- {
- "rel": "child",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/b7f02914-0522-5659-b7fc-e1010591c8da/hasSample"
- },
- {
- "rel": "isSampleOf",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/b7f02914-0522-5659-b7fc-e1010591c8da/isSampleOf"
- },
- {
- "rel": "preview",
- "type": "image/jpeg",
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/60/V/UM/2021/1/31/0/preview.jpg"
- }
- ],
- "assets": {
- "thumbnail": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/60/V/UM/2021/1/31/0/preview.jpg",
- "type": "image/jpeg",
- "role": "thumbnail"
- },
- "metadata": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/60/V/UM/2021/1/31/0/metadata.xml",
- "type": "text/xml",
- "role": "metadata"
- },
- "tileInfo": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/60/V/UM/2021/1/31/0/tileInfo.json",
- "type": "application/json"
- },
- "productInfo": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/60/V/UM/2021/1/31/0/productInfo.json",
- "type": "application/json"
- },
- "B1": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/UM/2021/1/31/0/B1.jp2",
- "title": "B1 60m (coastal)",
- "type": "image/jp2",
- "eo:bands": [
- 0
- ]
- },
- "B2": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/UM/2021/1/31/0/B2.jp2",
- "title": "B2 10m (blue)",
- "type": "image/jp2",
- "eo:bands": [
- 1
- ]
- },
- "B3": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/UM/2021/1/31/0/B3.jp2",
- "title": "B3 10m (green)",
- "type": "image/jp2",
- "eo:bands": [
- 2
- ]
- },
- "B4": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/UM/2021/1/31/0/B4.jp2",
- "title": "B4 10m (red)",
- "type": "image/jp2",
- "eo:bands": [
- 3
- ]
- },
- "B5": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/UM/2021/1/31/0/B5.jp2",
- "title": "B5 20m",
- "type": "image/jp2",
- "eo:bands": [
- 4
- ]
- },
- "B6": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/UM/2021/1/31/0/B6.jp2",
- "title": "B6 20m",
- "type": "image/jp2",
- "eo:bands": [
- 5
- ]
- },
- "B7": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/UM/2021/1/31/0/B7.jp2",
- "title": "B7 20m",
- "type": "image/jp2",
- "eo:bands": [
- 6
- ]
- },
- "B8": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/UM/2021/1/31/0/B8.jp2",
- "title": "B8 10m (nir)",
- "type": "image/jp2",
- "eo:bands": [
- 7
- ]
- },
- "B8A": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/UM/2021/1/31/0/B8A.jp2",
- "title": "B8A 20m",
- "type": "image/jp2",
- "eo:bands": [
- 8
- ]
- },
- "B9": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/UM/2021/1/31/0/B9.jp2",
- "title": "B9 60m",
- "type": "image/jp2",
- "eo:bands": [
- 9
- ]
- },
- "B10": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/UM/2021/1/31/0/B10.jp2",
- "title": "B10 60m",
- "type": "image/jp2",
- "eo:bands": [
- 10
- ]
- },
- "B11": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/UM/2021/1/31/0/B11.jp2",
- "title": "B11 20m (swir16)",
- "type": "image/jp2",
- "eo:bands": [
- 11
- ]
- },
- "B12": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/UM/2021/1/31/0/B12.jp2",
- "title": "B12 20m (swir22)",
- "type": "image/jp2",
- "eo:bands": [
- 12
- ]
- }
- },
- "stac_version": "1.0.0",
- "stac_extensions": [
- "https://stac-extensions.github.io/sat/v1.0.0/schema.json",
- "https://stac-extensions.github.io/view/v1.0.0/schema.json",
- "https://stac-extensions.github.io/eo/v1.0.0/schema.json"
- ],
- "bbox": [
- 174.229618751865,
- 60.2209283291489,
- 175.371869921259,
- 60.4263758354072
- ]
- },
- {
- "type": "Feature",
- "id": "3a3f9c13-4ed9-5062-b73f-69a2d1600f0a",
- "geometry": {
- "type": "Polygon",
- "coordinates": [
- [
- [
- 173.037947,
- 61.124807
- ],
- [
- 173.003579,
- 60.580732
- ],
- [
- 173.000535,
- 60.580777
- ],
- [
- 172.73194,
- 60.616858
- ],
- [
- 172.721971,
- 60.616987
- ],
- [
- 172.717156,
- 60.618383
- ],
- [
- 173.037947,
- 61.124807
- ]
- ]
- ]
- },
- "properties": {
- "productIdentifier": "S2B_MSIL1C_20210131T234819_N0209_R073_T59VNH_20210201T011900",
- "datetime": "2021-01-31T23:49:34.478000Z",
- "start_datetime": "2021-01-31T23:49:34.478000Z",
- "end_datetime": "2021-01-31T23:49:34.478000Z",
- "authority": "ESA",
- "productType": "REFLECTANCE",
- "processingLevel": "LEVEL1C",
- "platform": "S2B",
- "instruments": [
- "MSI"
- ],
- "tileId": "59VNH",
- "dataTakeId": "GS2B_20210131T234819_020405_N02.09",
- "eo:cloud_cover": 99.94,
- "coverage": 3.97,
- "datastripId": "S2B_OPER_MSI_L1C_DS_EPAE_20210201T011900_S20210131T234846_N02.09",
- "path": "tiles/59/V/NH/2021/1/31/1",
- "sciHubIngestion": "2021-02-01T02:38:10.699Z",
- "s3Ingestion": "2021-02-01T03:03:17.263Z",
- "eo:sun_elevation": 78.7442639199439,
- "eo:sun_azimuth": 166.386424562141,
- "viewZenith": 11.4881355706039,
- "view:azimuth": 115.969937772772,
- "updated": "2021-02-01T03:03:18.269398Z",
- "published": "2021-02-01T03:03:18.269398Z",
- "keywords": [
- {
- "id": "sea:BeringSea:4031788",
- "name": "Bering Sea",
- "type": "sea",
- "value": 100,
- "gcover": 0.02,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23sea%3ABeringSea%3A4031788"
- },
- {
- "id": "landcover:water",
- "name": "Water",
- "type": "landcover:water",
- "area": 476.55944,
- "value": 100,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23landcover%3Awater"
- },
- {
- "id": "location:northern",
- "name": "Northern",
- "type": "location",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23location%3Anorthern"
- },
- {
- "id": "season:winter",
- "name": "Winter",
- "type": "season",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23season%3Awinter"
- },
- {
- "id": "collection:S2",
- "name": "S2",
- "type": "collection",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23collection%3AS2"
- },
- {
- "id": "productType:REFLECTANCE",
- "name": "REFLECTANCE",
- "type": "productType",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23productType%3AREFLECTANCE"
- },
- {
- "id": "processingLevel:LEVEL1C",
- "name": "LEVEL1C",
- "type": "processingLevel",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23processingLevel%3ALEVEL1C"
- },
- {
- "id": "platform:S2B",
- "name": "S2B",
- "type": "platform",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23platform%3AS2B"
- },
- {
- "id": "instrument:MSI",
- "name": "MSI",
- "type": "instrument",
- "parentId": "platform:S2B",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23instrument%3AMSI"
- },
- {
- "id": "year:2021",
- "name": "2021",
- "type": "year",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23year%3A2021"
- },
- {
- "id": "month:01",
- "name": "01",
- "type": "month",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23month%3A01"
- },
- {
- "id": "day:31",
- "name": "31",
- "type": "day",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23day%3A31"
- }
- ],
- "hashtags": [
- "sea:BeringSea:4031788",
- "landcover:water",
- "location:northern",
- "season:winter",
- "collection:S2",
- "productType:REFLECTANCE",
- "processingLevel:LEVEL1C",
- "platform:S2B",
- "instrument:MSI",
- "year:2021",
- "month:01",
- "day:31"
- ],
- "likes": 0,
- "comments": 0,
- "status": 1,
- "centroid": [
- 172.919617,
- 60.774644
- ]
- },
- "collection": "S2",
- "links": [
- {
- "rel": "self",
- "type": "application/geo+json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/3a3f9c13-4ed9-5062-b73f-69a2d1600f0a"
- },
- {
- "rel": "parent",
- "type": "application/json",
- "title": "S2",
- "href": "https://tamn.snapplanet.io/collections/S2"
- },
- {
- "rel": "collection",
- "type": "application/json",
- "title": "S2",
- "href": "https://tamn.snapplanet.io/collections/S2"
- },
- {
- "rel": "root",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io"
- },
- {
- "rel": "child",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/3a3f9c13-4ed9-5062-b73f-69a2d1600f0a/hasSample"
- },
- {
- "rel": "isSampleOf",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/3a3f9c13-4ed9-5062-b73f-69a2d1600f0a/isSampleOf"
- },
- {
- "rel": "preview",
- "type": "image/jpeg",
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/V/NH/2021/1/31/1/preview.jpg"
- }
- ],
- "assets": {
- "thumbnail": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/V/NH/2021/1/31/1/preview.jpg",
- "type": "image/jpeg",
- "role": "thumbnail"
- },
- "metadata": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/V/NH/2021/1/31/1/metadata.xml",
- "type": "text/xml",
- "role": "metadata"
- },
- "tileInfo": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/V/NH/2021/1/31/1/tileInfo.json",
- "type": "application/json"
- },
- "productInfo": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/V/NH/2021/1/31/1/productInfo.json",
- "type": "application/json"
- },
- "B1": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/NH/2021/1/31/1/B1.jp2",
- "title": "B1 60m (coastal)",
- "type": "image/jp2",
- "eo:bands": [
- 0
- ]
- },
- "B2": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/NH/2021/1/31/1/B2.jp2",
- "title": "B2 10m (blue)",
- "type": "image/jp2",
- "eo:bands": [
- 1
- ]
- },
- "B3": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/NH/2021/1/31/1/B3.jp2",
- "title": "B3 10m (green)",
- "type": "image/jp2",
- "eo:bands": [
- 2
- ]
- },
- "B4": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/NH/2021/1/31/1/B4.jp2",
- "title": "B4 10m (red)",
- "type": "image/jp2",
- "eo:bands": [
- 3
- ]
- },
- "B5": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/NH/2021/1/31/1/B5.jp2",
- "title": "B5 20m",
- "type": "image/jp2",
- "eo:bands": [
- 4
- ]
- },
- "B6": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/NH/2021/1/31/1/B6.jp2",
- "title": "B6 20m",
- "type": "image/jp2",
- "eo:bands": [
- 5
- ]
- },
- "B7": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/NH/2021/1/31/1/B7.jp2",
- "title": "B7 20m",
- "type": "image/jp2",
- "eo:bands": [
- 6
- ]
- },
- "B8": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/NH/2021/1/31/1/B8.jp2",
- "title": "B8 10m (nir)",
- "type": "image/jp2",
- "eo:bands": [
- 7
- ]
- },
- "B8A": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/NH/2021/1/31/1/B8A.jp2",
- "title": "B8A 20m",
- "type": "image/jp2",
- "eo:bands": [
- 8
- ]
- },
- "B9": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/NH/2021/1/31/1/B9.jp2",
- "title": "B9 60m",
- "type": "image/jp2",
- "eo:bands": [
- 9
- ]
- },
- "B10": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/NH/2021/1/31/1/B10.jp2",
- "title": "B10 60m",
- "type": "image/jp2",
- "eo:bands": [
- 10
- ]
- },
- "B11": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/NH/2021/1/31/1/B11.jp2",
- "title": "B11 20m (swir16)",
- "type": "image/jp2",
- "eo:bands": [
- 11
- ]
- },
- "B12": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/NH/2021/1/31/1/B12.jp2",
- "title": "B12 20m (swir22)",
- "type": "image/jp2",
- "eo:bands": [
- 12
- ]
- }
- },
- "stac_version": "1.0.0",
- "stac_extensions": [
- "https://stac-extensions.github.io/sat/v1.0.0/schema.json",
- "https://stac-extensions.github.io/view/v1.0.0/schema.json",
- "https://stac-extensions.github.io/eo/v1.0.0/schema.json"
- ],
- "bbox": [
- 172.717155926524,
- 60.5807318460504,
- 173.037947297857,
- 61.1248073595987
- ]
- },
- {
- "type": "Feature",
- "id": "48081d72-3dce-595e-b8bb-429629726582",
- "geometry": {
- "type": "Polygon",
- "coordinates": [
- [
- [
- 175.184827,
- 60.424084
- ],
- [
- 177.177303,
- 60.43633
- ],
- [
- 177.174274,
- 59.869063
- ],
- [
- 177.165521,
- 59.872014
- ],
- [
- 177.025004,
- 59.901782
- ],
- [
- 176.348736,
- 60.039722
- ],
- [
- 175.693221,
- 60.164726
- ],
- [
- 175.310161,
- 60.232611
- ],
- [
- 175.196279,
- 60.249862
- ],
- [
- 175.184827,
- 60.424084
- ]
- ]
- ]
- },
- "properties": {
- "productIdentifier": "S2B_MSIL1C_20210131T234819_N0209_R073_T60VVM_20210201T011900",
- "datetime": "2021-01-31T23:49:33.328000Z",
- "start_datetime": "2021-01-31T23:49:33.328000Z",
- "end_datetime": "2021-01-31T23:49:33.328000Z",
- "authority": "ESA",
- "productType": "REFLECTANCE",
- "processingLevel": "LEVEL1C",
- "platform": "S2B",
- "instruments": [
- "MSI"
- ],
- "tileId": "60VVM",
- "dataTakeId": "GS2B_20210131T234819_020405_N02.09",
- "eo:cloud_cover": 99.97,
- "coverage": 37.02,
- "datastripId": "S2B_OPER_MSI_L1C_DS_EPAE_20210201T011900_S20210131T234846_N02.09",
- "path": "tiles/60/V/VM/2021/1/31/0",
- "sciHubIngestion": "2021-02-01T02:40:53.762Z",
- "s3Ingestion": "2021-02-01T02:58:24.315Z",
- "eo:sun_elevation": 77.4490227013943,
- "eo:sun_azimuth": 170.432314772807,
- "viewZenith": 5.02430045816962,
- "view:azimuth": 269.654848941782,
- "updated": "2021-02-01T02:58:27.948703Z",
- "published": "2021-02-01T02:58:27.948703Z",
- "keywords": [
- {
- "id": "sea:BeringSea:4031788",
- "name": "Bering Sea",
- "type": "sea",
- "value": 100,
- "gcover": 0.19,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23sea%3ABeringSea%3A4031788"
- },
- {
- "id": "landcover:water",
- "name": "Water",
- "type": "landcover:water",
- "area": 4473.90948,
- "value": 100,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23landcover%3Awater"
- },
- {
- "id": "location:northern",
- "name": "Northern",
- "type": "location",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23location%3Anorthern"
- },
- {
- "id": "season:winter",
- "name": "Winter",
- "type": "season",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23season%3Awinter"
- },
- {
- "id": "collection:S2",
- "name": "S2",
- "type": "collection",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23collection%3AS2"
- },
- {
- "id": "productType:REFLECTANCE",
- "name": "REFLECTANCE",
- "type": "productType",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23productType%3AREFLECTANCE"
- },
- {
- "id": "processingLevel:LEVEL1C",
- "name": "LEVEL1C",
- "type": "processingLevel",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23processingLevel%3ALEVEL1C"
- },
- {
- "id": "platform:S2B",
- "name": "S2B",
- "type": "platform",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23platform%3AS2B"
- },
- {
- "id": "instrument:MSI",
- "name": "MSI",
- "type": "instrument",
- "parentId": "platform:S2B",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23instrument%3AMSI"
- },
- {
- "id": "year:2021",
- "name": "2021",
- "type": "year",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23year%3A2021"
- },
- {
- "id": "month:01",
- "name": "01",
- "type": "month",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23month%3A01"
- },
- {
- "id": "day:31",
- "name": "31",
- "type": "day",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23day%3A31"
- }
- ],
- "hashtags": [
- "sea:BeringSea:4031788",
- "landcover:water",
- "location:northern",
- "season:winter",
- "collection:S2",
- "productType:REFLECTANCE",
- "processingLevel:LEVEL1C",
- "platform:S2B",
- "instrument:MSI",
- "year:2021",
- "month:01",
- "day:31"
- ],
- "likes": 0,
- "comments": 0,
- "status": 1,
- "centroid": [
- 176.364104,
- 60.232313
- ]
- },
- "collection": "S2",
- "links": [
- {
- "rel": "self",
- "type": "application/geo+json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/48081d72-3dce-595e-b8bb-429629726582"
- },
- {
- "rel": "parent",
- "type": "application/json",
- "title": "S2",
- "href": "https://tamn.snapplanet.io/collections/S2"
- },
- {
- "rel": "collection",
- "type": "application/json",
- "title": "S2",
- "href": "https://tamn.snapplanet.io/collections/S2"
- },
- {
- "rel": "root",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io"
- },
- {
- "rel": "child",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/48081d72-3dce-595e-b8bb-429629726582/hasSample"
- },
- {
- "rel": "isSampleOf",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/48081d72-3dce-595e-b8bb-429629726582/isSampleOf"
- },
- {
- "rel": "preview",
- "type": "image/jpeg",
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/60/V/VM/2021/1/31/0/preview.jpg"
- }
- ],
- "assets": {
- "thumbnail": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/60/V/VM/2021/1/31/0/preview.jpg",
- "type": "image/jpeg",
- "role": "thumbnail"
- },
- "metadata": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/60/V/VM/2021/1/31/0/metadata.xml",
- "type": "text/xml",
- "role": "metadata"
- },
- "tileInfo": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/60/V/VM/2021/1/31/0/tileInfo.json",
- "type": "application/json"
- },
- "productInfo": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/60/V/VM/2021/1/31/0/productInfo.json",
- "type": "application/json"
- },
- "B1": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/VM/2021/1/31/0/B1.jp2",
- "title": "B1 60m (coastal)",
- "type": "image/jp2",
- "eo:bands": [
- 0
- ]
- },
- "B2": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/VM/2021/1/31/0/B2.jp2",
- "title": "B2 10m (blue)",
- "type": "image/jp2",
- "eo:bands": [
- 1
- ]
- },
- "B3": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/VM/2021/1/31/0/B3.jp2",
- "title": "B3 10m (green)",
- "type": "image/jp2",
- "eo:bands": [
- 2
- ]
- },
- "B4": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/VM/2021/1/31/0/B4.jp2",
- "title": "B4 10m (red)",
- "type": "image/jp2",
- "eo:bands": [
- 3
- ]
- },
- "B5": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/VM/2021/1/31/0/B5.jp2",
- "title": "B5 20m",
- "type": "image/jp2",
- "eo:bands": [
- 4
- ]
- },
- "B6": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/VM/2021/1/31/0/B6.jp2",
- "title": "B6 20m",
- "type": "image/jp2",
- "eo:bands": [
- 5
- ]
- },
- "B7": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/VM/2021/1/31/0/B7.jp2",
- "title": "B7 20m",
- "type": "image/jp2",
- "eo:bands": [
- 6
- ]
- },
- "B8": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/VM/2021/1/31/0/B8.jp2",
- "title": "B8 10m (nir)",
- "type": "image/jp2",
- "eo:bands": [
- 7
- ]
- },
- "B8A": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/VM/2021/1/31/0/B8A.jp2",
- "title": "B8A 20m",
- "type": "image/jp2",
- "eo:bands": [
- 8
- ]
- },
- "B9": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/VM/2021/1/31/0/B9.jp2",
- "title": "B9 60m",
- "type": "image/jp2",
- "eo:bands": [
- 9
- ]
- },
- "B10": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/VM/2021/1/31/0/B10.jp2",
- "title": "B10 60m",
- "type": "image/jp2",
- "eo:bands": [
- 10
- ]
- },
- "B11": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/VM/2021/1/31/0/B11.jp2",
- "title": "B11 20m (swir16)",
- "type": "image/jp2",
- "eo:bands": [
- 11
- ]
- },
- "B12": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/VM/2021/1/31/0/B12.jp2",
- "title": "B12 20m (swir22)",
- "type": "image/jp2",
- "eo:bands": [
- 12
- ]
- }
- },
- "stac_version": "1.0.0",
- "stac_extensions": [
- "https://stac-extensions.github.io/sat/v1.0.0/schema.json",
- "https://stac-extensions.github.io/view/v1.0.0/schema.json",
- "https://stac-extensions.github.io/eo/v1.0.0/schema.json"
- ],
- "bbox": [
- 175.18482667129,
- 59.8690633280913,
- 177.177302514332,
- 60.4363298650668
- ]
- },
- {
- "type": "Feature",
- "id": "75d4ff03-5c8c-5eed-91eb-688f4dfcae64",
- "geometry": {
- "type": "Polygon",
- "coordinates": [
- [
- [
- 176.999655,
- 60.436448
- ],
- [
- 178.303759,
- 60.430071
- ],
- [
- 177.753973,
- 59.740285
- ],
- [
- 177.314027,
- 59.840525
- ],
- [
- 177.040005,
- 59.898548
- ],
- [
- 177.00754,
- 59.905078
- ],
- [
- 176.99966,
- 59.905267
- ],
- [
- 176.999655,
- 60.436448
- ]
- ]
- ]
- },
- "properties": {
- "productIdentifier": "S2B_MSIL1C_20210131T234819_N0209_R073_T60VWM_20210201T011900",
- "datetime": "2021-01-31T23:49:30.759000Z",
- "start_datetime": "2021-01-31T23:49:30.759000Z",
- "end_datetime": "2021-01-31T23:49:30.759000Z",
- "authority": "ESA",
- "productType": "REFLECTANCE",
- "processingLevel": "LEVEL1C",
- "platform": "S2B",
- "instruments": [
- "MSI"
- ],
- "tileId": "60VWM",
- "dataTakeId": "GS2B_20210131T234819_020405_N02.09",
- "eo:cloud_cover": 99.99,
- "coverage": 33.34,
- "datastripId": "S2B_OPER_MSI_L1C_DS_EPAE_20210201T011900_S20210131T234846_N02.09",
- "path": "tiles/60/V/WM/2021/1/31/0",
- "sciHubIngestion": "2021-02-01T02:41:19.079Z",
- "s3Ingestion": "2021-02-01T02:57:21.201Z",
- "eo:sun_elevation": 77.3136490306663,
- "eo:sun_azimuth": 172.16094476235,
- "viewZenith": 9.6958957731721,
- "view:azimuth": 292.869393016292,
- "updated": "2021-02-01T02:57:24.105845Z",
- "published": "2021-02-01T02:57:24.105845Z",
- "keywords": [
- {
- "id": "sea:BeringSea:4031788",
- "name": "Bering Sea",
- "type": "sea",
- "value": 100,
- "gcover": 0.17,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23sea%3ABeringSea%3A4031788"
- },
- {
- "id": "landcover:water",
- "name": "Water",
- "type": "landcover:water",
- "area": 4076.17079,
- "value": 100,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23landcover%3Awater"
- },
- {
- "id": "location:northern",
- "name": "Northern",
- "type": "location",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23location%3Anorthern"
- },
- {
- "id": "season:winter",
- "name": "Winter",
- "type": "season",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23season%3Awinter"
- },
- {
- "id": "collection:S2",
- "name": "S2",
- "type": "collection",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23collection%3AS2"
- },
- {
- "id": "productType:REFLECTANCE",
- "name": "REFLECTANCE",
- "type": "productType",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23productType%3AREFLECTANCE"
- },
- {
- "id": "processingLevel:LEVEL1C",
- "name": "LEVEL1C",
- "type": "processingLevel",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23processingLevel%3ALEVEL1C"
- },
- {
- "id": "platform:S2B",
- "name": "S2B",
- "type": "platform",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23platform%3AS2B"
- },
- {
- "id": "instrument:MSI",
- "name": "MSI",
- "type": "instrument",
- "parentId": "platform:S2B",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23instrument%3AMSI"
- },
- {
- "id": "year:2021",
- "name": "2021",
- "type": "year",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23year%3A2021"
- },
- {
- "id": "month:01",
- "name": "01",
- "type": "month",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23month%3A01"
- },
- {
- "id": "day:31",
- "name": "31",
- "type": "day",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23day%3A31"
- }
- ],
- "hashtags": [
- "sea:BeringSea:4031788",
- "landcover:water",
- "location:northern",
- "season:winter",
- "collection:S2",
- "productType:REFLECTANCE",
- "processingLevel:LEVEL1C",
- "platform:S2B",
- "instrument:MSI",
- "year:2021",
- "month:01",
- "day:31"
- ],
- "likes": 0,
- "comments": 0,
- "status": 1,
- "centroid": [
- 177.552843,
- 60.149362
- ]
- },
- "collection": "S2",
- "links": [
- {
- "rel": "self",
- "type": "application/geo+json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/75d4ff03-5c8c-5eed-91eb-688f4dfcae64"
- },
- {
- "rel": "parent",
- "type": "application/json",
- "title": "S2",
- "href": "https://tamn.snapplanet.io/collections/S2"
- },
- {
- "rel": "collection",
- "type": "application/json",
- "title": "S2",
- "href": "https://tamn.snapplanet.io/collections/S2"
- },
- {
- "rel": "root",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io"
- },
- {
- "rel": "child",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/75d4ff03-5c8c-5eed-91eb-688f4dfcae64/hasSample"
- },
- {
- "rel": "isSampleOf",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/75d4ff03-5c8c-5eed-91eb-688f4dfcae64/isSampleOf"
- },
- {
- "rel": "preview",
- "type": "image/jpeg",
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/60/V/WM/2021/1/31/0/preview.jpg"
- }
- ],
- "assets": {
- "thumbnail": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/60/V/WM/2021/1/31/0/preview.jpg",
- "type": "image/jpeg",
- "role": "thumbnail"
- },
- "metadata": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/60/V/WM/2021/1/31/0/metadata.xml",
- "type": "text/xml",
- "role": "metadata"
- },
- "tileInfo": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/60/V/WM/2021/1/31/0/tileInfo.json",
- "type": "application/json"
- },
- "productInfo": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/60/V/WM/2021/1/31/0/productInfo.json",
- "type": "application/json"
- },
- "B1": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/WM/2021/1/31/0/B1.jp2",
- "title": "B1 60m (coastal)",
- "type": "image/jp2",
- "eo:bands": [
- 0
- ]
- },
- "B2": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/WM/2021/1/31/0/B2.jp2",
- "title": "B2 10m (blue)",
- "type": "image/jp2",
- "eo:bands": [
- 1
- ]
- },
- "B3": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/WM/2021/1/31/0/B3.jp2",
- "title": "B3 10m (green)",
- "type": "image/jp2",
- "eo:bands": [
- 2
- ]
- },
- "B4": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/WM/2021/1/31/0/B4.jp2",
- "title": "B4 10m (red)",
- "type": "image/jp2",
- "eo:bands": [
- 3
- ]
- },
- "B5": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/WM/2021/1/31/0/B5.jp2",
- "title": "B5 20m",
- "type": "image/jp2",
- "eo:bands": [
- 4
- ]
- },
- "B6": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/WM/2021/1/31/0/B6.jp2",
- "title": "B6 20m",
- "type": "image/jp2",
- "eo:bands": [
- 5
- ]
- },
- "B7": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/WM/2021/1/31/0/B7.jp2",
- "title": "B7 20m",
- "type": "image/jp2",
- "eo:bands": [
- 6
- ]
- },
- "B8": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/WM/2021/1/31/0/B8.jp2",
- "title": "B8 10m (nir)",
- "type": "image/jp2",
- "eo:bands": [
- 7
- ]
- },
- "B8A": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/WM/2021/1/31/0/B8A.jp2",
- "title": "B8A 20m",
- "type": "image/jp2",
- "eo:bands": [
- 8
- ]
- },
- "B9": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/WM/2021/1/31/0/B9.jp2",
- "title": "B9 60m",
- "type": "image/jp2",
- "eo:bands": [
- 9
- ]
- },
- "B10": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/WM/2021/1/31/0/B10.jp2",
- "title": "B10 60m",
- "type": "image/jp2",
- "eo:bands": [
- 10
- ]
- },
- "B11": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/WM/2021/1/31/0/B11.jp2",
- "title": "B11 20m (swir16)",
- "type": "image/jp2",
- "eo:bands": [
- 11
- ]
- },
- "B12": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/WM/2021/1/31/0/B12.jp2",
- "title": "B12 20m (swir22)",
- "type": "image/jp2",
- "eo:bands": [
- 12
- ]
- }
- },
- "stac_version": "1.0.0",
- "stac_extensions": [
- "https://stac-extensions.github.io/sat/v1.0.0/schema.json",
- "https://stac-extensions.github.io/view/v1.0.0/schema.json",
- "https://stac-extensions.github.io/eo/v1.0.0/schema.json"
- ],
- "bbox": [
- 176.999654805081,
- 59.740285160489,
- 178.303759110149,
- 60.4364477889322
- ]
- },
- {
- "type": "Feature",
- "id": "86afd2ed-429d-5d6c-a4cb-ae1749c31884",
- "geometry": {
- "type": "Polygon",
- "coordinates": [
- [
- [
- 173.162256,
- 61.317227
- ],
- [
- 174.914883,
- 61.277972
- ],
- [
- 174.79926,
- 60.317924
- ],
- [
- 174.485604,
- 60.369601
- ],
- [
- 173.625012,
- 60.498254
- ],
- [
- 172.898596,
- 60.595176
- ],
- [
- 172.826368,
- 60.603405
- ],
- [
- 172.838274,
- 60.812523
- ],
- [
- 173.162256,
- 61.317227
- ]
- ]
- ]
- },
- "properties": {
- "productIdentifier": "S2B_MSIL1C_20210131T234819_N0209_R073_T59VPH_20210201T011900",
- "datetime": "2021-01-31T23:49:29.809000Z",
- "start_datetime": "2021-01-31T23:49:29.809000Z",
- "end_datetime": "2021-01-31T23:49:29.809000Z",
- "authority": "ESA",
- "productType": "REFLECTANCE",
- "processingLevel": "LEVEL1C",
- "platform": "S2B",
- "instruments": [
- "MSI"
- ],
- "tileId": "59VPH",
- "dataTakeId": "GS2B_20210131T234819_020405_N02.09",
- "eo:cloud_cover": 99.99,
- "coverage": 81.13,
- "datastripId": "S2B_OPER_MSI_L1C_DS_EPAE_20210201T011900_S20210131T234846_N02.09",
- "path": "tiles/59/V/PH/2021/1/31/0",
- "sciHubIngestion": "2021-02-01T02:41:21.851Z",
- "s3Ingestion": "2021-02-01T02:57:05.268Z",
- "eo:sun_elevation": 78.5225660890856,
- "eo:sun_azimuth": 168.15225103844,
- "viewZenith": 7.62396262569761,
- "view:azimuth": 109.293965023931,
- "updated": "2021-02-01T02:57:10.773109Z",
- "published": "2021-02-01T02:57:10.773109Z",
- "keywords": [
- {
- "id": "sea:BeringSea:4031788",
- "name": "Bering Sea",
- "type": "sea",
- "value": 100,
- "gcover": 0.43,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23sea%3ABeringSea%3A4031788"
- },
- {
- "id": "landcover:water",
- "name": "Water",
- "type": "landcover:water",
- "area": 9760.61095,
- "value": 100,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23landcover%3Awater"
- },
- {
- "id": "location:northern",
- "name": "Northern",
- "type": "location",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23location%3Anorthern"
- },
- {
- "id": "season:winter",
- "name": "Winter",
- "type": "season",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23season%3Awinter"
- },
- {
- "id": "collection:S2",
- "name": "S2",
- "type": "collection",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23collection%3AS2"
- },
- {
- "id": "productType:REFLECTANCE",
- "name": "REFLECTANCE",
- "type": "productType",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23productType%3AREFLECTANCE"
- },
- {
- "id": "processingLevel:LEVEL1C",
- "name": "LEVEL1C",
- "type": "processingLevel",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23processingLevel%3ALEVEL1C"
- },
- {
- "id": "platform:S2B",
- "name": "S2B",
- "type": "platform",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23platform%3AS2B"
- },
- {
- "id": "instrument:MSI",
- "name": "MSI",
- "type": "instrument",
- "parentId": "platform:S2B",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23instrument%3AMSI"
- },
- {
- "id": "year:2021",
- "name": "2021",
- "type": "year",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23year%3A2021"
- },
- {
- "id": "month:01",
- "name": "01",
- "type": "month",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23month%3A01"
- },
- {
- "id": "day:31",
- "name": "31",
- "type": "day",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23day%3A31"
- }
- ],
- "hashtags": [
- "sea:BeringSea:4031788",
- "landcover:water",
- "location:northern",
- "season:winter",
- "collection:S2",
- "productType:REFLECTANCE",
- "processingLevel:LEVEL1C",
- "platform:S2B",
- "instrument:MSI",
- "year:2021",
- "month:01",
- "day:31"
- ],
- "likes": 0,
- "comments": 0,
- "status": 1,
- "centroid": [
- 173.945654,
- 60.869128
- ]
- },
- "collection": "S2",
- "links": [
- {
- "rel": "self",
- "type": "application/geo+json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/86afd2ed-429d-5d6c-a4cb-ae1749c31884"
- },
- {
- "rel": "parent",
- "type": "application/json",
- "title": "S2",
- "href": "https://tamn.snapplanet.io/collections/S2"
- },
- {
- "rel": "collection",
- "type": "application/json",
- "title": "S2",
- "href": "https://tamn.snapplanet.io/collections/S2"
- },
- {
- "rel": "root",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io"
- },
- {
- "rel": "child",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/86afd2ed-429d-5d6c-a4cb-ae1749c31884/hasSample"
- },
- {
- "rel": "isSampleOf",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/86afd2ed-429d-5d6c-a4cb-ae1749c31884/isSampleOf"
- },
- {
- "rel": "preview",
- "type": "image/jpeg",
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/V/PH/2021/1/31/0/preview.jpg"
- }
- ],
- "assets": {
- "thumbnail": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/V/PH/2021/1/31/0/preview.jpg",
- "type": "image/jpeg",
- "role": "thumbnail"
- },
- "metadata": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/V/PH/2021/1/31/0/metadata.xml",
- "type": "text/xml",
- "role": "metadata"
- },
- "tileInfo": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/V/PH/2021/1/31/0/tileInfo.json",
- "type": "application/json"
- },
- "productInfo": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/V/PH/2021/1/31/0/productInfo.json",
- "type": "application/json"
- },
- "B1": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/PH/2021/1/31/0/B1.jp2",
- "title": "B1 60m (coastal)",
- "type": "image/jp2",
- "eo:bands": [
- 0
- ]
- },
- "B2": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/PH/2021/1/31/0/B2.jp2",
- "title": "B2 10m (blue)",
- "type": "image/jp2",
- "eo:bands": [
- 1
- ]
- },
- "B3": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/PH/2021/1/31/0/B3.jp2",
- "title": "B3 10m (green)",
- "type": "image/jp2",
- "eo:bands": [
- 2
- ]
- },
- "B4": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/PH/2021/1/31/0/B4.jp2",
- "title": "B4 10m (red)",
- "type": "image/jp2",
- "eo:bands": [
- 3
- ]
- },
- "B5": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/PH/2021/1/31/0/B5.jp2",
- "title": "B5 20m",
- "type": "image/jp2",
- "eo:bands": [
- 4
- ]
- },
- "B6": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/PH/2021/1/31/0/B6.jp2",
- "title": "B6 20m",
- "type": "image/jp2",
- "eo:bands": [
- 5
- ]
- },
- "B7": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/PH/2021/1/31/0/B7.jp2",
- "title": "B7 20m",
- "type": "image/jp2",
- "eo:bands": [
- 6
- ]
- },
- "B8": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/PH/2021/1/31/0/B8.jp2",
- "title": "B8 10m (nir)",
- "type": "image/jp2",
- "eo:bands": [
- 7
- ]
- },
- "B8A": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/PH/2021/1/31/0/B8A.jp2",
- "title": "B8A 20m",
- "type": "image/jp2",
- "eo:bands": [
- 8
- ]
- },
- "B9": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/PH/2021/1/31/0/B9.jp2",
- "title": "B9 60m",
- "type": "image/jp2",
- "eo:bands": [
- 9
- ]
- },
- "B10": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/PH/2021/1/31/0/B10.jp2",
- "title": "B10 60m",
- "type": "image/jp2",
- "eo:bands": [
- 10
- ]
- },
- "B11": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/PH/2021/1/31/0/B11.jp2",
- "title": "B11 20m (swir16)",
- "type": "image/jp2",
- "eo:bands": [
- 11
- ]
- },
- "B12": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/PH/2021/1/31/0/B12.jp2",
- "title": "B12 20m (swir22)",
- "type": "image/jp2",
- "eo:bands": [
- 12
- ]
- }
- },
- "stac_version": "1.0.0",
- "stac_extensions": [
- "https://stac-extensions.github.io/sat/v1.0.0/schema.json",
- "https://stac-extensions.github.io/view/v1.0.0/schema.json",
- "https://stac-extensions.github.io/eo/v1.0.0/schema.json"
- ],
- "bbox": [
- 172.826367549834,
- 60.3179237691473,
- 174.914883247728,
- 61.3172265906898
- ]
- },
- {
- "type": "Feature",
- "id": "1e11fd5d-74ef-5931-9909-f6e6e3c49468",
- "geometry": {
- "type": "Polygon",
- "coordinates": [
- [
- [
- 173.269379,
- 61.283169
- ],
- [
- 175.314943,
- 61.323985
- ],
- [
- 175.365964,
- 60.339515
- ],
- [
- 174.716996,
- 60.330673
- ],
- [
- 174.707299,
- 60.333472
- ],
- [
- 174.485827,
- 60.369388
- ],
- [
- 173.720948,
- 60.48429
- ],
- [
- 173.358041,
- 60.532188
- ],
- [
- 173.269379,
- 61.283169
- ]
- ]
- ]
- },
- "properties": {
- "productIdentifier": "S2B_MSIL1C_20210131T234819_N0209_R073_T60VUN_20210201T011900",
- "datetime": "2021-01-31T23:49:28.971000Z",
- "start_datetime": "2021-01-31T23:49:28.971000Z",
- "end_datetime": "2021-01-31T23:49:28.971000Z",
- "authority": "ESA",
- "productType": "REFLECTANCE",
- "processingLevel": "LEVEL1C",
- "platform": "S2B",
- "instruments": [
- "MSI"
- ],
- "tileId": "60VUN",
- "dataTakeId": "GS2B_20210131T234819_020405_N02.09",
- "eo:cloud_cover": 99.99,
- "coverage": 91.6,
- "datastripId": "S2B_OPER_MSI_L1C_DS_EPAE_20210201T011900_S20210131T234846_N02.09",
- "path": "tiles/60/V/UN/2021/1/31/0",
- "sciHubIngestion": "2021-02-01T02:40:50.692Z",
- "s3Ingestion": "2021-02-01T02:59:03.946Z",
- "eo:sun_elevation": 78.479141016071,
- "eo:sun_azimuth": 168.61806421064,
- "viewZenith": 5.99238323768834,
- "view:azimuth": 108.467323496316,
- "updated": "2021-02-01T02:59:09.754632Z",
- "published": "2021-02-01T02:59:09.754632Z",
- "keywords": [
- {
- "id": "sea:BeringSea:4031788",
- "name": "Bering Sea",
- "type": "sea",
- "value": 100,
- "gcover": 0.49,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23sea%3ABeringSea%3A4031788"
- },
- {
- "id": "landcover:water",
- "name": "Water",
- "type": "landcover:water",
- "area": 11008.30831,
- "value": 100,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23landcover%3Awater"
- },
- {
- "id": "location:northern",
- "name": "Northern",
- "type": "location",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23location%3Anorthern"
- },
- {
- "id": "season:winter",
- "name": "Winter",
- "type": "season",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23season%3Awinter"
- },
- {
- "id": "collection:S2",
- "name": "S2",
- "type": "collection",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23collection%3AS2"
- },
- {
- "id": "productType:REFLECTANCE",
- "name": "REFLECTANCE",
- "type": "productType",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23productType%3AREFLECTANCE"
- },
- {
- "id": "processingLevel:LEVEL1C",
- "name": "LEVEL1C",
- "type": "processingLevel",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23processingLevel%3ALEVEL1C"
- },
- {
- "id": "platform:S2B",
- "name": "S2B",
- "type": "platform",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23platform%3AS2B"
- },
- {
- "id": "instrument:MSI",
- "name": "MSI",
- "type": "instrument",
- "parentId": "platform:S2B",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23instrument%3AMSI"
- },
- {
- "id": "year:2021",
- "name": "2021",
- "type": "year",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23year%3A2021"
- },
- {
- "id": "month:01",
- "name": "01",
- "type": "month",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23month%3A01"
- },
- {
- "id": "day:31",
- "name": "31",
- "type": "day",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23day%3A31"
- }
- ],
- "hashtags": [
- "sea:BeringSea:4031788",
- "landcover:water",
- "location:northern",
- "season:winter",
- "collection:S2",
- "productType:REFLECTANCE",
- "processingLevel:LEVEL1C",
- "platform:S2B",
- "instrument:MSI",
- "year:2021",
- "month:01",
- "day:31"
- ],
- "likes": 0,
- "comments": 0,
- "status": 1,
- "centroid": [
- 174.378009,
- 60.852967
- ]
- },
- "collection": "S2",
- "links": [
- {
- "rel": "self",
- "type": "application/geo+json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/1e11fd5d-74ef-5931-9909-f6e6e3c49468"
- },
- {
- "rel": "parent",
- "type": "application/json",
- "title": "S2",
- "href": "https://tamn.snapplanet.io/collections/S2"
- },
- {
- "rel": "collection",
- "type": "application/json",
- "title": "S2",
- "href": "https://tamn.snapplanet.io/collections/S2"
- },
- {
- "rel": "root",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io"
- },
- {
- "rel": "child",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/1e11fd5d-74ef-5931-9909-f6e6e3c49468/hasSample"
- },
- {
- "rel": "isSampleOf",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/1e11fd5d-74ef-5931-9909-f6e6e3c49468/isSampleOf"
- },
- {
- "rel": "preview",
- "type": "image/jpeg",
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/60/V/UN/2021/1/31/0/preview.jpg"
- }
- ],
- "assets": {
- "thumbnail": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/60/V/UN/2021/1/31/0/preview.jpg",
- "type": "image/jpeg",
- "role": "thumbnail"
- },
- "metadata": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/60/V/UN/2021/1/31/0/metadata.xml",
- "type": "text/xml",
- "role": "metadata"
- },
- "tileInfo": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/60/V/UN/2021/1/31/0/tileInfo.json",
- "type": "application/json"
- },
- "productInfo": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/60/V/UN/2021/1/31/0/productInfo.json",
- "type": "application/json"
- },
- "B1": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/UN/2021/1/31/0/B1.jp2",
- "title": "B1 60m (coastal)",
- "type": "image/jp2",
- "eo:bands": [
- 0
- ]
- },
- "B2": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/UN/2021/1/31/0/B2.jp2",
- "title": "B2 10m (blue)",
- "type": "image/jp2",
- "eo:bands": [
- 1
- ]
- },
- "B3": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/UN/2021/1/31/0/B3.jp2",
- "title": "B3 10m (green)",
- "type": "image/jp2",
- "eo:bands": [
- 2
- ]
- },
- "B4": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/UN/2021/1/31/0/B4.jp2",
- "title": "B4 10m (red)",
- "type": "image/jp2",
- "eo:bands": [
- 3
- ]
- },
- "B5": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/UN/2021/1/31/0/B5.jp2",
- "title": "B5 20m",
- "type": "image/jp2",
- "eo:bands": [
- 4
- ]
- },
- "B6": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/UN/2021/1/31/0/B6.jp2",
- "title": "B6 20m",
- "type": "image/jp2",
- "eo:bands": [
- 5
- ]
- },
- "B7": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/UN/2021/1/31/0/B7.jp2",
- "title": "B7 20m",
- "type": "image/jp2",
- "eo:bands": [
- 6
- ]
- },
- "B8": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/UN/2021/1/31/0/B8.jp2",
- "title": "B8 10m (nir)",
- "type": "image/jp2",
- "eo:bands": [
- 7
- ]
- },
- "B8A": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/UN/2021/1/31/0/B8A.jp2",
- "title": "B8A 20m",
- "type": "image/jp2",
- "eo:bands": [
- 8
- ]
- },
- "B9": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/UN/2021/1/31/0/B9.jp2",
- "title": "B9 60m",
- "type": "image/jp2",
- "eo:bands": [
- 9
- ]
- },
- "B10": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/UN/2021/1/31/0/B10.jp2",
- "title": "B10 60m",
- "type": "image/jp2",
- "eo:bands": [
- 10
- ]
- },
- "B11": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/UN/2021/1/31/0/B11.jp2",
- "title": "B11 20m (swir16)",
- "type": "image/jp2",
- "eo:bands": [
- 11
- ]
- },
- "B12": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/UN/2021/1/31/0/B12.jp2",
- "title": "B12 20m (swir22)",
- "type": "image/jp2",
- "eo:bands": [
- 12
- ]
- }
- },
- "stac_version": "1.0.0",
- "stac_extensions": [
- "https://stac-extensions.github.io/sat/v1.0.0/schema.json",
- "https://stac-extensions.github.io/view/v1.0.0/schema.json",
- "https://stac-extensions.github.io/eo/v1.0.0/schema.json"
- ],
- "bbox": [
- 173.269379265337,
- 60.3306732080145,
- 175.365964263997,
- 61.3239852349243
- ]
- },
- {
- "type": "Feature",
- "id": "57e5aaa9-da89-50e9-b75f-87973286bd71",
- "geometry": {
- "type": "Polygon",
- "coordinates": [
- [
- [
- 175.131267,
- 61.321583
- ],
- [
- 177.182355,
- 61.334311
- ],
- [
- 177.176826,
- 60.348536
- ],
- [
- 175.187893,
- 60.33631
- ],
- [
- 175.131267,
- 61.321583
- ]
- ]
- ]
- },
- "properties": {
- "productIdentifier": "S2B_MSIL1C_20210131T234819_N0209_R073_T60VVN_20210201T011900",
- "datetime": "2021-01-31T23:49:24.541000Z",
- "start_datetime": "2021-01-31T23:49:24.541000Z",
- "end_datetime": "2021-01-31T23:49:24.541000Z",
- "authority": "ESA",
- "productType": "REFLECTANCE",
- "processingLevel": "LEVEL1C",
- "platform": "S2B",
- "instruments": [
- "MSI"
- ],
- "tileId": "60VVN",
- "dataTakeId": "GS2B_20210131T234819_020405_N02.09",
- "eo:cloud_cover": 100,
- "coverage": 100,
- "datastripId": "S2B_OPER_MSI_L1C_DS_EPAE_20210201T011900_S20210131T234846_N02.09",
- "path": "tiles/60/V/VN/2021/1/31/0",
- "sciHubIngestion": "2021-02-01T02:40:49.534Z",
- "s3Ingestion": "2021-02-01T03:00:06.321Z",
- "eo:sun_elevation": 78.341190001131,
- "eo:sun_azimuth": 170.384966767179,
- "viewZenith": 3.37800372524829,
- "view:azimuth": 217.406677699259,
- "updated": "2021-02-01T03:00:12.564179Z",
- "published": "2021-02-01T03:00:12.564179Z",
- "keywords": [
- {
- "id": "sea:BeringSea:4031788",
- "name": "Bering Sea",
- "type": "sea",
- "value": 100,
- "gcover": 0.53,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23sea%3ABeringSea%3A4031788"
- },
- {
- "id": "landcover:water",
- "name": "Water",
- "type": "landcover:water",
- "area": 12047.30663,
- "value": 100,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23landcover%3Awater"
- },
- {
- "id": "location:northern",
- "name": "Northern",
- "type": "location",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23location%3Anorthern"
- },
- {
- "id": "season:winter",
- "name": "Winter",
- "type": "season",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23season%3Awinter"
- },
- {
- "id": "collection:S2",
- "name": "S2",
- "type": "collection",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23collection%3AS2"
- },
- {
- "id": "productType:REFLECTANCE",
- "name": "REFLECTANCE",
- "type": "productType",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23productType%3AREFLECTANCE"
- },
- {
- "id": "processingLevel:LEVEL1C",
- "name": "LEVEL1C",
- "type": "processingLevel",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23processingLevel%3ALEVEL1C"
- },
- {
- "id": "platform:S2B",
- "name": "S2B",
- "type": "platform",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23platform%3AS2B"
- },
- {
- "id": "instrument:MSI",
- "name": "MSI",
- "type": "instrument",
- "parentId": "platform:S2B",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23instrument%3AMSI"
- },
- {
- "id": "year:2021",
- "name": "2021",
- "type": "year",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23year%3A2021"
- },
- {
- "id": "month:01",
- "name": "01",
- "type": "month",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23month%3A01"
- },
- {
- "id": "day:31",
- "name": "31",
- "type": "day",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23day%3A31"
- }
- ],
- "hashtags": [
- "sea:BeringSea:4031788",
- "landcover:water",
- "location:northern",
- "season:winter",
- "collection:S2",
- "productType:REFLECTANCE",
- "processingLevel:LEVEL1C",
- "platform:S2B",
- "instrument:MSI",
- "year:2021",
- "month:01",
- "day:31"
- ],
- "likes": 0,
- "comments": 0,
- "status": 1,
- "centroid": [
- 176.16954,
- 60.837712
- ]
- },
- "collection": "S2",
- "links": [
- {
- "rel": "self",
- "type": "application/geo+json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/57e5aaa9-da89-50e9-b75f-87973286bd71"
- },
- {
- "rel": "parent",
- "type": "application/json",
- "title": "S2",
- "href": "https://tamn.snapplanet.io/collections/S2"
- },
- {
- "rel": "collection",
- "type": "application/json",
- "title": "S2",
- "href": "https://tamn.snapplanet.io/collections/S2"
- },
- {
- "rel": "root",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io"
- },
- {
- "rel": "child",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/57e5aaa9-da89-50e9-b75f-87973286bd71/hasSample"
- },
- {
- "rel": "isSampleOf",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/57e5aaa9-da89-50e9-b75f-87973286bd71/isSampleOf"
- },
- {
- "rel": "preview",
- "type": "image/jpeg",
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/60/V/VN/2021/1/31/0/preview.jpg"
- }
- ],
- "assets": {
- "thumbnail": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/60/V/VN/2021/1/31/0/preview.jpg",
- "type": "image/jpeg",
- "role": "thumbnail"
- },
- "metadata": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/60/V/VN/2021/1/31/0/metadata.xml",
- "type": "text/xml",
- "role": "metadata"
- },
- "tileInfo": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/60/V/VN/2021/1/31/0/tileInfo.json",
- "type": "application/json"
- },
- "productInfo": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/60/V/VN/2021/1/31/0/productInfo.json",
- "type": "application/json"
- },
- "B1": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/VN/2021/1/31/0/B1.jp2",
- "title": "B1 60m (coastal)",
- "type": "image/jp2",
- "eo:bands": [
- 0
- ]
- },
- "B2": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/VN/2021/1/31/0/B2.jp2",
- "title": "B2 10m (blue)",
- "type": "image/jp2",
- "eo:bands": [
- 1
- ]
- },
- "B3": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/VN/2021/1/31/0/B3.jp2",
- "title": "B3 10m (green)",
- "type": "image/jp2",
- "eo:bands": [
- 2
- ]
- },
- "B4": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/VN/2021/1/31/0/B4.jp2",
- "title": "B4 10m (red)",
- "type": "image/jp2",
- "eo:bands": [
- 3
- ]
- },
- "B5": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/VN/2021/1/31/0/B5.jp2",
- "title": "B5 20m",
- "type": "image/jp2",
- "eo:bands": [
- 4
- ]
- },
- "B6": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/VN/2021/1/31/0/B6.jp2",
- "title": "B6 20m",
- "type": "image/jp2",
- "eo:bands": [
- 5
- ]
- },
- "B7": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/VN/2021/1/31/0/B7.jp2",
- "title": "B7 20m",
- "type": "image/jp2",
- "eo:bands": [
- 6
- ]
- },
- "B8": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/VN/2021/1/31/0/B8.jp2",
- "title": "B8 10m (nir)",
- "type": "image/jp2",
- "eo:bands": [
- 7
- ]
- },
- "B8A": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/VN/2021/1/31/0/B8A.jp2",
- "title": "B8A 20m",
- "type": "image/jp2",
- "eo:bands": [
- 8
- ]
- },
- "B9": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/VN/2021/1/31/0/B9.jp2",
- "title": "B9 60m",
- "type": "image/jp2",
- "eo:bands": [
- 9
- ]
- },
- "B10": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/VN/2021/1/31/0/B10.jp2",
- "title": "B10 60m",
- "type": "image/jp2",
- "eo:bands": [
- 10
- ]
- },
- "B11": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/VN/2021/1/31/0/B11.jp2",
- "title": "B11 20m (swir16)",
- "type": "image/jp2",
- "eo:bands": [
- 11
- ]
- },
- "B12": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/VN/2021/1/31/0/B12.jp2",
- "title": "B12 20m (swir22)",
- "type": "image/jp2",
- "eo:bands": [
- 12
- ]
- }
- },
- "stac_version": "1.0.0",
- "stac_extensions": [
- "https://stac-extensions.github.io/sat/v1.0.0/schema.json",
- "https://stac-extensions.github.io/view/v1.0.0/schema.json",
- "https://stac-extensions.github.io/eo/v1.0.0/schema.json"
- ],
- "bbox": [
- 175.131267437273,
- 60.3363095373745,
- 177.182355205504,
- 61.3343111743704
- ]
- },
- {
- "type": "Feature",
- "id": "0b4b4978-a770-5b3c-8222-84898ab9116e",
- "geometry": {
- "type": "Polygon",
- "coordinates": [
- [
- [
- 176.999645,
- 61.334434
- ],
- [
- 179.043129,
- 61.319071
- ],
- [
- 178.233259,
- 60.342937
- ],
- [
- 176.999656,
- 60.348654
- ],
- [
- 176.999645,
- 61.334434
- ]
- ]
- ]
- },
- "properties": {
- "productIdentifier": "S2B_MSIL1C_20210131T234819_N0209_R073_T60VWN_20210201T011900",
- "datetime": "2021-01-31T23:49:18.766000Z",
- "start_datetime": "2021-01-31T23:49:18.766000Z",
- "end_datetime": "2021-01-31T23:49:18.766000Z",
- "authority": "ESA",
- "productType": "REFLECTANCE",
- "processingLevel": "LEVEL1C",
- "platform": "S2B",
- "instruments": [
- "MSI"
- ],
- "tileId": "60VWN",
- "dataTakeId": "GS2B_20210131T234819_020405_N02.09",
- "eo:cloud_cover": 100,
- "coverage": 80.82,
- "datastripId": "S2B_OPER_MSI_L1C_DS_EPAE_20210201T011900_S20210131T234846_N02.09",
- "path": "tiles/60/V/WN/2021/1/31/0",
- "sciHubIngestion": "2021-02-01T02:40:39.104Z",
- "s3Ingestion": "2021-02-01T03:01:09.085Z",
- "eo:sun_elevation": 78.2053385773221,
- "eo:sun_azimuth": 172.156768852476,
- "viewZenith": 8.5358099067339,
- "view:azimuth": 292.024826714413,
- "updated": "2021-02-01T03:01:14.083317Z",
- "published": "2021-02-01T03:01:14.083317Z",
- "keywords": [
- {
- "id": "sea:BeringSea:4031788",
- "name": "Bering Sea",
- "type": "sea",
- "value": 100,
- "gcover": 0.43,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23sea%3ABeringSea%3A4031788"
- },
- {
- "id": "landcover:water",
- "name": "Water",
- "type": "landcover:water",
- "area": 9728.48801,
- "value": 100,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23landcover%3Awater"
- },
- {
- "id": "location:northern",
- "name": "Northern",
- "type": "location",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23location%3Anorthern"
- },
- {
- "id": "season:winter",
- "name": "Winter",
- "type": "season",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23season%3Awinter"
- },
- {
- "id": "collection:S2",
- "name": "S2",
- "type": "collection",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23collection%3AS2"
- },
- {
- "id": "productType:REFLECTANCE",
- "name": "REFLECTANCE",
- "type": "productType",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23productType%3AREFLECTANCE"
- },
- {
- "id": "processingLevel:LEVEL1C",
- "name": "LEVEL1C",
- "type": "processingLevel",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23processingLevel%3ALEVEL1C"
- },
- {
- "id": "platform:S2B",
- "name": "S2B",
- "type": "platform",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23platform%3AS2B"
- },
- {
- "id": "instrument:MSI",
- "name": "MSI",
- "type": "instrument",
- "parentId": "platform:S2B",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23instrument%3AMSI"
- },
- {
- "id": "year:2021",
- "name": "2021",
- "type": "year",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23year%3A2021"
- },
- {
- "id": "month:01",
- "name": "01",
- "type": "month",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23month%3A01"
- },
- {
- "id": "day:31",
- "name": "31",
- "type": "day",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23day%3A31"
- }
- ],
- "hashtags": [
- "sea:BeringSea:4031788",
- "landcover:water",
- "location:northern",
- "season:winter",
- "collection:S2",
- "productType:REFLECTANCE",
- "processingLevel:LEVEL1C",
- "platform:S2B",
- "instrument:MSI",
- "year:2021",
- "month:01",
- "day:31"
- ],
- "likes": 0,
- "comments": 0,
- "status": 1,
- "centroid": [
- 177.835023,
- 60.876774
- ]
- },
- "collection": "S2",
- "links": [
- {
- "rel": "self",
- "type": "application/geo+json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/0b4b4978-a770-5b3c-8222-84898ab9116e"
- },
- {
- "rel": "parent",
- "type": "application/json",
- "title": "S2",
- "href": "https://tamn.snapplanet.io/collections/S2"
- },
- {
- "rel": "collection",
- "type": "application/json",
- "title": "S2",
- "href": "https://tamn.snapplanet.io/collections/S2"
- },
- {
- "rel": "root",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io"
- },
- {
- "rel": "child",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/0b4b4978-a770-5b3c-8222-84898ab9116e/hasSample"
- },
- {
- "rel": "isSampleOf",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/0b4b4978-a770-5b3c-8222-84898ab9116e/isSampleOf"
- },
- {
- "rel": "preview",
- "type": "image/jpeg",
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/60/V/WN/2021/1/31/0/preview.jpg"
- }
- ],
- "assets": {
- "thumbnail": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/60/V/WN/2021/1/31/0/preview.jpg",
- "type": "image/jpeg",
- "role": "thumbnail"
- },
- "metadata": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/60/V/WN/2021/1/31/0/metadata.xml",
- "type": "text/xml",
- "role": "metadata"
- },
- "tileInfo": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/60/V/WN/2021/1/31/0/tileInfo.json",
- "type": "application/json"
- },
- "productInfo": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/60/V/WN/2021/1/31/0/productInfo.json",
- "type": "application/json"
- },
- "B1": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/WN/2021/1/31/0/B1.jp2",
- "title": "B1 60m (coastal)",
- "type": "image/jp2",
- "eo:bands": [
- 0
- ]
- },
- "B2": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/WN/2021/1/31/0/B2.jp2",
- "title": "B2 10m (blue)",
- "type": "image/jp2",
- "eo:bands": [
- 1
- ]
- },
- "B3": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/WN/2021/1/31/0/B3.jp2",
- "title": "B3 10m (green)",
- "type": "image/jp2",
- "eo:bands": [
- 2
- ]
- },
- "B4": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/WN/2021/1/31/0/B4.jp2",
- "title": "B4 10m (red)",
- "type": "image/jp2",
- "eo:bands": [
- 3
- ]
- },
- "B5": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/WN/2021/1/31/0/B5.jp2",
- "title": "B5 20m",
- "type": "image/jp2",
- "eo:bands": [
- 4
- ]
- },
- "B6": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/WN/2021/1/31/0/B6.jp2",
- "title": "B6 20m",
- "type": "image/jp2",
- "eo:bands": [
- 5
- ]
- },
- "B7": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/WN/2021/1/31/0/B7.jp2",
- "title": "B7 20m",
- "type": "image/jp2",
- "eo:bands": [
- 6
- ]
- },
- "B8": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/WN/2021/1/31/0/B8.jp2",
- "title": "B8 10m (nir)",
- "type": "image/jp2",
- "eo:bands": [
- 7
- ]
- },
- "B8A": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/WN/2021/1/31/0/B8A.jp2",
- "title": "B8A 20m",
- "type": "image/jp2",
- "eo:bands": [
- 8
- ]
- },
- "B9": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/WN/2021/1/31/0/B9.jp2",
- "title": "B9 60m",
- "type": "image/jp2",
- "eo:bands": [
- 9
- ]
- },
- "B10": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/WN/2021/1/31/0/B10.jp2",
- "title": "B10 60m",
- "type": "image/jp2",
- "eo:bands": [
- 10
- ]
- },
- "B11": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/WN/2021/1/31/0/B11.jp2",
- "title": "B11 20m (swir16)",
- "type": "image/jp2",
- "eo:bands": [
- 11
- ]
- },
- "B12": {
- "href": "s3://sentinel-s2-l1c/tiles/60/V/WN/2021/1/31/0/B12.jp2",
- "title": "B12 20m (swir22)",
- "type": "image/jp2",
- "eo:bands": [
- 12
- ]
- }
- },
- "stac_version": "1.0.0",
- "stac_extensions": [
- "https://stac-extensions.github.io/sat/v1.0.0/schema.json",
- "https://stac-extensions.github.io/view/v1.0.0/schema.json",
- "https://stac-extensions.github.io/eo/v1.0.0/schema.json"
- ],
- "bbox": [
- 176.999644967798,
- 60.3429372090535,
- 179.043129470076,
- 61.3344335056374
- ]
- },
- {
- "type": "Feature",
- "id": "d215dc30-1f65-5233-8867-4f66d179dc37",
- "geometry": {
- "type": "Polygon",
- "coordinates": [
- [
- [
- 173.752767,
- 62.204441
- ],
- [
- 175.030291,
- 62.173151
- ],
- [
- 174.903932,
- 61.189856
- ],
- [
- 173.105584,
- 61.229764
- ],
- [
- 173.517797,
- 61.8505
- ],
- [
- 173.752767,
- 62.204441
- ]
- ]
- ]
- },
- "properties": {
- "productIdentifier": "S2B_MSIL1C_20210131T234819_N0209_R073_T59VPJ_20210201T011900",
- "datetime": "2021-01-31T23:49:16.581000Z",
- "start_datetime": "2021-01-31T23:49:16.581000Z",
- "end_datetime": "2021-01-31T23:49:16.581000Z",
- "authority": "ESA",
- "productType": "REFLECTANCE",
- "processingLevel": "LEVEL1C",
- "platform": "S2B",
- "instruments": [
- "MSI"
- ],
- "tileId": "59VPJ",
- "dataTakeId": "GS2B_20210131T234819_020405_N02.09",
- "eo:cloud_cover": 100,
- "coverage": 74.27,
- "datastripId": "S2B_OPER_MSI_L1C_DS_EPAE_20210201T011900_S20210131T234846_N02.09",
- "path": "tiles/59/V/PJ/2021/1/31/0",
- "sciHubIngestion": "2021-02-01T02:40:44.153Z",
- "s3Ingestion": "2021-02-01T03:00:31.289Z",
- "eo:sun_elevation": 79.3977319993627,
- "eo:sun_azimuth": 168.209039531188,
- "viewZenith": 8.78970674020856,
- "view:azimuth": 110.376479994125,
- "updated": "2021-02-01T03:00:36.835204Z",
- "published": "2021-02-01T03:00:36.835204Z",
- "keywords": [
- {
- "id": "continent:Europe:6255148",
- "name": "Europe",
- "type": "continent",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23continent%3AEurope%3A6255148"
- },
- {
- "id": "country:Russia:2017370",
- "name": "Russia",
- "type": "country",
- "parentId": "continent:Europe:6255148",
- "value": 35.51,
- "gcover": 0.01,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23country%3ARussia%3A2017370"
- },
- {
- "id": "region:FarEastern:11961349",
- "name": "Far Eastern",
- "type": "region",
- "parentId": "country:Russia:2017370",
- "value": 35.58,
- "gcover": 0.05,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23region%3AFarEastern%3A11961349"
- },
- {
- "id": "state:Kamchatka:553817",
- "name": "Kamchatka",
- "type": "state",
- "parentId": "region:FarEastern:11961349",
- "value": 22.7,
- "gcover": 0.43,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23state%3AKamchatka%3A553817"
- },
- {
- "id": "sea:BeringSea:4031788",
- "name": "Bering Sea",
- "type": "sea",
- "value": 63.7,
- "gcover": 0.25,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23sea%3ABeringSea%3A4031788"
- },
- {
- "id": "landcover:water",
- "name": "Water",
- "type": "landcover:water",
- "area": 5850.97119,
- "value": 65.72,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23landcover%3Awater"
- },
- {
- "id": "landcover:herbaceous",
- "name": "Herbaceous",
- "type": "landcover:herbaceous",
- "area": 2301.18382,
- "value": 25.84,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23landcover%3Aherbaceous"
- },
- {
- "id": "landcover:desert",
- "name": "Desert",
- "type": "landcover:desert",
- "area": 788.83221,
- "value": 8.86,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23landcover%3Adesert"
- },
- {
- "id": "landcover:cultivated",
- "name": "Cultivated",
- "type": "landcover:cultivated",
- "area": 40.74199,
- "value": 0.45,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23landcover%3Acultivated"
- },
- {
- "id": "landcover:forest",
- "name": "Forest",
- "type": "landcover:forest",
- "area": 7.12332,
- "value": 0.08,
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23landcover%3Aforest"
- },
- {
- "id": "location:northern",
- "name": "Northern",
- "type": "location",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23location%3Anorthern"
- },
- {
- "id": "location:coastal",
- "name": "Coastal",
- "type": "location",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23location%3Acoastal"
- },
- {
- "id": "season:winter",
- "name": "Winter",
- "type": "season",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23season%3Awinter"
- },
- {
- "id": "collection:S2",
- "name": "S2",
- "type": "collection",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23collection%3AS2"
- },
- {
- "id": "productType:REFLECTANCE",
- "name": "REFLECTANCE",
- "type": "productType",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23productType%3AREFLECTANCE"
- },
- {
- "id": "processingLevel:LEVEL1C",
- "name": "LEVEL1C",
- "type": "processingLevel",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23processingLevel%3ALEVEL1C"
- },
- {
- "id": "platform:S2B",
- "name": "S2B",
- "type": "platform",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23platform%3AS2B"
- },
- {
- "id": "instrument:MSI",
- "name": "MSI",
- "type": "instrument",
- "parentId": "platform:S2B",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23instrument%3AMSI"
- },
- {
- "id": "year:2021",
- "name": "2021",
- "type": "year",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23year%3A2021"
- },
- {
- "id": "month:01",
- "name": "01",
- "type": "month",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23month%3A01"
- },
- {
- "id": "day:31",
- "name": "31",
- "type": "day",
- "href": "https://tamn.snapplanet.io/collections/S2/items?&lang=en&q=%23day%3A31"
- }
- ],
- "hashtags": [
- "continent:Europe:6255148",
- "country:Russia:2017370",
- "region:FarEastern:11961349",
- "state:Kamchatka:553817",
- "sea:BeringSea:4031788",
- "landcover:water",
- "landcover:herbaceous",
- "location:northern",
- "location:coastal",
- "season:winter",
- "collection:S2",
- "productType:REFLECTANCE",
- "processingLevel:LEVEL1C",
- "platform:S2B",
- "instrument:MSI",
- "year:2021",
- "month:01",
- "day:31"
- ],
- "likes": 0,
- "comments": 0,
- "status": 1,
- "centroid": [
- 174.186821,
- 61.671755
- ]
- },
- "collection": "S2",
- "links": [
- {
- "rel": "self",
- "type": "application/geo+json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/d215dc30-1f65-5233-8867-4f66d179dc37"
- },
- {
- "rel": "parent",
- "type": "application/json",
- "title": "S2",
- "href": "https://tamn.snapplanet.io/collections/S2"
- },
- {
- "rel": "collection",
- "type": "application/json",
- "title": "S2",
- "href": "https://tamn.snapplanet.io/collections/S2"
- },
- {
- "rel": "root",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io"
- },
- {
- "rel": "child",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/d215dc30-1f65-5233-8867-4f66d179dc37/hasSample"
- },
- {
- "rel": "isSampleOf",
- "type": "application/json",
- "href": "https://tamn.snapplanet.io/collections/S2/items/d215dc30-1f65-5233-8867-4f66d179dc37/isSampleOf"
- },
- {
- "rel": "preview",
- "type": "image/jpeg",
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/V/PJ/2021/1/31/0/preview.jpg"
- }
- ],
- "assets": {
- "thumbnail": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/V/PJ/2021/1/31/0/preview.jpg",
- "type": "image/jpeg",
- "role": "thumbnail"
- },
- "metadata": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/V/PJ/2021/1/31/0/metadata.xml",
- "type": "text/xml",
- "role": "metadata"
- },
- "tileInfo": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/V/PJ/2021/1/31/0/tileInfo.json",
- "type": "application/json"
- },
- "productInfo": {
- "href": "https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/59/V/PJ/2021/1/31/0/productInfo.json",
- "type": "application/json"
- },
- "B1": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/PJ/2021/1/31/0/B1.jp2",
- "title": "B1 60m (coastal)",
- "type": "image/jp2",
- "eo:bands": [
- 0
- ]
- },
- "B2": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/PJ/2021/1/31/0/B2.jp2",
- "title": "B2 10m (blue)",
- "type": "image/jp2",
- "eo:bands": [
- 1
- ]
- },
- "B3": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/PJ/2021/1/31/0/B3.jp2",
- "title": "B3 10m (green)",
- "type": "image/jp2",
- "eo:bands": [
- 2
- ]
- },
- "B4": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/PJ/2021/1/31/0/B4.jp2",
- "title": "B4 10m (red)",
- "type": "image/jp2",
- "eo:bands": [
- 3
- ]
- },
- "B5": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/PJ/2021/1/31/0/B5.jp2",
- "title": "B5 20m",
- "type": "image/jp2",
- "eo:bands": [
- 4
- ]
- },
- "B6": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/PJ/2021/1/31/0/B6.jp2",
- "title": "B6 20m",
- "type": "image/jp2",
- "eo:bands": [
- 5
- ]
- },
- "B7": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/PJ/2021/1/31/0/B7.jp2",
- "title": "B7 20m",
- "type": "image/jp2",
- "eo:bands": [
- 6
- ]
- },
- "B8": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/PJ/2021/1/31/0/B8.jp2",
- "title": "B8 10m (nir)",
- "type": "image/jp2",
- "eo:bands": [
- 7
- ]
- },
- "B8A": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/PJ/2021/1/31/0/B8A.jp2",
- "title": "B8A 20m",
- "type": "image/jp2",
- "eo:bands": [
- 8
- ]
- },
- "B9": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/PJ/2021/1/31/0/B9.jp2",
- "title": "B9 60m",
- "type": "image/jp2",
- "eo:bands": [
- 9
- ]
- },
- "B10": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/PJ/2021/1/31/0/B10.jp2",
- "title": "B10 60m",
- "type": "image/jp2",
- "eo:bands": [
- 10
- ]
- },
- "B11": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/PJ/2021/1/31/0/B11.jp2",
- "title": "B11 20m (swir16)",
- "type": "image/jp2",
- "eo:bands": [
- 11
- ]
- },
- "B12": {
- "href": "s3://sentinel-s2-l1c/tiles/59/V/PJ/2021/1/31/0/B12.jp2",
- "title": "B12 20m (swir22)",
- "type": "image/jp2",
- "eo:bands": [
- 12
- ]
- }
- },
- "stac_version": "1.0.0",
- "stac_extensions": [
- "https://stac-extensions.github.io/sat/v1.0.0/schema.json",
- "https://stac-extensions.github.io/view/v1.0.0/schema.json",
- "https://stac-extensions.github.io/eo/v1.0.0/schema.json"
- ],
- "bbox": [
- 173.105584055056,
- 61.1898559661554,
- 175.030290738886,
- 62.2044408288778
- ]
- }
- ]
-}
\ No newline at end of file
diff --git a/src/DotNetStac.Test/Schemas/SchemaLoaderTests.cs b/src/DotNetStac.Test/Schemas/SchemaLoaderTests.cs
index ceab0735..f9f15570 100644
--- a/src/DotNetStac.Test/Schemas/SchemaLoaderTests.cs
+++ b/src/DotNetStac.Test/Schemas/SchemaLoaderTests.cs
@@ -1,7 +1,9 @@
-using Newtonsoft.Json;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: SchemaLoaderTests.cs
+
using Stac.Exceptions;
using Stac.Extensions;
-using Stac.Extensions.Sat;
using Xunit;
namespace Stac.Test.Item
diff --git a/src/DotNetStac.Test/StacLink/StacLinkTests.cs b/src/DotNetStac.Test/StacLink/StacLinkTests.cs
index f066a129..4956d4bb 100644
--- a/src/DotNetStac.Test/StacLink/StacLinkTests.cs
+++ b/src/DotNetStac.Test/StacLink/StacLinkTests.cs
@@ -1,9 +1,8 @@
-using System;
-using System.Collections.Generic;
-using GeoJSON.Net;
-using GeoJSON.Net.Geometry;
-using Newtonsoft.Json;
-using Newtonsoft.Json.Linq;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: StacLinkTests.cs
+
+using System;
using Xunit;
namespace Stac.Test.Item
@@ -20,7 +19,7 @@ public void CreateHelpers()
var stacLink = StacLink.CreateItemLink(new Uri("file:///test"), "text/plain");
stacLink.Title = "test";
var cloned = new StacLink(stacLink);
- cloned = stacLink.Clone();
+ cloned = stacLink.Clone() as StacLink;
}
}
}
diff --git a/src/DotNetStac.Test/TestBase.cs b/src/DotNetStac.Test/TestBase.cs
index e5a0e311..7a530a18 100644
--- a/src/DotNetStac.Test/TestBase.cs
+++ b/src/DotNetStac.Test/TestBase.cs
@@ -1,16 +1,13 @@
-using System;
-using System.Collections.Generic;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: TestBase.cs
+
+using System;
using System.IO;
-using System.Linq;
-using System.Net;
using System.Net.Http;
using System.Reflection;
using System.Runtime.CompilerServices;
-using System.Text;
-using Newtonsoft.Json;
-using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Schema;
-using Stac.Extensions;
using Stac.Schemas;
namespace Stac.Test
@@ -24,9 +21,17 @@ public abstract class TestBase
.Assembly;
private static readonly string AssemblyName = ThisAssembly.GetName().Name;
- private static StacValidator stacValidator = new StacValidator(new JSchemaUrlResolver());
+ private static readonly StacValidator StacValidator = new(new JSchemaUrlResolver());
+
+ private readonly HttpClient _httpClient = new();
- protected HttpClient httpClient = new HttpClient();
+ public HttpClient HttpClient
+ {
+ get
+ {
+ return _httpClient;
+ }
+ }
protected TestBase()
{
@@ -36,10 +41,8 @@ public static string AssemblyDirectory
{
get
{
- string codeBase = ThisAssembly.CodeBase;
- UriBuilder uri = new UriBuilder(codeBase);
- string path = Uri.UnescapeDataString(uri.Path);
- return Path.GetDirectoryName(path);
+ string codeBase = ThisAssembly.Location;
+ return Path.GetDirectoryName(codeBase);
}
}
@@ -97,7 +100,7 @@ protected string GetUseCaseJson(string name)
public bool ValidateJson(string jsonstr)
{
- return stacValidator.ValidateJson(jsonstr);
+ return StacValidator.ValidateJson(jsonstr);
}
}
diff --git a/src/DotNetStac.Test/TestPriorityAttribute.cs b/src/DotNetStac.Test/TestPriorityAttribute.cs
index b2480a82..0cc87f66 100644
--- a/src/DotNetStac.Test/TestPriorityAttribute.cs
+++ b/src/DotNetStac.Test/TestPriorityAttribute.cs
@@ -1,4 +1,8 @@
-using System;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: TestPriorityAttribute.cs
+
+using System;
namespace Stac.Test
{
diff --git a/src/DotNetStac.Test/UseCases/Sentinel2.cs b/src/DotNetStac.Test/UseCases/Sentinel2.cs
index 2b82fd60..4a40e447 100644
--- a/src/DotNetStac.Test/UseCases/Sentinel2.cs
+++ b/src/DotNetStac.Test/UseCases/Sentinel2.cs
@@ -1,4 +1,8 @@
-using System;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: Sentinel2.cs
+
+using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
@@ -9,7 +13,7 @@ namespace Stac.Test.UseCases
[TestCaseOrderer("Stac.Test.PriorityOrderer", "DotNetStac.Test")]
public class Sentinel2 : TestBase
{
- private static StacCatalog catalog;
+ private static StacCatalog Catalog;
[Fact, TestPriority(1)]
public void LoadRootCatalog()
@@ -17,17 +21,17 @@ public void LoadRootCatalog()
var json = GetUseCaseJson("catalog.json");
ValidateJson(json);
- catalog = StacConvert.Deserialize(json);
+ Catalog = StacConvert.Deserialize(json);
- Assert.NotNull(catalog);
- Assert.Equal("sentinel-stac", catalog.Id);
+ Assert.NotNull(Catalog);
+ Assert.Equal("sentinel-stac", Catalog.Id);
}
[Fact, TestPriority(2)]
public void LoadRootChildren()
{
- IEnumerable children = catalog.GetChildrenLinks()
+ IEnumerable children = Catalog.GetChildrenLinks()
.Select(l =>
{
Uri childUri = new Uri(GetUseCaseFileUri("catalog.json"), l.Uri.OriginalString);
@@ -36,7 +40,7 @@ public void LoadRootChildren()
return StacConvert.Deserialize(childJson);
});
- Assert.Equal(1, children.Count());
+ Assert.Single(children);
Assert.IsAssignableFrom(children.First());
}
diff --git a/src/DotNetStac/Collection/IStacSummaryItem.cs b/src/DotNetStac/Collection/IStacSummaryItem.cs
index 36681be4..43ca8591 100644
--- a/src/DotNetStac/Collection/IStacSummaryItem.cs
+++ b/src/DotNetStac/Collection/IStacSummaryItem.cs
@@ -1,28 +1,46 @@
-using System;
-using System.Collections;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: IStacSummaryItem.cs
+
using System.Collections.Generic;
using Newtonsoft.Json.Linq;
namespace Stac.Collection
{
+ ///
+ /// Delegate for creating a summary item
+ ///
+ /// The argument.
+ /// The type of the argument
+ /// The summary item
+ public delegate IStacSummaryItem CreateSummary(IEnumerable arg);
+
///
/// Provides the summary item interface for Collections
///
public interface IStacSummaryItem : IEnumerable
{
+ ///
+ /// Gets the summary item as a JToken
+ ///
+ ///
+ /// The summary item as a JToken
+ ///
+ JToken AsJToken { get; }
+
///
/// Gets or sets the summary value with the specified fields (for objects only)
///
- ///
+ ///
+ /// The .
+ ///
+ /// The key.
JToken this[object key] { get; }
///
- /// Gets or sets the summary item as a JToken
+ /// Gets the summary item as a JToken
///
- ///
- JToken AsJToken { get; }
-
+ /// The summary item as a JToken
IEnumerable Enumerate();
-
}
}
diff --git a/src/DotNetStac/Collection/StacExtent.cs b/src/DotNetStac/Collection/StacExtent.cs
index b8e1bfab..70fa22e2 100644
--- a/src/DotNetStac/Collection/StacExtent.cs
+++ b/src/DotNetStac/Collection/StacExtent.cs
@@ -1,4 +1,8 @@
-using System;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: StacExtent.cs
+
+using System;
using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json;
@@ -13,7 +17,7 @@ namespace Stac.Collection
public class StacExtent : ICloneable
{
///
- /// Initialise a new instance of the class.
+ /// Initializes a new instance of the class.
///
/// Spatial Extent.
/// Temporal Extent.
@@ -25,9 +29,10 @@ public StacExtent(StacSpatialExtent spatial, StacTemporalExtent temporal)
}
///
+ /// Initializes a new instance of the class.
/// Initialize a new Stac Extent from an existing one (clone).
///
- ///
+ /// The extent.
public StacExtent(StacExtent extent)
{
this.Spatial = new StacSpatialExtent(extent.Spatial);
@@ -60,15 +65,15 @@ public static StacExtent Create(IEnumerable items)
minDate = minDate == DateTime.MinValue ? null : minDate;
maxDate = maxDate == DateTime.MaxValue ? null : maxDate;
return new StacExtent(
- new StacSpatialExtent(items.Min(i => i.GetBoundingBoxFromGeometryExtent()[0]),
- items.Min(i => i.GetBoundingBoxFromGeometryExtent()[1]),
- items.Max(i => i.GetBoundingBoxFromGeometryExtent()[2]),
- items.Max(i => i.GetBoundingBoxFromGeometryExtent()[3])),
-
- new StacTemporalExtent(minDate, maxDate)
- );
+ new StacSpatialExtent(
+ items.Min(i => i.GetBoundingBoxFromGeometryExtent()[0]),
+ items.Min(i => i.GetBoundingBoxFromGeometryExtent()[1]),
+ items.Max(i => i.GetBoundingBoxFromGeometryExtent()[2]),
+ items.Max(i => i.GetBoundingBoxFromGeometryExtent()[3])),
+ new StacTemporalExtent(minDate, maxDate));
}
+ ///
public object Clone()
{
return new StacExtent(this);
@@ -76,22 +81,24 @@ public object Clone()
internal void Update(ICollection items)
{
- Spatial = new StacSpatialExtent(items.Select(i => i.GetBoundingBoxFromGeometryExtent()[0])
+ this.Spatial = new StacSpatialExtent(
+ items.Select(i => i.GetBoundingBoxFromGeometryExtent()[0])
.Concat(new double[] { this.Spatial.BoundingBoxes[0][0] })
.Min(),
- items.Select(i => i.GetBoundingBoxFromGeometryExtent()[1])
+ items.Select(i => i.GetBoundingBoxFromGeometryExtent()[1])
.Concat(new double[] { this.Spatial.BoundingBoxes[0][1] })
.Min(),
- items.Select(i => i.GetBoundingBoxFromGeometryExtent()[2])
+ items.Select(i => i.GetBoundingBoxFromGeometryExtent()[2])
.Concat(new double[] { this.Spatial.BoundingBoxes[0][2] })
.Max(),
- items.Select(i => i.GetBoundingBoxFromGeometryExtent()[3])
+ items.Select(i => i.GetBoundingBoxFromGeometryExtent()[3])
.Concat(new double[] { this.Spatial.BoundingBoxes[0][3] })
.Max());
- Temporal = new StacTemporalExtent(items.Select(i => i.DateTime.Start)
+ this.Temporal = new StacTemporalExtent(
+ items.Select(i => i.DateTime.Start)
.Concat(new DateTime[] { this.Temporal.Interval[0][0].GetValueOrDefault() })
.Min(),
- items.Select(i => i.DateTime.End)
+ items.Select(i => i.DateTime.End)
.Concat(new DateTime[] { this.Temporal.Interval[0][1].GetValueOrDefault() })
.Max());
}
diff --git a/src/DotNetStac/Collection/StacSpatialExtent.cs b/src/DotNetStac/Collection/StacSpatialExtent.cs
index dee4025f..27e62341 100644
--- a/src/DotNetStac/Collection/StacSpatialExtent.cs
+++ b/src/DotNetStac/Collection/StacSpatialExtent.cs
@@ -1,4 +1,8 @@
-using System;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: StacSpatialExtent.cs
+
+using System;
using Newtonsoft.Json;
namespace Stac.Collection
@@ -11,7 +15,7 @@ namespace Stac.Collection
public class StacSpatialExtent : ICloneable
{
///
- /// Initialize a new instance of the class with a single extent.
+ /// Initializes a new instance of the class.
///
/// Minimum X bound
/// Minimum Y bound
@@ -20,20 +24,21 @@ public class StacSpatialExtent : ICloneable
[JsonConstructor]
public StacSpatialExtent(double minX, double minY, double maxX, double maxY)
{
- BoundingBoxes = new double[1][] { new double[4] { minX, minY, maxX, maxY } };
+ this.BoundingBoxes = new double[1][] { new double[4] { minX, minY, maxX, maxY } };
}
///
+ /// Initializes a new instance of the class.
/// Initialize a new Stac Spatial extent from an existing one (clone)
///
- ///
+ /// The spatial extent.
public StacSpatialExtent(StacSpatialExtent spatial)
{
this.BoundingBoxes = (double[][])spatial.BoundingBoxes.Clone();
}
///
- /// Potential spatial extents.
+ /// Gets or sets potential spatial extents.
///
/// Gets/sets double entry array of coordinates
[JsonProperty("bbox")]
@@ -42,7 +47,7 @@ public StacSpatialExtent(StacSpatialExtent spatial)
///
/// Clone this Extent
///
- ///
+ /// A new that is a clone of this instance.
public object Clone()
{
return new StacSpatialExtent(this);
diff --git a/src/DotNetStac/Collection/StacSummaryItem.cs b/src/DotNetStac/Collection/StacSummaryItem.cs
index f75d894c..bc3e2fd3 100644
--- a/src/DotNetStac/Collection/StacSummaryItem.cs
+++ b/src/DotNetStac/Collection/StacSummaryItem.cs
@@ -1,4 +1,7 @@
-using System;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: StacSummaryItem.cs
+
using System.Collections;
using System.Collections.Generic;
using Newtonsoft.Json.Linq;
@@ -13,49 +16,52 @@ public abstract class StacSummaryItem : IStacSummaryItem
///
/// Json Object
///
- protected readonly JToken summary;
+ private readonly JToken _summary;
///
- /// Initialize a new summary item with a JSON object
+ /// Initializes a new instance of the class.
///
- ///
+ /// The summary.
protected StacSummaryItem(JToken summary)
{
- this.summary = summary;
+ this._summary = summary;
}
+ ///
+ /// Gets jToken transformer
+ ///
+ ///
+ /// JToken transformer
+ ///
+ public JToken AsJToken => this._summary;
+
///
/// accessor of fields in the object
///
- ///
+ /// key of the field
public JToken this[object key]
{
get
{
- return summary[key];
+ return this._summary[key];
}
}
- ///
- /// JToken transformer
- ///
- public JToken AsJToken => summary;
-
+ ///
public abstract IEnumerable Enumerate();
///
/// Get Enumerator of object children
///
- ///
+ /// Enumerator of object children
public IEnumerator GetEnumerator()
{
- return summary.Children().GetEnumerator();
+ return this._summary.Children().GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
- return summary.Children().GetEnumerator();
+ return this._summary.Children().GetEnumerator();
}
-
}
}
diff --git a/src/DotNetStac/Collection/StacSummaryRangeObject.cs b/src/DotNetStac/Collection/StacSummaryRangeObject.cs
index ef65d35c..d0620c05 100644
--- a/src/DotNetStac/Collection/StacSummaryRangeObject.cs
+++ b/src/DotNetStac/Collection/StacSummaryRangeObject.cs
@@ -1,9 +1,14 @@
-using System;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: StacSummaryRangeObject.cs
+
+using System;
using System.Collections.Generic;
using Newtonsoft.Json.Linq;
namespace Stac.Collection
{
+#pragma warning disable SA1649 // File name should match first type name
///
/// Class representing a summary Range Object .
///
@@ -11,44 +16,49 @@ namespace Stac.Collection
public class StacSummaryRangeObject : StacSummaryItem
{
///
- /// Initialize a Summary Range Object with a JSON object.
+ /// Initializes a new instance of the class.
///
/// JSON Range object
- /// Thrown when neither "minimum" nor "maximum" fields are present in the range object.
- ///
- public StacSummaryRangeObject(JObject summary) : base(summary)
+ /// Thrown when neither "minimum" nor "maximum" fields are present in the range object.
+ public StacSummaryRangeObject(JObject summary)
+ : base(summary)
{
if (!summary.ContainsKey("minimum") || !summary.ContainsKey("maximum"))
+ {
throw new ArgumentException("summary stats must contains minimum and maximum fields");
+ }
}
///
+ /// Initializes a new instance of the class.
/// Initialize a Summary Range Object with a minimum and a maximum value
///
- ///
- ///
- ///
- public StacSummaryRangeObject(T min, T max) : base(new JObject())
+ /// The minimum value
+ /// The maximum value
+ public StacSummaryRangeObject(T min, T max)
+ : base(new JObject())
{
- Min = min;
- Max = max;
+ this.Min = min;
+ this.Max = max;
}
///
- /// Minimum of the range
+ /// Gets or sets minimum of the range
///
/// Minimum of the range
- public T Min { get => summary["minimum"].Value(); set => summary["minimum"] = new JValue(value); }
+ public T Min { get => this.AsJToken["minimum"].Value(); set => this.AsJToken["minimum"] = new JValue(value); }
///
- /// Maximum of the range
+ /// Gets or sets maximum of the range
///
/// Maximum of the range
- public T Max { get => summary["maximum"].Value(); set => summary["maximum"] = new JValue(value); }
+ public T Max { get => this.AsJToken["maximum"].Value(); set => this.AsJToken["maximum"] = new JValue(value); }
+ ///
public override IEnumerable Enumerate()
{
- return new object[2] { Min, Max };
+ return new object[2] { this.Min, this.Max };
}
}
+#pragma warning restore SA1649 // File name should match first type name
}
diff --git a/src/DotNetStac/Collection/StacSummaryValueSet.cs b/src/DotNetStac/Collection/StacSummaryValueSet.cs
index e5b7aae5..4431e2b9 100644
--- a/src/DotNetStac/Collection/StacSummaryValueSet.cs
+++ b/src/DotNetStac/Collection/StacSummaryValueSet.cs
@@ -1,13 +1,15 @@
-using System;
-using System.Collections;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: StacSummaryValueSet.cs
+
using System.Collections.Generic;
using System.Linq;
-using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
-using Stac.Collection;
namespace Stac.Collection
{
+#pragma warning disable SA1649 // File name should match first type name
+
///
/// Class representing a summary value set
///
@@ -15,56 +17,73 @@ namespace Stac.Collection
public class StacSummaryValueSet : StacSummaryItem, IEnumerable
{
///
- /// Initialize an empty Summary Value Set
+ /// Initializes a new instance of the class.
///
- public StacSummaryValueSet() : base(new JArray())
+ public StacSummaryValueSet()
+ : base(new JArray())
{
}
///
+ /// Initializes a new instance of the class.
/// Initialize a Summary Value Set with a JSON array
///
/// JSON Array
- public StacSummaryValueSet(JArray summarySet) : base(summarySet)
+ public StacSummaryValueSet(JArray summarySet)
+ : base(summarySet)
{
}
///
+ /// Initializes a new instance of the class.
/// Initialize a Summary Value Set with a set of values
///
/// set of values
- public StacSummaryValueSet(IEnumerable summarySet) : base(new JArray(summarySet))
+ public StacSummaryValueSet(IEnumerable summarySet)
+ : base(new JArray(summarySet))
{
}
///
- /// Add a value item in the Summary Value Set
+ /// Gets summary Value Set total of items
///
- /// value item
- public void Add(T item)
- {
- ((JArray)summary).Add(item);
- }
+ ///
+ /// Summary Value Set total of items
+ ///
- ///
+ ///
/// Summary Value Set total of items
- ///
- ///
- public int Count => summary.Count();
+ ///
+ public int Count => this.AsJToken.Count();
///
+ /// Gets get the Summary Value Set as an enumerable
+ ///
+ ///
/// Get the Summary Value Set as an enumerable
+ ///
+ public IEnumerable SummarySet { get => this.AsJToken.ToObject>(); }
+
+ ///
+ /// Add a value item in the Summary Value Set
///
- public IEnumerable SummarySet { get => summary.ToObject>(); }
+ /// value item
+ public void Add(T item)
+ {
+ ((JArray)this.AsJToken).Add(item);
+ }
IEnumerator IEnumerable.GetEnumerator()
{
- return SummarySet.GetEnumerator();
+ return this.SummarySet.GetEnumerator();
}
+ ///
public override IEnumerable Enumerate()
{
return this;
}
}
+
+#pragma warning restore SA1649 // File name should match first type name
}
diff --git a/src/DotNetStac/Collection/StacTemporalExtent.cs b/src/DotNetStac/Collection/StacTemporalExtent.cs
index 228d7f91..3668490b 100644
--- a/src/DotNetStac/Collection/StacTemporalExtent.cs
+++ b/src/DotNetStac/Collection/StacTemporalExtent.cs
@@ -1,4 +1,8 @@
-using System;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: StacTemporalExtent.cs
+
+using System;
using Newtonsoft.Json;
namespace Stac.Collection
@@ -10,32 +14,31 @@ namespace Stac.Collection
[JsonObject]
public class StacTemporalExtent
{
-
-
///
- /// Initialize a new instance of the class with a single extent.
+ /// Initializes a new instance of the class.
///
- ///
- ///
+ /// Start time
+ /// End time
[JsonConstructor]
public StacTemporalExtent(DateTime? start, DateTime? end)
{
- Interval = new DateTime?[1][] { new DateTime?[2] { start, end } };
+ this.Interval = new DateTime?[1][] { new DateTime?[2] { start, end } };
}
///
+ /// Initializes a new instance of the class.
/// Intialize a new Stac Temporal Extent from an exisiting one (clone)
///
- ///
+ /// The temporal extent to clone
public StacTemporalExtent(StacTemporalExtent temporal)
{
- this.Interval = (System.DateTime?[][])temporal.Interval.Clone();
+ this.Interval = (DateTime?[][])temporal.Interval.Clone();
}
///
- /// Potential temporal extents.
+ /// Gets or sets potential temporal extents.
///
- ///
+ /// Potential temporal extents.
[JsonProperty("interval")]
public DateTime?[][] Interval { get; set; }
}
diff --git a/src/DotNetStac/Collection/SummaryItemType.cs b/src/DotNetStac/Collection/SummaryItemType.cs
index f47e8044..45e24b07 100644
--- a/src/DotNetStac/Collection/SummaryItemType.cs
+++ b/src/DotNetStac/Collection/SummaryItemType.cs
@@ -1,14 +1,24 @@
-namespace Stac.Collection
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: SummaryItemType.cs
+
+namespace Stac.Collection
{
///
/// Summary types
///
public enum SummaryItemType
{
+#pragma warning disable SA1300 // Element should begin with upper-case letter
+ ///
/// Summary Value Set
+ ///
ValueSet,
+ ///
/// Summary Range Object
- RangeObject
+ ///
+ RangeObject,
+#pragma warning restore SA1300 // Element should begin with upper-case letter
}
}
diff --git a/src/DotNetStac/Common/DataType.cs b/src/DotNetStac/Common/DataType.cs
index 2865b94d..ebafef34 100644
--- a/src/DotNetStac/Common/DataType.cs
+++ b/src/DotNetStac/Common/DataType.cs
@@ -1,4 +1,8 @@
-using Newtonsoft.Json;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: DataType.cs
+
+using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
namespace Stac.Common
@@ -9,38 +13,61 @@ namespace Stac.Common
[JsonConverter(typeof(StringEnumConverter))]
public enum DataType
{
- /// 8-bit integer
+#pragma warning disable SA1300 // Element should begin with upper-case letter
+#pragma warning disable SA1602 // EnumerationItemsMustBeDocumented
+#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member
+
+ // 8-bit integer
int8,
- /// 16-bit integer
+
+ // 16-bit integer
int16,
- /// 32-bit integer
+
+ // 32-bit integer
int32,
- /// 64-bit integer
+
+ // 64-bit integer
int64,
- /// unsigned 8-bit integer (common for 8-bit RGB PNG's)
+
+ // unsigned 8-bit integer (common for 8-bit RGB PNG's)
uint8,
- /// unsigned 16-bit integer
+
+ // unsigned 16-bit integer
uint16,
- /// unsigned 32-bit integer
+
+ // unsigned 32-bit integer
uint32,
- /// unsigned 64-bit integer
+
+ // unsigned 64-bit integer
uint64,
- /// 16-bit float
+
+ // 16-bit float
float16,
- /// 32-bit float
+
+ // 32-bit float
float32,
- /// 64-big float
+
+ // 64-big float
float64,
- /// 16-bit complex integer
+
+ // 16-bit complex integer
cint16,
- /// 32-bit complex integer
+
+ // 32-bit complex integer
cint32,
- /// 32-bit complex float
+
+ // 32-bit complex float
cfloat32,
- /// 64-bit complex float
+
+ // 64-bit complex float
cfloat64,
- /// Other data type than the ones listed above (e.g. boolean, string, higher precision numbers)
- other
+
+ // Other data type than the ones listed above (e.g. boolean, string, higher precision numbers)
+ other,
+
+#pragma warning restore SA1300 // Element should begin with upper-case letter
+#pragma warning restore SA1602 // EnumerationItemsMustBeDocumented
+#pragma warning restore CS1591 // Missing XML comment for publicly visible type or member
}
}
diff --git a/src/DotNetStac/Common/JsonMergeUtils.cs b/src/DotNetStac/Common/JsonMergeUtils.cs
index 46501846..5c7d2e2c 100644
--- a/src/DotNetStac/Common/JsonMergeUtils.cs
+++ b/src/DotNetStac/Common/JsonMergeUtils.cs
@@ -1,5 +1,8 @@
-using System;
-using System.Buffers;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: JsonMergeUtils.cs
+
+using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
@@ -11,15 +14,17 @@
namespace Stac.Common
{
+ ///
+ /// Utility class for merging JSON documents.
+ ///
public class JsonMergeUtils
{
-
///
/// Return the result of merging the original JSON document with the JSON Merge patch document
- /// according to https://tools.ietf.org/html/rfc7386
+ /// according to https://tools.ietf.org/html/rfc7386
///
- ///
- ///
+ /// Original JSON document to merge new content into.
+ /// JSON Merge patch document.
/// Writer options used to write the merge result.
/// The document that represents the merge result.
public static string Merge(string original, string patch, JsonWriterOptions? writerOptions = null)
@@ -30,7 +35,6 @@ public static string Merge(string original, string patch, JsonWriterOptions? wri
using (var patchDoc = JsonDocument.Parse(patch))
using (var jsonWriter = new Utf8JsonWriter(memStream, writerOptions ?? new JsonWriterOptions { Indented = true }))
{
-
var originalKind = originalDoc.RootElement.ValueKind;
var patchKind = patchDoc.RootElement.ValueKind;
@@ -52,21 +56,22 @@ public static string Merge(string original, string patch, JsonWriterOptions? wri
MergeObjects(jsonWriter, originalDoc.RootElement, patchDoc.RootElement);
}
-
return Encoding.UTF8.GetString(memStream.ToArray());
}
///
/// Return the result of merging the original JSON document with the JSON Merge patch document
- /// according to https://tools.ietf.org/html/rfc7386
+ /// according to https://tools.ietf.org/html/rfc7386
///
- ///
- ///
+ /// Original JSON document to merge new content into.
+ /// JSON Merge patch document.
+ /// Cancellation token.
/// Writer options used to write the merge result.
- public static async Task MergeAsync(string original, System.IO.Stream patch, CancellationToken token = default, JsonWriterOptions? writerOptions = null)
+ /// The document that represents the merge result.
+ public static async Task MergeAsync(string original, Stream patch, CancellationToken token = default, JsonWriterOptions? writerOptions = null)
{
var outputBuffer = new MemoryStream();
- var jsonDocumentOptions = new JsonDocumentOptions();
+ var jsonDocumentOptions = default(JsonDocumentOptions);
using (var originalDoc = JsonDocument.Parse(original, jsonDocumentOptions))
using (var patchDoc = await JsonDocument.ParseAsync(patch, jsonDocumentOptions, token))
using (var jsonWriter = new Utf8JsonWriter(outputBuffer, writerOptions ?? new JsonWriterOptions { Indented = true }))
@@ -100,12 +105,10 @@ public static async Task MergeAsync(string original, System.IO.Stream pa
///
/// Extract property names with a null value.
///
- /// Nested field names are returned joined by "."
+ /// Nested field names are returned joined by "."
/// Array items are ignored.
///
- ///
- ///
- /// Writer options used to write the merge result.
+ /// JSON Merge patch document.
/// The list of null properties.
public static List ExtractNullProperties(string patch)
{
@@ -121,17 +124,15 @@ public static List ExtractNullProperties(string patch)
///
/// Extract property names with a null value.
///
- /// Nested field names are returned joined by "."
+ /// Nested field names are returned joined by "."
/// Array items are ignored.
///
- ///
- ///
- /// Writer options used to write the merge result.
+ /// JSON Merge patch document.
/// Cancellation token.
/// The list of null properties.
- public static async Task> ExtractNullPropertiesAsync(System.IO.Stream patch, CancellationToken token = default)
+ public static async Task> ExtractNullPropertiesAsync(Stream patch, CancellationToken token = default)
{
- var patchDoc = await JsonDocument.ParseAsync(patch, new JsonDocumentOptions(), token);
+ var patchDoc = await JsonDocument.ParseAsync(patch, default(JsonDocumentOptions), token);
if (patchDoc.RootElement.ValueKind != JsonValueKind.Object)
{
throw new InvalidOperationException($"The patch JSON document must be an object type. Instead it is {patchDoc.RootElement.ValueKind}.");
@@ -145,8 +146,8 @@ public static async Task> ExtractNullPropertiesAsync(System.IO.Stre
/// to serialize and deserialize the model.
///
/// the model type
- ///
- ///
+ /// Original model to merge new content into.
+ /// JSON Merge patch document.
/// JSON serialization options
/// A new model representing the patched instance.
public static T MergeModel(T original, string patch, JsonSerializerOptions options = null)
@@ -159,14 +160,13 @@ public static T MergeModel(T original, string patch, JsonSerializerOptions op
/// Apply the result of a JSON merge patch to the given model, using System.Text.Json serializer
/// to serialize and deserialize the model.
///
- ///
/// the model type
- ///
- ///
+ /// Original model to merge new content into.
+ /// JSON Merge patch document.
/// JSON serialization options
/// Cancellation token
/// A task that returns a new model representing the patched instance.
- public static async Task MergeModelAsync(T original, System.IO.Stream patch, JsonSerializerOptions options = null, CancellationToken token = default)
+ public static async Task MergeModelAsync(T original, Stream patch, JsonSerializerOptions options = null, CancellationToken token = default)
{
var originalJson = JsonSerializer.Serialize(original, options);
return JsonSerializer.Deserialize(await MergeAsync(originalJson, patch, token), options);
@@ -174,7 +174,7 @@ public static async Task MergeModelAsync(T original, System.IO.Stream patc
private static IEnumerable ExtractNullPropertiesFromObject(JsonElement patch)
{
- Debug.Assert(patch.ValueKind == JsonValueKind.Object);
+ Debug.Assert(patch.ValueKind == JsonValueKind.Object, "The patch JSON document must be an object type.");
foreach (var property in patch.EnumerateObject())
{
if (property.Value.ValueKind == JsonValueKind.Null)
@@ -193,8 +193,8 @@ private static IEnumerable ExtractNullPropertiesFromObject(JsonElement p
private static void MergeObjects(Utf8JsonWriter jsonWriter, JsonElement original, JsonElement patch)
{
- Debug.Assert(original.ValueKind == JsonValueKind.Object);
- Debug.Assert(patch.ValueKind == JsonValueKind.Object);
+ Debug.Assert(original.ValueKind == JsonValueKind.Object, "The original JSON document to merge new content into must be an object type.");
+ Debug.Assert(patch.ValueKind == JsonValueKind.Object, "The patch JSON document must be an object type.");
jsonWriter.WriteStartObject();
diff --git a/src/DotNetStac/Common/Patch.cs b/src/DotNetStac/Common/Patch.cs
new file mode 100644
index 00000000..f6cdd42a
--- /dev/null
+++ b/src/DotNetStac/Common/Patch.cs
@@ -0,0 +1,15 @@
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: Patch.cs
+
+using System.Collections.Generic;
+
+namespace Stac.Common
+{
+ ///
+ /// Patch Object
+ ///
+ public class Patch : Dictionary
+ {
+ }
+}
diff --git a/src/DotNetStac/Common/PatchHelpers.cs b/src/DotNetStac/Common/PatchHelpers.cs
index 89ca9bd8..fa6cdaa1 100644
--- a/src/DotNetStac/Common/PatchHelpers.cs
+++ b/src/DotNetStac/Common/PatchHelpers.cs
@@ -1,13 +1,27 @@
-using System.Collections.Generic;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: PatchHelpers.cs
+
+using System.Collections.Generic;
using System.Linq;
-using GeoJSON.Net.Geometry;
using Newtonsoft.Json;
namespace Stac.Common
{
+ ///
+ /// Patch helpers
+ ///
public static class PatchHelpers
{
- public static T Patch(this T stacObject, IDictionary patch) where T : IStacObject
+ ///
+ /// Patches the specified stac object with a dictionary.
+ ///
+ /// The type of the stac object.
+ /// The stac object.
+ /// The patch.
+ /// The patched stac object.
+ public static T Patch(this T stacObject, IDictionary patch)
+ where T : IStacObject
{
var itemJson = StacConvert.Serialize(stacObject);
var patchJson = JsonConvert.SerializeObject(patch);
@@ -15,7 +29,15 @@ public static T Patch(this T stacObject, IDictionary patch) w
return StacConvert.Deserialize(patchedJson);
}
- public static T Patch(this T stacObject, IStacObject patch) where T : IStacObject
+ ///
+ /// Patches the specified stac object with another stac object.
+ ///
+ /// The type of the stac object.
+ /// The stac object.
+ /// The patch.
+ /// The patched stac object.
+ public static T Patch(this T stacObject, IStacObject patch)
+ where T : IStacObject
{
var itemJson = StacConvert.Serialize(stacObject);
var patchJson = StacConvert.Serialize(patch);
@@ -25,6 +47,7 @@ public static T Patch(this T stacObject, IStacObject patch) where T : IStacOb
{
patchdic.Remove("links");
}
+
return Patch(stacObject, patchdic);
}
}
diff --git a/src/DotNetStac/Common/PatchStacItem.cs b/src/DotNetStac/Common/PatchStacItem.cs
deleted file mode 100644
index e450a3bf..00000000
--- a/src/DotNetStac/Common/PatchStacItem.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-using System.Collections.Generic;
-
-namespace Stac.Common
-{
- public class Patch : Dictionary
- {
- }
-}
diff --git a/src/DotNetStac/Common/PropertyObservableCollection.cs b/src/DotNetStac/Common/PropertyObservableCollection.cs
index 76855cee..924c801e 100644
--- a/src/DotNetStac/Common/PropertyObservableCollection.cs
+++ b/src/DotNetStac/Common/PropertyObservableCollection.cs
@@ -1,27 +1,61 @@
-using System.Collections.Generic;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: PropertyObservableCollection.cs
+
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.Linq;
namespace Stac.Common
{
+#pragma warning disable SA1649 // File name should match first type name
+
+ ///
+ /// A collection that is observable and that is also stored in a as a property.
+ ///
+ /// The type of the elements in the collection.
public class PropertyObservableCollection : ObservableCollection
{
- public PropertyObservableCollection(IStacPropertiesContainer propertiesContainer, string key) : base()
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The properties container.
+ /// The property key.
+ public PropertyObservableCollection(IStacPropertiesContainer propertiesContainer, string key)
+ : base()
{
- PropertiesContainer = propertiesContainer;
- Key = key;
- this.CollectionChanged += ObservableCollectionInPropertiesChanged;
+ this.PropertiesContainer = propertiesContainer;
+ this.Key = key;
+ this.CollectionChanged += this.ObservableCollectionInPropertiesChanged;
}
+ ///
+ /// Gets the properties container.
+ ///
+ ///
+ /// The properties container.
+ ///
public IStacPropertiesContainer PropertiesContainer { get; }
+
+ ///
+ /// Gets the property key.
+ ///
+ ///
+ /// The property key.
+ ///
public string Key { get; }
private void ObservableCollectionInPropertiesChanged(object sender, NotifyCollectionChangedEventArgs e)
{
- PropertiesContainer.RemoveProperty(Key);
- if (this.Count == 0) return;
- PropertiesContainer.SetProperty(Key, this.ToList());
+ this.PropertiesContainer.RemoveProperty(this.Key);
+ if (this.Count == 0)
+ {
+ return;
+ }
+
+ this.PropertiesContainer.SetProperty(this.Key, this.ToList());
}
}
+
+#pragma warning restore SA1649 // File name should match first type name
}
diff --git a/src/DotNetStac/Common/Statistics.cs b/src/DotNetStac/Common/Statistics.cs
index e3b49be5..1518280f 100644
--- a/src/DotNetStac/Common/Statistics.cs
+++ b/src/DotNetStac/Common/Statistics.cs
@@ -1,4 +1,8 @@
-using System.Collections.Generic;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: Statistics.cs
+
+using System.Collections.Generic;
using Newtonsoft.Json;
namespace Stac.Common
@@ -9,63 +13,79 @@ namespace Stac.Common
[JsonObject(ItemNullValueHandling = NullValueHandling.Ignore)]
public class Statistics
{
- private IDictionary properties;
+ private IDictionary _properties;
///
- /// Initialize a new statistics object
+ /// Initializes a new instance of the class.
///
+ /// minimum value
+ /// maximum value
+ /// mean value
+ /// standard deviation
+ /// valid percentage
[JsonConstructor]
public Statistics(double? minimum, double? maximum, double? mean, double? stdev, double? validPercent)
{
- Mean = mean;
- Minimum = minimum;
- Maximum = maximum;
- Stdev = stdev;
- ValidPercent = validPercent;
- properties = new Dictionary();
+ this.Mean = mean;
+ this.Minimum = minimum;
+ this.Maximum = maximum;
+ this.Stdev = stdev;
+ this.ValidPercent = validPercent;
+ this._properties = new Dictionary();
}
///
- /// mean value
+ /// Gets or sets mean value
///
- ///
+ ///
+ /// Mean value
+ ///
[JsonProperty("mean")]
public double? Mean { get; set; }
///
- /// minimum value
+ /// Gets or sets minimum value
///
- ///
+ ///
+ /// Minimum value
+ ///
[JsonProperty("minimum")]
public double? Minimum { get; set; }
///
- /// maximum value
+ /// Gets or sets maximum value
///
- ///
+ ///
+ /// Maximum value
+ ///
[JsonProperty("maximum")]
public double? Maximum { get; set; }
///
- /// Standard Deviation
+ /// Gets or sets standard Deviation
///
- ///
+ ///
+ /// Standard Deviation
+ ///
[JsonProperty("stdev")]
public double? Stdev { get; set; }
///
- /// valid percentage
+ /// Gets or sets valid percentage
///
- ///
+ ///
+ /// Valid percentage
+ ///
[JsonProperty("valid_percent")]
public double? ValidPercent { get; set; }
///
- /// Additional fields
+ /// Gets or sets additional fields
///
- ///
+ ///
+ /// Additional fields
+ ///
[JsonExtensionData]
- public IDictionary Properties { get => properties; set => properties = value; }
-
+ public IDictionary Properties { get => this._properties; set => this._properties = value; }
}
}
diff --git a/src/DotNetStac/Common/TolerantEnumConverter.cs b/src/DotNetStac/Common/TolerantEnumConverter.cs
index a037f3da..3d359c97 100644
--- a/src/DotNetStac/Common/TolerantEnumConverter.cs
+++ b/src/DotNetStac/Common/TolerantEnumConverter.cs
@@ -1,21 +1,24 @@
-
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: TolerantEnumConverter.cs
+
using System;
using System.Linq;
using Newtonsoft.Json;
namespace Stac.Common
{
- class TolerantEnumConverter : JsonConverter
+ internal class TolerantEnumConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
- Type type = IsNullableType(objectType) ? Nullable.GetUnderlyingType(objectType) : objectType;
+ Type type = this.IsNullableType(objectType) ? Nullable.GetUnderlyingType(objectType) : objectType;
return type.IsEnum;
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
- bool isNullable = IsNullableType(objectType);
+ bool isNullable = this.IsNullableType(objectType);
Type enumType = isNullable ? Nullable.GetUnderlyingType(objectType) : objectType;
string[] names = Enum.GetNames(enumType);
@@ -70,7 +73,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
private bool IsNullableType(Type t)
{
- return (t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Nullable<>));
+ return t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Nullable<>);
}
}
}
diff --git a/src/DotNetStac/Converters/CollectionConverter.cs b/src/DotNetStac/Converters/CollectionConverter.cs
index a1d09e50..76d546d3 100644
--- a/src/DotNetStac/Converters/CollectionConverter.cs
+++ b/src/DotNetStac/Converters/CollectionConverter.cs
@@ -1,4 +1,8 @@
-using System;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: CollectionConverter.cs
+
+using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using Newtonsoft.Json;
@@ -6,13 +10,26 @@
namespace Stac.Converters
{
+#pragma warning disable SA1649 // File name should match first type name
+ ///
+ /// Converter for Collection
+ ///
+ /// Type of the collection
public class CollectionConverter : JsonConverter
{
+ ///
+ public override bool CanRead => true;
+
+ ///
+ public override bool CanWrite => true;
+
+ ///
public override bool CanConvert(Type objectType)
{
- return (objectType == typeof(Collection));
+ return objectType == typeof(Collection);
}
+ ///
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JToken token = JToken.Load(reader);
@@ -20,13 +37,11 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist
{
return new Collection(token.ToObject>());
}
+
return new Collection();
}
- public override bool CanRead => true;
-
- public override bool CanWrite => true;
-
+ ///
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
Collection collection = (Collection)value;
@@ -35,7 +50,9 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
{
serializer.Serialize(writer, item);
}
+
writer.WriteEndArray();
}
}
+#pragma warning restore SA1649 // File name should match first type name
}
diff --git a/src/DotNetStac/Converters/ContentTypeConverter.cs b/src/DotNetStac/Converters/ContentTypeConverter.cs
index 8679419a..14421ab1 100644
--- a/src/DotNetStac/Converters/ContentTypeConverter.cs
+++ b/src/DotNetStac/Converters/ContentTypeConverter.cs
@@ -1,6 +1,9 @@
-using System;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: ContentTypeConverter.cs
+
+using System;
using System.Collections.Generic;
-using System.Collections.Specialized;
using System.Linq;
using System.Net.Mime;
using Newtonsoft.Json;
@@ -11,7 +14,7 @@ internal class ContentTypeConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
- return (objectType == typeof(ContentType));
+ return objectType == typeof(ContentType);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
diff --git a/src/DotNetStac/Converters/SemVersionConverter.cs b/src/DotNetStac/Converters/SemVersionConverter.cs
index b73ec9aa..a5d210fe 100644
--- a/src/DotNetStac/Converters/SemVersionConverter.cs
+++ b/src/DotNetStac/Converters/SemVersionConverter.cs
@@ -1,4 +1,8 @@
-using System;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: SemVersionConverter.cs
+
+using System;
using Newtonsoft.Json;
using Semver;
@@ -8,7 +12,7 @@ internal class SemVersionConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
- return (objectType == typeof(SemVersion));
+ return objectType == typeof(SemVersion);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
diff --git a/src/DotNetStac/Converters/StacSummariesConverter.cs b/src/DotNetStac/Converters/StacSummariesConverter.cs
index c59de98c..642b3c09 100644
--- a/src/DotNetStac/Converters/StacSummariesConverter.cs
+++ b/src/DotNetStac/Converters/StacSummariesConverter.cs
@@ -1,8 +1,10 @@
-using System;
-using System.Collections;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: StacSummariesConverter.cs
+
+using System;
using System.Collections.Generic;
using System.Linq;
-using System.Net.Mime;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Stac.Collection;
@@ -13,7 +15,7 @@ internal class StacSummariesConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
- return (objectType == typeof(Dictionary));
+ return objectType == typeof(Dictionary);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
@@ -25,7 +27,7 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist
{
if (objDic[key] is JArray)
{
- JArray enumerable = (objDic[key] as JArray);
+ JArray enumerable = objDic[key] as JArray;
switch (enumerable.First().Type)
{
case JTokenType.Boolean:
@@ -48,9 +50,10 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist
break;
}
}
+
if (objDic[key] is JObject)
{
- JObject obj = (objDic[key] as JObject);
+ JObject obj = objDic[key] as JObject;
if (obj.ContainsKey("minimum") && obj.ContainsKey("maximum"))
{
switch (obj["minimum"].Type)
diff --git a/src/DotNetStac/DotNetStac.csproj b/src/DotNetStac/DotNetStac.csproj
index a66a326f..d2ea776d 100644
--- a/src/DotNetStac/DotNetStac.csproj
+++ b/src/DotNetStac/DotNetStac.csproj
@@ -4,7 +4,7 @@
DotNetStac
Terradue .Net library for working with any SpatioTemporal Asset Catalog
LICENSE
- 1.6.6
+ 1.7.0
Emmanuel Mathot
emmanuelmathot
Terradue
@@ -12,11 +12,12 @@
true
STAC;Terradue;Geo;Json
stac_logo_128.png
- Copyright (c) 2010-2021 by Terradue
+ Copyright (c) by Terradue Srl. All Rights Reserved.\nLicense under the AGPL, Version 3.0.
$(ProjectDir)StyleCop.ruleset
true
full
true
+ 1636;1200;1629;1309
diff --git a/src/DotNetStac/Exceptions/InvalidStacDataException.cs b/src/DotNetStac/Exceptions/InvalidStacDataException.cs
index f9ddc91d..bb64f279 100644
--- a/src/DotNetStac/Exceptions/InvalidStacDataException.cs
+++ b/src/DotNetStac/Exceptions/InvalidStacDataException.cs
@@ -1,24 +1,51 @@
-using System;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: InvalidStacDataException.cs
+
+using System;
using System.Runtime.Serialization;
namespace Stac.Exceptions
{
+ ///
+ /// Exception thrown when the STAC data is invalid
+ ///
[Serializable]
public class InvalidStacDataException : Exception
{
+ ///
+ /// Initializes a new instance of the class.
+ ///
public InvalidStacDataException()
{
}
- public InvalidStacDataException(string message) : base(message)
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The message that describes the error.
+ public InvalidStacDataException(string message)
+ : base(message)
{
}
- public InvalidStacDataException(string message, Exception innerException) : base(message, innerException)
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The message that describes the error.
+ /// The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.
+ public InvalidStacDataException(string message, Exception innerException)
+ : base(message, innerException)
{
}
- protected InvalidStacDataException(SerializationInfo info, StreamingContext context) : base(info, context)
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The that holds the serialized object data about the exception being thrown.
+ /// The that contains contextual information about the source or destination.
+ protected InvalidStacDataException(SerializationInfo info, StreamingContext context)
+ : base(info, context)
{
}
}
diff --git a/src/DotNetStac/Exceptions/InvalidStacSchemaException.cs b/src/DotNetStac/Exceptions/InvalidStacSchemaException.cs
index 862c86e7..2fd9dfdc 100644
--- a/src/DotNetStac/Exceptions/InvalidStacSchemaException.cs
+++ b/src/DotNetStac/Exceptions/InvalidStacSchemaException.cs
@@ -1,24 +1,51 @@
-using System;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: InvalidStacSchemaException.cs
+
+using System;
using System.Runtime.Serialization;
namespace Stac.Exceptions
{
+ ///
+ /// Exception thrown when the STAC schema is invalid
+ ///
[Serializable]
public class InvalidStacSchemaException : Exception
{
+ ///
+ /// Initializes a new instance of the class.
+ ///
public InvalidStacSchemaException()
{
}
- public InvalidStacSchemaException(string message) : base(message)
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The message that describes the error.
+ public InvalidStacSchemaException(string message)
+ : base(message)
{
}
- public InvalidStacSchemaException(string message, Exception innerException) : base(message, innerException)
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The message that describes the error.
+ /// The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.
+ public InvalidStacSchemaException(string message, Exception innerException)
+ : base(message, innerException)
{
}
- protected InvalidStacSchemaException(SerializationInfo info, StreamingContext context) : base(info, context)
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The that holds the serialized object data about the exception being thrown.
+ /// The that contains contextual information about the source or destination.
+ protected InvalidStacSchemaException(SerializationInfo info, StreamingContext context)
+ : base(info, context)
{
}
}
diff --git a/src/DotNetStac/Extensions/Alternate/AlternateAssetObject.cs b/src/DotNetStac/Extensions/Alternate/AlternateAssetObject.cs
index f1a0f64f..98f7cf43 100644
--- a/src/DotNetStac/Extensions/Alternate/AlternateAssetObject.cs
+++ b/src/DotNetStac/Extensions/Alternate/AlternateAssetObject.cs
@@ -1,4 +1,8 @@
-using System;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: AlternateAssetObject.cs
+
+using System;
using System.Collections.Generic;
using Newtonsoft.Json;
@@ -11,16 +15,15 @@ namespace Stac.Extensions.Alternate
[JsonObject(ItemNullValueHandling = NullValueHandling.Ignore)]
public class AlternateAssetObject : IStacPropertiesContainer
{
- private string href;
private readonly IStacObject _parent;
- private string title;
-
- private string description;
+ private string _href;
+ private string _title;
- IDictionary properties;
+ private string _description;
+ private IDictionary _properties;
///
- /// Initialize a new Band Object
+ /// Initializes a new instance of the class.
///
/// URI to the asset object
/// Parent object
@@ -28,51 +31,74 @@ public class AlternateAssetObject : IStacPropertiesContainer
/// A description of the Asset providing additional details, such as how it was processed or created. CommonMark 0.29 syntax MAY be used for rich text representation.
public AlternateAssetObject(string href, IStacObject parent = null, string title = null, string description = null)
{
- this.href = href;
- _parent = parent;
- this.title = title;
- this.description = description;
- properties = new Dictionary();
+ this._href = href;
+ this._parent = parent;
+ this._title = title;
+ this._description = description;
+ this._properties = new Dictionary();
}
///
- /// REQUIRED. URI to the asset object. Relative and absolute URI are both allowed.
+ /// Gets or sets rEQUIRED. URI to the asset object. Relative and absolute URI are both allowed.
///
+ ///
+ /// REQUIRED. URI to the asset object. Relative and absolute URI are both allowed.
+ ///
[JsonProperty("href")]
[JsonRequired]
- public string Href { get => href; set => href = value; }
+ public string Href { get => this._href; set => this._href = value; }
///
- /// The displayed title for clients and users.
+ /// Gets or sets the displayed title for clients and users.
///
+ ///
+ /// The displayed title for clients and users.
+ ///
[JsonProperty("title")]
- public string Title { get => title; set => title = value; }
+ public string Title { get => this._title; set => this._title = value; }
///
- /// A description of the Asset providing additional details, such as how it was processed or created. CommonMark 0.29 syntax MAY be used for rich text representation.
+ /// Gets or sets a description of the Asset providing additional details, such as how it was processed or created. CommonMark 0.29 syntax MAY be used for rich text representation.
///
+ ///
+ /// A description of the Asset providing additional details, such as how it was processed or created. CommonMark 0.29 syntax MAY be used for rich text representation.
+ ///
[JsonProperty("description")]
- public string Description { get => description; set => description = value; }
+ public string Description { get => this._description; set => this._description = value; }
///
- /// Additional fields
+ /// Gets or sets additional fields
///
- ///
+ ///
+ /// Additional fields
+ ///
[JsonExtensionData]
- public IDictionary Properties { get => properties; set => properties = value; }
+ public IDictionary Properties { get => this._properties; set => this._properties = value; }
///
- /// Parent Stac Object
+ /// Gets parent Stac Object
///
- ///
+ ///
+ /// Parent Stac Object
+ ///
+
+ ///
+ /// Parent Stac Object
+ ///
[JsonIgnore]
- public IStacObject StacObjectContainer => _parent;
+ public IStacObject StacObjectContainer => this._parent;
///
- /// Uri
+ /// Gets uri
///
- ///
+ ///
+ /// Uri
+ ///
+
+ ///
+ /// Uri
+ ///
[JsonIgnore]
- public Uri Uri => new Uri(href);
+ public Uri Uri => new Uri(this._href);
}
}
diff --git a/src/DotNetStac/Extensions/Alternate/AlternateStacExtension.cs b/src/DotNetStac/Extensions/Alternate/AlternateStacExtension.cs
index 55fd35c7..0231b33a 100644
--- a/src/DotNetStac/Extensions/Alternate/AlternateStacExtension.cs
+++ b/src/DotNetStac/Extensions/Alternate/AlternateStacExtension.cs
@@ -1,7 +1,10 @@
-using System;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: AlternateStacExtension.cs
+
+using System;
using System.Collections.Generic;
using System.Linq;
-using Stac.Extensions.Storage;
namespace Stac.Extensions.Alternate
{
@@ -10,83 +13,81 @@ namespace Stac.Extensions.Alternate
///
public class AlternateStacExtension : StacPropertiesContainerExtension, IStacAssetExtension, IStacExtension
{
- /// Extension identifier and schema url
+#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member
public const string JsonSchemaUrl = "https://stac-extensions.github.io/alternate-assets/v1.1.0/schema.json";
private const string AlternateField = "alternate";
+#pragma warning restore CS1591 // Missing XML comment for publicly visible type or member
- private static IDictionary assetFields;
+ private readonly IDictionary _assetFields;
- internal AlternateStacExtension(StacAsset stacAsset) : base(JsonSchemaUrl, stacAsset)
+ internal AlternateStacExtension(StacAsset stacAsset)
+ : base(JsonSchemaUrl, stacAsset)
{
- assetFields = new Dictionary();
- assetFields.Add(AlternateField, typeof(AlternateAssetObject[]));
+ this._assetFields = new Dictionary();
+ this._assetFields.Add(AlternateField, typeof(AlternateAssetObject[]));
}
///
- /// A dictionary of alternate location information for an asset.
+ /// Gets or sets a dictionary of alternate location information for an asset.
///
+ ///
+ /// A dictionary of alternate location information for an asset.
+ ///
public IDictionary AlternateAssets
{
- get { return StacPropertiesContainer.GetProperty>(AlternateField); }
+ get
+ {
+ return this.StacPropertiesContainer.GetProperty>(AlternateField);
+ }
+
set
{
if (value == null || value.Count() == 0)
- StacPropertiesContainer.RemoveProperty(AlternateField);
+ {
+ this.StacPropertiesContainer.RemoveProperty(AlternateField);
+ }
else
{
- StacPropertiesContainer.SetProperty(AlternateField, value);
- DeclareStacExtension();
+ this.StacPropertiesContainer.SetProperty(AlternateField, value);
+ this.DeclareStacExtension();
}
}
}
///
- /// Potential fields and their types
+ /// Gets potential fields and their types
///
- public override IDictionary ItemFields => assetFields;
+ ///
+ /// Potential fields and their types
+ ///
+ public override IDictionary ItemFields => this._assetFields;
- public StacAsset StacAsset => StacPropertiesContainer as StacAsset;
+ ///
+ public StacAsset StacAsset => this.StacPropertiesContainer as StacAsset;
+ ///
public override IDictionary GetSummaryFunctions()
{
Dictionary summaryFunctions = new Dictionary();
return summaryFunctions;
}
+ ///
+ /// Adds an alternate asset to the AlternateAssets dictionary
+ ///
+ /// The key of the alternate asset
+ /// The uri of the alternate asset
+ /// The title of the alternate asset
+ /// The description of the alternate asset
+ /// The alternate asset object
public AlternateAssetObject AddAlternate(string key, Uri uri, string title = null, string description = null)
{
- AlternateAssetObject alternateAssetObject = new AlternateAssetObject(uri.ToString(), StacAsset.ParentStacObject, title, description);
- var alternateAssets = AlternateAssets ?? new Dictionary();
+ AlternateAssetObject alternateAssetObject = new AlternateAssetObject(uri.ToString(), this.StacAsset.ParentStacObject, title, description);
+ var alternateAssets = this.AlternateAssets ?? new Dictionary();
alternateAssets.Add(key, alternateAssetObject);
- AlternateAssets = alternateAssets;
+ this.AlternateAssets = alternateAssets;
return alternateAssetObject;
}
-
-
-
- }
-
- ///
- /// Extension methods for accessing Alternate extension
- ///
- public static class AlternateStacExtensionExtensions
- {
-
- ///
- /// Initilize a AlternateStacExtension class from a STAC asset
- ///
- public static AlternateStacExtension AlternateExtension(this StacAsset stacAsset)
- {
- return new AlternateStacExtension(stacAsset);
- }
-
- ///
- /// Initilize a AlternateStacExtension class from an alternate asset
- ///
- public static StorageStacExtension StorageExtension(this AlternateAssetObject alternateAssetObject)
- {
- return new StorageStacExtension(alternateAssetObject);
- }
}
}
diff --git a/src/DotNetStac/Extensions/Alternate/AlternateStacExtensionExtensions.cs b/src/DotNetStac/Extensions/Alternate/AlternateStacExtensionExtensions.cs
new file mode 100644
index 00000000..fe425a23
--- /dev/null
+++ b/src/DotNetStac/Extensions/Alternate/AlternateStacExtensionExtensions.cs
@@ -0,0 +1,34 @@
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: AlternateStacExtensionExtensions.cs
+
+using Stac.Extensions.Storage;
+
+namespace Stac.Extensions.Alternate
+{
+ ///
+ /// Extension methods for accessing Alternate extension
+ ///
+ public static class AlternateStacExtensionExtensions
+ {
+ ///
+ /// Initilize a AlternateStacExtension class from a STAC asset
+ ///
+ /// The STAC asset.
+ /// The AlternateStacExtension class
+ public static AlternateStacExtension AlternateExtension(this StacAsset stacAsset)
+ {
+ return new AlternateStacExtension(stacAsset);
+ }
+
+ ///
+ /// Initilize a AlternateStacExtension class from an alternate asset
+ ///
+ /// The alternate asset.
+ /// The AlternateStacExtension class
+ public static StorageStacExtension StorageExtension(this AlternateAssetObject alternateAssetObject)
+ {
+ return new StorageStacExtension(alternateAssetObject);
+ }
+ }
+}
diff --git a/src/DotNetStac/Extensions/Datacube/DatacubeAxis.cs b/src/DotNetStac/Extensions/Datacube/DatacubeAxis.cs
index 6d45a126..d25d99d2 100644
--- a/src/DotNetStac/Extensions/Datacube/DatacubeAxis.cs
+++ b/src/DotNetStac/Extensions/Datacube/DatacubeAxis.cs
@@ -1,15 +1,28 @@
-using Newtonsoft.Json;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: DatacubeAxis.cs
+
+using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
namespace Stac.Extensions.Datacube
{
+ ///
+ /// Datacube axis
+ ///
[JsonConverter(typeof(StringEnumConverter))]
public enum DatacubeAxis
{
+#pragma warning disable SA1300 // Element should begin with upper-case letter
+#pragma warning disable SA1602 // EnumerationItemsMustBeDocumented
+#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member
x,
y,
- z
+ z,
+#pragma warning restore CS1591 // Missing XML comment for publicly visible type or member
+#pragma warning restore SA1602 // EnumerationItemsMustBeDocumented
+#pragma warning restore SA1300 // Element should begin with upper-case letter
}
}
diff --git a/src/DotNetStac/Extensions/Datacube/DatacubeDimension.cs b/src/DotNetStac/Extensions/Datacube/DatacubeDimension.cs
new file mode 100644
index 00000000..91feecd0
--- /dev/null
+++ b/src/DotNetStac/Extensions/Datacube/DatacubeDimension.cs
@@ -0,0 +1,90 @@
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: DatacubeDimension.cs
+
+using System.Collections.Generic;
+using Newtonsoft.Json;
+
+namespace Stac.Extensions.Datacube
+{
+ ///
+ /// Represents the Dimension Object
+ /// of the Datacube extension
+ ///
+ [JsonObject(ItemNullValueHandling = NullValueHandling.Ignore)]
+ public class DatacubeDimension : IStacPropertiesContainer
+ {
+ private string _type;
+ private string _description;
+ private double[] _extent;
+ private object _values;
+ private double? _step;
+ private IDictionary _properties;
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public DatacubeDimension()
+ {
+ this._properties = new Dictionary();
+ }
+
+ ///
+ /// Gets or sets type of the dimension.
+ ///
+ ///
+ /// Type of the dimension.
+ ///
+ [JsonProperty("type")]
+ public string Type { get => this._type; set => this._type = value; }
+
+ ///
+ /// Gets or sets detailed multi-line description to explain the dimension. CommonMark 0.29 syntax MAY be used for rich text representation.
+ ///
+ ///
+ /// Detailed multi-line description to explain the dimension. CommonMark 0.29 syntax MAY be used for rich text representation.
+ ///
+ [JsonProperty("description")]
+ public string Description { get => this._description; set => this._description = value; }
+
+ ///
+ /// Gets or sets extent (lower and upper bounds) of the dimension as two-element array. Open intervals with null are not allowed.
+ ///
+ ///
+ /// Extent (lower and upper bounds) of the dimension as two-element array. Open intervals with null are not allowed.
+ ///
+ [JsonProperty("extent")]
+ public double[] Extent { get => this._extent; set => this._extent = value; }
+
+ ///
+ /// Gets or sets optionally, an ordered list of all values.
+ ///
+ ///
+ /// Optionally, an ordered list of all values.
+ ///
+ [JsonProperty("values")]
+ public object Values { get => this._values; set => this._values = value; }
+
+ ///
+ /// Gets or sets the space between the values. Use null for irregularly spaced steps.
+ ///
+ ///
+ /// The space between the values. Use null for irregularly spaced steps.
+ ///
+ [JsonProperty("step")]
+ public double? Step { get => this._step; set => this._step = value; }
+
+ ///
+ /// Gets or sets additional fields
+ ///
+ ///
+ /// Additional fields
+ ///
+ [JsonExtensionData]
+ public IDictionary Properties { get => this._properties; set => this._properties = value; }
+
+ ///
+ [JsonIgnore]
+ public IStacObject StacObjectContainer => null;
+ }
+}
diff --git a/src/DotNetStac/Extensions/Datacube/DatacubeDimensionAdditional.cs b/src/DotNetStac/Extensions/Datacube/DatacubeDimensionAdditional.cs
new file mode 100644
index 00000000..34c0caa4
--- /dev/null
+++ b/src/DotNetStac/Extensions/Datacube/DatacubeDimensionAdditional.cs
@@ -0,0 +1,37 @@
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: DatacubeDimensionAdditional.cs
+
+using Newtonsoft.Json;
+
+namespace Stac.Extensions.Datacube
+{
+ ///
+ /// Datacube additional dimension
+ ///
+ public class DatacubeDimensionAdditional : DatacubeDimension
+ {
+ private object _reference_system;
+ private string _unit;
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public DatacubeDimensionAdditional()
+ : base()
+ {
+ }
+
+ ///
+ /// Gets or sets the unit of measurement for the data, preferably compliant to UDUNITS-2 units (singular).
+ ///
+ [JsonProperty("unit")]
+ public string Unit { get => this._unit; set => this._unit = value; }
+
+ ///
+ /// Gets or sets the spatial reference system for the data, specified as numerical EPSG code , WKT2 (ISO 19162) string or PROJJSON object . Defaults to EPSG code 4326.
+ ///
+ [JsonProperty("reference_system")]
+ public object ReferenceSystem { get => this._reference_system; set => this._reference_system = value; }
+ }
+}
diff --git a/src/DotNetStac/Extensions/Datacube/DatacubeDimensionObject.cs b/src/DotNetStac/Extensions/Datacube/DatacubeDimensionObject.cs
deleted file mode 100644
index 9c74794f..00000000
--- a/src/DotNetStac/Extensions/Datacube/DatacubeDimensionObject.cs
+++ /dev/null
@@ -1,147 +0,0 @@
-using System.Collections.Generic;
-using Newtonsoft.Json;
-using Newtonsoft.Json.Converters;
-using Stac.Common;
-
-namespace Stac.Extensions.Datacube
-{
- ///
- /// Represents the Dimension Object
- /// of the Datacube extension
- ///
- [JsonObject(ItemNullValueHandling = NullValueHandling.Ignore)]
- public class DatacubeDimension : IStacPropertiesContainer
- {
- IDictionary properties;
- protected string type;
- protected string description;
- protected double[] extent;
- protected object values;
- protected double? step;
-
- ///
- /// Type of the dimension.
- ///
- [JsonProperty("type")]
- public string Type { get => type; set => type = value; }
-
- ///
- /// Detailed multi-line description to explain the dimension. CommonMark 0.29 syntax MAY be used for rich text representation.
- ///
- [JsonProperty("description")]
- public string Description { get => description; set => description = value; }
-
- ///
- /// Extent (lower and upper bounds) of the dimension as two-element array. Open intervals with null are not allowed.
- ///
- [JsonProperty("extent")]
- public double[] Extent { get => extent; set => extent = value; }
-
- ///
- /// Optionally, an ordered list of all values.
- ///
- [JsonProperty("values")]
- public object Values { get => values; set => values = value; }
-
- ///
- /// The space between the values. Use null for irregularly spaced steps.
- ///
- [JsonProperty("step")]
- public double? Step { get => step; set => step = value; }
-
- ///
- /// Additional fields
- ///
- ///
- [JsonExtensionData]
- public IDictionary Properties { get => properties; set => properties = value; }
-
- [JsonIgnore]
- public IStacObject StacObjectContainer => null;
-
-
- public DatacubeDimension()
- {
- properties = new Dictionary();
- }
- }
-
- public class DatacubeDimensionSpatial : DatacubeDimension
- {
- protected DatacubeAxis? axis;
- protected object reference_system;
-
- ///
- /// Axis of the spatial dimension.
- ///
- [JsonProperty("axis")]
- public DatacubeAxis? Axis { get => axis; set => axis = value; }
-
- ///
- /// The spatial reference system for the data, specified as numerical EPSG code , WKT2 (ISO 19162) string or PROJJSON object . Defaults to EPSG code 4326.
- ///
- [JsonProperty("reference_system")]
- public object ReferenceSystem { get => reference_system; set => reference_system = value; }
-
- public DatacubeDimensionSpatial() : base()
- {
- }
- }
-
- public class DatacubeDimensionSpatialHorizontal : DatacubeDimensionSpatial
- {
- public DatacubeDimensionSpatialHorizontal() : base()
- {
- base.axis = DatacubeAxis.x;
- }
- }
-
- public class DatacubeDimensionSpatialVertical : DatacubeDimensionSpatial
- {
- private string unit;
-
- ///
- /// The unit of measurement for the data, preferably compliant to UDUNITS-2 units (singular).
- ///
- [JsonProperty("unit")]
- public string Unit { get => unit; set => unit = value; }
-
- public DatacubeDimensionSpatialVertical() : base()
- {
- base.axis = DatacubeAxis.z;
- }
- }
-
- public class DatacubeDimensionTemporal : DatacubeDimension
- {
-
- public DatacubeDimensionTemporal() : base()
- {
-
- }
- }
-
- public class DatacubeDimensionAdditional : DatacubeDimension
- {
-
- private string unit;
- protected object reference_system;
-
- ///
- /// The unit of measurement for the data, preferably compliant to UDUNITS-2 units (singular).
- ///
- [JsonProperty("unit")]
- public string Unit { get => unit; set => unit = value; }
-
- ///
- /// The spatial reference system for the data, specified as numerical EPSG code , WKT2 (ISO 19162) string or PROJJSON object . Defaults to EPSG code 4326.
- ///
- [JsonProperty("reference_system")]
- public object ReferenceSystem { get => reference_system; set => reference_system = value; }
-
- public DatacubeDimensionAdditional() : base()
- {
-
- }
- }
-}
diff --git a/src/DotNetStac/Extensions/Datacube/DatacubeDimensionSpatial.cs b/src/DotNetStac/Extensions/Datacube/DatacubeDimensionSpatial.cs
new file mode 100644
index 00000000..d7547663
--- /dev/null
+++ b/src/DotNetStac/Extensions/Datacube/DatacubeDimensionSpatial.cs
@@ -0,0 +1,43 @@
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: DatacubeDimensionSpatial.cs
+
+using Newtonsoft.Json;
+
+namespace Stac.Extensions.Datacube
+{
+ ///
+ /// Datacube spatial dimension
+ ///
+ public class DatacubeDimensionSpatial : DatacubeDimension
+ {
+ private DatacubeAxis? _axis;
+ private object _reference_system;
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public DatacubeDimensionSpatial()
+ : base()
+ {
+ }
+
+ ///
+ /// Gets or sets axis of the spatial dimension.
+ ///
+ ///
+ /// Axis of the spatial dimension.
+ ///
+ [JsonProperty("axis")]
+ public DatacubeAxis? Axis { get => this._axis; set => this._axis = value; }
+
+ ///
+ /// Gets or sets the spatial reference system for the data, specified as numerical EPSG code , WKT2 (ISO 19162) string or PROJJSON object . Defaults to EPSG code 4326.
+ ///
+ ///
+ /// The spatial reference system for the data, specified as numerical EPSG code , WKT2 (ISO 19162) string or PROJJSON object . Defaults to EPSG code 4326.
+ ///
+ [JsonProperty("reference_system")]
+ public object ReferenceSystem { get => this._reference_system; set => this._reference_system = value; }
+ }
+}
diff --git a/src/DotNetStac/Extensions/Datacube/DatacubeDimensionSpatialHorizontal.cs b/src/DotNetStac/Extensions/Datacube/DatacubeDimensionSpatialHorizontal.cs
new file mode 100644
index 00000000..8ee25ea4
--- /dev/null
+++ b/src/DotNetStac/Extensions/Datacube/DatacubeDimensionSpatialHorizontal.cs
@@ -0,0 +1,21 @@
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: DatacubeDimensionSpatialHorizontal.cs
+
+namespace Stac.Extensions.Datacube
+{
+ ///
+ /// Datacube horizontal spatial dimension
+ ///
+ public class DatacubeDimensionSpatialHorizontal : DatacubeDimensionSpatial
+ {
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public DatacubeDimensionSpatialHorizontal()
+ : base()
+ {
+ this.Axis = DatacubeAxis.x;
+ }
+ }
+}
diff --git a/src/DotNetStac/Extensions/Datacube/DatacubeDimensionSpatialVertical.cs b/src/DotNetStac/Extensions/Datacube/DatacubeDimensionSpatialVertical.cs
new file mode 100644
index 00000000..d943d21c
--- /dev/null
+++ b/src/DotNetStac/Extensions/Datacube/DatacubeDimensionSpatialVertical.cs
@@ -0,0 +1,34 @@
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: DatacubeDimensionSpatialVertical.cs
+
+using Newtonsoft.Json;
+
+namespace Stac.Extensions.Datacube
+{
+ ///
+ /// Datacube vertical spatial dimension
+ ///
+ public class DatacubeDimensionSpatialVertical : DatacubeDimensionSpatial
+ {
+ private string _unit;
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public DatacubeDimensionSpatialVertical()
+ : base()
+ {
+ this.Axis = DatacubeAxis.z;
+ }
+
+ ///
+ /// Gets or sets the unit of measurement for the data, preferably compliant to UDUNITS-2 units (singular).
+ ///
+ ///
+ /// The unit of measurement for the data, preferably compliant to UDUNITS-2 units (singular).
+ ///
+ [JsonProperty("unit")]
+ public string Unit { get => this._unit; set => this._unit = value; }
+ }
+}
diff --git a/src/DotNetStac/Extensions/Datacube/DatacubeDimensionTemporal.cs b/src/DotNetStac/Extensions/Datacube/DatacubeDimensionTemporal.cs
new file mode 100644
index 00000000..769cb54e
--- /dev/null
+++ b/src/DotNetStac/Extensions/Datacube/DatacubeDimensionTemporal.cs
@@ -0,0 +1,20 @@
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: DatacubeDimensionTemporal.cs
+
+namespace Stac.Extensions.Datacube
+{
+ ///
+ /// Datacube temporal dimension
+ ///
+ public class DatacubeDimensionTemporal : DatacubeDimension
+ {
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public DatacubeDimensionTemporal()
+ : base()
+ {
+ }
+ }
+}
diff --git a/src/DotNetStac/Extensions/Datacube/DatacubeDimensionType.cs b/src/DotNetStac/Extensions/Datacube/DatacubeDimensionType.cs
index f017ad81..80fe57a4 100644
--- a/src/DotNetStac/Extensions/Datacube/DatacubeDimensionType.cs
+++ b/src/DotNetStac/Extensions/Datacube/DatacubeDimensionType.cs
@@ -1,13 +1,26 @@
-using Newtonsoft.Json;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: DatacubeDimensionType.cs
+
+using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
namespace Stac.Extensions.Datacube
{
+ ///
+ /// Datacube dimension type
+ ///
[JsonConverter(typeof(StringEnumConverter))]
public enum DatacubeDimensionType
{
+#pragma warning disable SA1300 // Element should begin with upper-case letter
+#pragma warning disable SA1602 // EnumerationItemsMustBeDocumented
+#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member
spatial,
- temporal
+ temporal,
+#pragma warning restore CS1591 // Missing XML comment for publicly visible type or member
+#pragma warning restore SA1602 // EnumerationItemsMustBeDocumented
+#pragma warning restore SA1300 // Element should begin with upper-case letter
}
}
diff --git a/src/DotNetStac/Extensions/Datacube/DatacubeStacExtension.cs b/src/DotNetStac/Extensions/Datacube/DatacubeStacExtension.cs
index f2eb589b..d5de6e16 100644
--- a/src/DotNetStac/Extensions/Datacube/DatacubeStacExtension.cs
+++ b/src/DotNetStac/Extensions/Datacube/DatacubeStacExtension.cs
@@ -1,7 +1,10 @@
-using System;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: DatacubeStacExtension.cs
+
+using System;
using System.Collections.Generic;
using System.Collections.Specialized;
-using System.Linq;
using Stac.Model;
namespace Stac.Extensions.Datacube
@@ -11,120 +14,131 @@ namespace Stac.Extensions.Datacube
///
public class DatacubeStacExtension : StacPropertiesContainerExtension, IStacExtension
{
- /// Extensions identifier and schema url
+#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member
public const string JsonSchemaUrl = "https://stac-extensions.github.io/datacube/v2.1.0/schema.json";
- private static IDictionary itemFields;
private const string DimensionField = "cube:dimensions";
private const string VariableField = "cube:variables";
+#pragma warning restore CS1591 // Missing XML comment for publicly visible type or member
+
+ private readonly IDictionary _itemFields;
- private DatacubeStacExtension(IStacPropertiesContainer stacPropertiesContainer) : base(JsonSchemaUrl, stacPropertiesContainer)
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The stac collection.
+ internal DatacubeStacExtension(StacCollection stacCollection)
+ : this((IStacPropertiesContainer)stacCollection)
{
- itemFields = new Dictionary();
- itemFields.Add(DimensionField, typeof(IDictionary));
- itemFields.Add(VariableField, typeof(IDictionary));
}
- internal DatacubeStacExtension(StacCollection stacCollection) : this((IStacPropertiesContainer)stacCollection)
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The stac asset.
+ internal DatacubeStacExtension(StacAsset stacAsset)
+ : this((IStacPropertiesContainer)stacAsset)
{
}
- internal DatacubeStacExtension(StacAsset stacAsset) : this((IStacPropertiesContainer)stacAsset)
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The stac item.
+ internal DatacubeStacExtension(StacItem stacItem)
+ : this((IStacPropertiesContainer)stacItem)
{
}
- internal DatacubeStacExtension(StacItem stacItem) : this((IStacPropertiesContainer)stacItem)
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The stac properties container.
+ private DatacubeStacExtension(IStacPropertiesContainer stacPropertiesContainer)
+ : base(JsonSchemaUrl, stacPropertiesContainer)
{
+ this._itemFields = new Dictionary();
+ this._itemFields.Add(DimensionField, typeof(IDictionary));
+ this._itemFields.Add(VariableField, typeof(IDictionary));
}
///
- /// A dictionary of available dimensions where each object is a DatacubeDimension Object.
+ /// Gets a dictionary of available dimensions where each object is a DatacubeDimension Object.
///
+ ///
+ /// A dictionary of available dimensions where each object is a DatacubeDimension Object.
+ ///
public IDictionary Dimensions
{
get
{
- Dictionary existingDimensions = StacPropertiesContainer.GetProperty>(DimensionField);
+ Dictionary existingDimensions = this.StacPropertiesContainer.GetProperty>(DimensionField);
ObservableDictionary dimensions = null;
if (existingDimensions == null)
+ {
dimensions = new ObservableDictionary();
+ }
else
+ {
dimensions = new ObservableDictionary(existingDimensions);
- dimensions.CollectionChanged += UpdateDimensionField;
+ }
+
+ dimensions.CollectionChanged += this.UpdateDimensionField;
return dimensions;
}
}
- private void UpdateDimensionField(object sender, NotifyCollectionChangedEventArgs e)
- {
- StacPropertiesContainer.SetProperty(DimensionField, new Dictionary(sender as IDictionary));
- DeclareStacExtension();
- }
-
///
- /// A dictionary of available variables where each object is a DatacubeVariable Object.
+ /// Gets a dictionary of available variables where each object is a DatacubeVariable Object.
///
+ ///
+ /// A dictionary of available variables where each object is a DatacubeVariable Object.
+ ///
public IDictionary Variables
{
get
{
- Dictionary existingVariables = StacPropertiesContainer.GetProperty>(VariableField);
+ Dictionary existingVariables = this.StacPropertiesContainer.GetProperty>(VariableField);
ObservableDictionary variables = null;
if (existingVariables == null)
+ {
variables = new ObservableDictionary();
+ }
else
+ {
variables = new ObservableDictionary(existingVariables);
- variables.CollectionChanged += UpdateVariableField;
+ }
+
+ variables.CollectionChanged += this.UpdateVariableField;
return variables;
}
}
- private void UpdateVariableField(object sender, NotifyCollectionChangedEventArgs e)
- {
- StacPropertiesContainer.SetProperty(VariableField, new Dictionary(sender as IDictionary));
- DeclareStacExtension();
- }
-
///
- /// Potential fields and their types
+ /// Gets potential fields and their types
///
- public override IDictionary ItemFields => itemFields;
+ ///
+ /// Potential fields and their types
+ ///
+ public override IDictionary ItemFields => this._itemFields;
+ ///
public override IDictionary GetSummaryFunctions()
{
Dictionary summaryFunctions = new Dictionary();
return summaryFunctions;
}
- }
- ///
- /// Extension methods for accessing EO extension
- ///
- public static class DatacubeStacExtensionExtensions
- {
-
- ///
- /// Initilize a DatacubeStacExtension class from a STAC asset
- ///
- public static DatacubeStacExtension DatacubeStacExtension(this StacAsset stacAsset)
- {
- return new DatacubeStacExtension(stacAsset);
- }
-
- ///
- /// Initilize a DatacubeStacExtension class from a STAC item
- ///
- public static DatacubeStacExtension DatacubeStacExtension(this StacItem stacItem)
+ private void UpdateDimensionField(object sender, NotifyCollectionChangedEventArgs e)
{
- return new DatacubeStacExtension(stacItem);
+ this.StacPropertiesContainer.SetProperty(DimensionField, new Dictionary(sender as IDictionary));
+ this.DeclareStacExtension();
}
- ///
- /// Initilize a DatacubeStacExtension class from a STAC collection
- ///
- public static DatacubeStacExtension DatacubeStacExtension(this StacCollection stacCollection)
+ private void UpdateVariableField(object sender, NotifyCollectionChangedEventArgs e)
{
- return new DatacubeStacExtension(stacCollection);
+ this.StacPropertiesContainer.SetProperty(VariableField, new Dictionary(sender as IDictionary));
+ this.DeclareStacExtension();
}
}
}
diff --git a/src/DotNetStac/Extensions/Datacube/DatacubeStacExtensionExtensions.cs b/src/DotNetStac/Extensions/Datacube/DatacubeStacExtensionExtensions.cs
new file mode 100644
index 00000000..f38b0a7b
--- /dev/null
+++ b/src/DotNetStac/Extensions/Datacube/DatacubeStacExtensionExtensions.cs
@@ -0,0 +1,42 @@
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: DatacubeStacExtensionExtensions.cs
+
+namespace Stac.Extensions.Datacube
+{
+ ///
+ /// Extension methods for accessing EO extension
+ ///
+ public static class DatacubeStacExtensionExtensions
+ {
+ ///
+ /// Initilize a DatacubeStacExtension class from a STAC asset
+ ///
+ /// The STAC asset.
+ /// The DatacubeStacExtension class
+ public static DatacubeStacExtension DatacubeStacExtension(this StacAsset stacAsset)
+ {
+ return new DatacubeStacExtension(stacAsset);
+ }
+
+ ///
+ /// Initilize a DatacubeStacExtension class from a STAC item
+ ///
+ /// The STAC item.
+ /// The DatacubeStacExtension class
+ public static DatacubeStacExtension DatacubeStacExtension(this StacItem stacItem)
+ {
+ return new DatacubeStacExtension(stacItem);
+ }
+
+ ///
+ /// Initilize a DatacubeStacExtension class from a STAC collection
+ ///
+ /// The STAC collection.
+ /// The DatacubeStacExtension class
+ public static DatacubeStacExtension DatacubeStacExtension(this StacCollection stacCollection)
+ {
+ return new DatacubeStacExtension(stacCollection);
+ }
+ }
+}
diff --git a/src/DotNetStac/Extensions/Datacube/DatacubeVariable.cs b/src/DotNetStac/Extensions/Datacube/DatacubeVariable.cs
new file mode 100644
index 00000000..565cb2a6
--- /dev/null
+++ b/src/DotNetStac/Extensions/Datacube/DatacubeVariable.cs
@@ -0,0 +1,79 @@
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: DatacubeVariable.cs
+
+using System.Collections.Generic;
+using Newtonsoft.Json;
+
+namespace Stac.Extensions.Datacube
+{
+ ///
+ /// Represents the Variable Object
+ /// of the Datacube extension
+ ///
+ [JsonObject(ItemNullValueHandling = NullValueHandling.Ignore)]
+ public class DatacubeVariable : IStacPropertiesContainer
+ {
+ private string[] _dimensions;
+ private DatacubeVariableType? _type;
+ private string _description;
+ private double[] _extent;
+ private string[] _values;
+ private IDictionary _properties;
+ private string _unit;
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public DatacubeVariable()
+ {
+ this._properties = new Dictionary();
+ }
+
+ ///
+ /// Gets or sets the dimensions of the variable. This should refer to keys in the cube:dimensions object or be an empty list if the variable has no dimensions.
+ ///
+ [JsonProperty("dimensions")]
+ public string[] Dimensions { get => this._dimensions; set => this._dimensions = value; }
+
+ ///
+ /// Gets or sets type of the variable.
+ ///
+ [JsonProperty("type")]
+ public DatacubeVariableType? Type { get => this._type; set => this._type = value; }
+
+ ///
+ /// Gets or sets detailed multi-line description to explain the variable. CommonMark 0.29 syntax MAY be used for rich text representation.
+ ///
+ [JsonProperty("description")]
+ public string Description { get => this._description; set => this._description = value; }
+
+ ///
+ /// Gets or sets if the variable consists of ordinal values, the extent (lower and upper bounds) of the values as two-element array. Use null for open intervals.
+ ///
+ [JsonProperty("extent")]
+ public double[] Extent { get => this._extent; set => this._extent = value; }
+
+ ///
+ /// Gets or sets an (ordered) list of all values, especially useful for nominal values.
+ ///
+ [JsonProperty("values")]
+ public string[] Values { get => this._values; set => this._values = value; }
+
+ ///
+ /// Gets or sets the unit of measurement for the data, preferably compliant to UDUNITS-2 units (singular).
+ ///
+ [JsonProperty("unit")]
+ public string Unit { get => this._unit; set => this._unit = value; }
+
+ ///
+ /// Gets or sets additional fields
+ ///
+ [JsonExtensionData]
+ public IDictionary Properties { get => this._properties; set => this._properties = value; }
+
+ ///
+ [JsonIgnore]
+ public IStacObject StacObjectContainer => null;
+ }
+}
diff --git a/src/DotNetStac/Extensions/Datacube/DatacubeVariableObject.cs b/src/DotNetStac/Extensions/Datacube/DatacubeVariableObject.cs
deleted file mode 100644
index 7ffa573f..00000000
--- a/src/DotNetStac/Extensions/Datacube/DatacubeVariableObject.cs
+++ /dev/null
@@ -1,75 +0,0 @@
-using System.Collections.Generic;
-using Newtonsoft.Json;
-using Newtonsoft.Json.Converters;
-using Stac.Common;
-
-namespace Stac.Extensions.Datacube
-{
- ///
- /// Represents the Variable Object
- /// of the Datacube extension
- ///
- [JsonObject(ItemNullValueHandling = NullValueHandling.Ignore)]
- public class DatacubeVariable : IStacPropertiesContainer
- {
- IDictionary properties;
- protected string[] dimensions;
- protected DatacubeVariableType? type;
- protected string description;
- protected double[] extent;
- protected string[] values;
- private string unit;
-
- ///
- /// The dimensions of the variable. This should refer to keys in the cube:dimensions object or be an empty list if the variable has no dimensions.
- ///
- [JsonProperty("dimensions")]
- public string[] Dimensions { get => dimensions; set => dimensions = value; }
-
- ///
- /// Type of the variable.
- ///
- [JsonProperty("type")]
- public DatacubeVariableType? Type { get => type; set => type = value; }
-
- ///
- /// Detailed multi-line description to explain the variable. CommonMark 0.29 syntax MAY be used for rich text representation.
- ///
- [JsonProperty("description")]
- public string Description { get => description; set => description = value; }
-
- ///
- /// If the variable consists of ordinal values, the extent (lower and upper bounds) of the values as two-element array. Use null for open intervals.
- ///
- [JsonProperty("extent")]
- public double[] Extent { get => extent; set => extent = value; }
-
- ///
- /// An (ordered) list of all values, especially useful for nominal values.
- ///
- [JsonProperty("values")]
- public string[] Values { get => values; set => values = value; }
-
- ///
- /// The unit of measurement for the data, preferably compliant to UDUNITS-2 units (singular).
- ///
- [JsonProperty("unit")]
- public string Unit { get => unit; set => unit = value; }
-
- ///
- /// Additional fields
- ///
- ///
- [JsonExtensionData]
- public IDictionary Properties { get => properties; set => properties = value; }
-
- [JsonIgnore]
- public IStacObject StacObjectContainer => null;
-
-
- public DatacubeVariable()
- {
- properties = new Dictionary();
- }
- }
-}
diff --git a/src/DotNetStac/Extensions/Datacube/DatacubeVariableType.cs b/src/DotNetStac/Extensions/Datacube/DatacubeVariableType.cs
index f10f67aa..662e4113 100644
--- a/src/DotNetStac/Extensions/Datacube/DatacubeVariableType.cs
+++ b/src/DotNetStac/Extensions/Datacube/DatacubeVariableType.cs
@@ -1,13 +1,30 @@
-using Newtonsoft.Json;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: DatacubeVariableType.cs
+
+using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
namespace Stac.Extensions.Datacube
{
+ ///
+ /// Datacube variable type
+ ///
[JsonConverter(typeof(StringEnumConverter))]
public enum DatacubeVariableType
{
- data, //a variable indicating some measured value, for example "precipitation", "temperature", etc.
+#pragma warning disable SA1300 // Element should begin with upper-case letter
+#pragma warning disable SA1602 // EnumerationItemsMustBeDocumented
+ ///
+ /// a variable indicating some measured value, for example "precipitation", "temperature", etc.
+ ///
+ data,
- auxiliary //a variable that contains coordinate data, but isn't a dimension in cube:dimensions. For example, the values of the datacube might be provided in the projected coordinate reference system, but the datacube could have a variable lon with dimensions (y, x), giving the longitude at each point.
+ ///
+ /// a variable that contains coordinate data, but isn't a dimension in cube:dimensions. For example, the values of the datacube might be provided in the projected coordinate reference system, but the datacube could have a variable lon with dimensions (y, x), giving the longitude at each point.
+ ///
+ auxiliary,
+#pragma warning restore SA1602 // EnumerationItemsMustBeDocumented
+#pragma warning restore SA1300 // Element should begin with upper-case letter
}
}
diff --git a/src/DotNetStac/Extensions/Eo/EoBandCommonName.cs b/src/DotNetStac/Extensions/Eo/EoBandCommonName.cs
index d03180ac..6c350138 100644
--- a/src/DotNetStac/Extensions/Eo/EoBandCommonName.cs
+++ b/src/DotNetStac/Extensions/Eo/EoBandCommonName.cs
@@ -1,5 +1,8 @@
-using Newtonsoft.Json;
-using Newtonsoft.Json.Converters;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: EoBandCommonName.cs
+
+using Newtonsoft.Json;
using Stac.Common;
namespace Stac.Extensions.Eo
@@ -10,6 +13,9 @@ namespace Stac.Extensions.Eo
[JsonConverter(typeof(TolerantEnumConverter))]
public enum EoBandCommonName
{
+#pragma warning disable SA1300 // Element should begin with upper-case letter
+#pragma warning disable SA1602 // EnumerationItemsMustBeDocumented
+#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member
coastal,
blue,
green,
@@ -25,6 +31,9 @@ public enum EoBandCommonName
swir22,
lwir,
lwir11,
- lwir12
+ lwir12,
+#pragma warning restore CS1591 // Missing XML comment for publicly visible type or member
+#pragma warning restore SA1602 // EnumerationItemsMustBeDocumented
+#pragma warning restore SA1300 // Element should begin with upper-case letter
}
}
diff --git a/src/DotNetStac/Extensions/Eo/EoBandObject.cs b/src/DotNetStac/Extensions/Eo/EoBandObject.cs
index 926151f6..685b4782 100644
--- a/src/DotNetStac/Extensions/Eo/EoBandObject.cs
+++ b/src/DotNetStac/Extensions/Eo/EoBandObject.cs
@@ -1,4 +1,8 @@
-using System.Collections.Generic;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: EoBandObject.cs
+
+using System.Collections.Generic;
using Newtonsoft.Json;
namespace Stac.Extensions.Eo
@@ -10,72 +14,86 @@ namespace Stac.Extensions.Eo
[JsonObject(ItemNullValueHandling = NullValueHandling.Ignore)]
public class EoBandObject
{
- private string name;
-
- private string description;
+ private string _name;
- private EoBandCommonName? commonName;
+ private string _description;
- IDictionary properties;
+ private EoBandCommonName? _commonName;
+ private IDictionary _properties;
///
- /// Initialize a new Band Object
+ /// Initializes a new instance of the class.
///
/// Name of the band
/// Common name of the band
public EoBandObject(string name, EoBandCommonName? commonName)
{
- this.name = name;
- this.commonName = commonName;
- properties = new Dictionary();
+ this._name = name;
+ this._commonName = commonName;
+ this._properties = new Dictionary();
}
///
- /// The name of the band (e.g., "B01", "B8", "band2", "red").
+ /// Gets or sets the name of the band (e.g., "B01", "B8", "band2", "red").
///
+ ///
+ /// The name of the band (e.g., "B01", "B8", "band2", "red").
+ ///
[JsonProperty("name")]
- public string Name { get => name; set => name = value; }
+ public string Name { get => this._name; set => this._name = value; }
///
- /// Description to fully explain the band. CommonMark 0.29 syntax MAY be used for rich text representation.
+ /// Gets or sets description to fully explain the band. CommonMark 0.29 syntax MAY be used for rich text representation.
///
+ ///
+ /// Description to fully explain the band. CommonMark 0.29 syntax MAY be used for rich text representation.
+ ///
[JsonProperty("description")]
- public string Description { get => description; set => description = value; }
+ public string Description { get => this._description; set => this._description = value; }
///
- /// The name commonly used to refer to the band to make it easier to search for bands across instruments.
+ /// Gets or sets the name commonly used to refer to the band to make it easier to search for bands across instruments.
///
- ///
+ ///
+ /// The name commonly used to refer to the band to make it easier to search for bands across instruments.
+ ///
[JsonProperty("common_name")]
- public EoBandCommonName? CommonName { get => commonName; set => commonName = value; }
+ public EoBandCommonName? CommonName { get => this._commonName; set => this._commonName = value; }
///
- /// The center wavelength of the band, in micrometers (μm).
+ /// Gets or sets the center wavelength of the band, in micrometers (μm).
///
- ///
+ ///
+ /// The center wavelength of the band, in micrometers (μm).
+ ///
[JsonProperty("center_wavelength")]
public double? CenterWavelength { get; set; }
///
- /// Full width at half maximum (FWHM). The width of the band, as measured at half the maximum transmission, in micrometers (μm).
+ /// Gets or sets full width at half maximum (FWHM). The width of the band, as measured at half the maximum transmission, in micrometers (μm).
///
- ///
+ ///
+ /// Full width at half maximum (FWHM). The width of the band, as measured at half the maximum transmission, in micrometers (μm).
+ ///
[JsonProperty("full_width_half_max")]
public double? FullWidthHalfMax { get; set; }
///
- /// The solar illumination of the band, as measured at half the maximum transmission, in W/m2/micrometers.
+ /// Gets or sets the solar illumination of the band, as measured at half the maximum transmission, in W/m2/micrometers.
///
- ///
+ ///
+ /// The solar illumination of the band, as measured at half the maximum transmission, in W/m2/micrometers.
+ ///
[JsonProperty("solar_illumination")]
public double? SolarIllumination { get; set; }
///
- /// Additional fields
+ /// Gets or sets additional fields
///
- ///
+ ///
+ /// Additional fields
+ ///
[JsonExtensionData]
- public IDictionary Properties { get => properties; set => properties = value; }
-
+ public IDictionary Properties { get => this._properties; set => this._properties = value; }
}
}
diff --git a/src/DotNetStac/Extensions/Eo/EoStacExtension.cs b/src/DotNetStac/Extensions/Eo/EoStacExtension.cs
index 438dde66..dcdc702b 100644
--- a/src/DotNetStac/Extensions/Eo/EoStacExtension.cs
+++ b/src/DotNetStac/Extensions/Eo/EoStacExtension.cs
@@ -1,4 +1,8 @@
-using System;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: EoStacExtension.cs
+
+using System;
using System.Collections.Generic;
using System.Linq;
@@ -9,110 +13,82 @@ namespace Stac.Extensions.Eo
///
public class EoStacExtension : StacPropertiesContainerExtension, IStacExtension
{
- /// Extension identifier and schema url
+#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member
public const string JsonSchemaUrl = "https://stac-extensions.github.io/eo/v1.0.0/schema.json";
private const string BandsField = "eo:bands";
private const string CloudCoverField = "eo:cloud_cover";
+#pragma warning restore CS1591 // Missing XML comment for publicly visible type or member
- private static IDictionary itemFields;
+ private readonly IDictionary _itemFields;
- internal EoStacExtension(IStacPropertiesContainer stacpropertiesContainer) : base(JsonSchemaUrl, stacpropertiesContainer)
+ internal EoStacExtension(IStacPropertiesContainer stacpropertiesContainer)
+ : base(JsonSchemaUrl, stacpropertiesContainer)
{
- itemFields = new Dictionary();
- itemFields.Add(BandsField, typeof(EoBandObject[]));
- itemFields.Add(CloudCoverField, typeof(double));
+ this._itemFields = new Dictionary();
+ this._itemFields.Add(BandsField, typeof(EoBandObject[]));
+ this._itemFields.Add(CloudCoverField, typeof(double));
}
///
- /// Estimate of cloud cover
+ /// Gets or sets estimate of cloud cover
///
public double? CloudCover
{
- get { return StacPropertiesContainer.GetProperty(CloudCoverField); }
+ get
+ {
+ return this.StacPropertiesContainer.GetProperty(CloudCoverField);
+ }
+
set
{
if (value == null)
- StacPropertiesContainer.RemoveProperty(CloudCoverField);
+ {
+ this.StacPropertiesContainer.RemoveProperty(CloudCoverField);
+ }
else
{
- StacPropertiesContainer.SetProperty(CloudCoverField, value); DeclareStacExtension();
+ this.StacPropertiesContainer.SetProperty(CloudCoverField, value);
+ this.DeclareStacExtension();
}
}
}
///
- /// An array of available bands where each object is a Band Object.
+ /// Gets or sets an array of available bands where each object is a Band Object.
///
public EoBandObject[] Bands
{
- get { return StacPropertiesContainer.GetProperty(BandsField); }
+ get
+ {
+ return this.StacPropertiesContainer.GetProperty(BandsField);
+ }
+
set
{
if (value == null || value.Count() == 0)
- StacPropertiesContainer.RemoveProperty(BandsField);
+ {
+ this.StacPropertiesContainer.RemoveProperty(BandsField);
+ }
else
{
- StacPropertiesContainer.SetProperty(BandsField, value);
- DeclareStacExtension();
+ this.StacPropertiesContainer.SetProperty(BandsField, value);
+ this.DeclareStacExtension();
}
}
}
///
- /// Potential fields and their types
+ /// Gets potential fields and their types
///
- public override IDictionary ItemFields => itemFields;
+ public override IDictionary ItemFields => this._itemFields;
+ ///
public override IDictionary GetSummaryFunctions()
{
Dictionary summaryFunctions = new Dictionary();
- summaryFunctions.Add(CloudCoverField, new SummaryFunction(this, CloudCoverField, CreateRangeSummaryObject));
+ summaryFunctions.Add(CloudCoverField, new SummaryFunction(this, CloudCoverField, CreateRangeSummaryObject));
return summaryFunctions;
}
}
-
- ///
- /// Extension methods for accessing EO extension
- ///
- public static class EoStacExtensionExtensions
- {
- ///
- /// Initilize a EoStacExtension class from a STAC item
- ///
- public static EoStacExtension EoExtension(this StacItem stacItem)
- {
- return new EoStacExtension(stacItem);
- }
-
- ///
- /// Initilize a EoStacExtension class from a STAC asset
- ///
- public static EoStacExtension EoExtension(this StacAsset stacAsset)
- {
- return new EoStacExtension(stacAsset);
- }
-
- ///
- /// Get a STAC asset from a STAC item by its common name
- ///
- /// Stac Item
- /// common name
- ///
- 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));
- }
-
- ///
- /// Get a STAC EO Band object from a STAC item by its common name
- ///
- /// Stac Item
- /// common name
- ///
- 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();
- }
- }
}
diff --git a/src/DotNetStac/Extensions/Eo/EoStacExtensionExtensions.cs b/src/DotNetStac/Extensions/Eo/EoStacExtensionExtensions.cs
new file mode 100644
index 00000000..32ab8035
--- /dev/null
+++ b/src/DotNetStac/Extensions/Eo/EoStacExtensionExtensions.cs
@@ -0,0 +1,56 @@
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: EoStacExtensionExtensions.cs
+
+using System.Linq;
+
+namespace Stac.Extensions.Eo
+{
+ ///
+ /// Extension methods for accessing EO extension
+ ///
+ public static class EoStacExtensionExtensions
+ {
+ ///
+ /// Initilize a EoStacExtension class from a STAC item
+ ///
+ /// Stac Item
+ /// EoStacExtension class
+ public static EoStacExtension EoExtension(this StacItem stacItem)
+ {
+ return new EoStacExtension(stacItem);
+ }
+
+ ///
+ /// Initilize a EoStacExtension class from a STAC asset
+ ///
+ /// Stac Asset
+ /// EoStacExtension class
+ public static EoStacExtension EoExtension(this StacAsset stacAsset)
+ {
+ return new EoStacExtension(stacAsset);
+ }
+
+ ///
+ /// Get a STAC asset from a STAC item by its common name
+ ///
+ /// Stac Item
+ /// common name
+ /// Stac Asset
+ 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));
+ }
+
+ ///
+ /// Get a STAC EO Band object from a STAC item by its common name
+ ///
+ /// Stac Item
+ /// common name
+ /// Stac EO Band object
+ 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();
+ }
+ }
+}
diff --git a/src/DotNetStac/Extensions/File/ByteOrder.cs b/src/DotNetStac/Extensions/File/ByteOrder.cs
index e9c29742..35583008 100644
--- a/src/DotNetStac/Extensions/File/ByteOrder.cs
+++ b/src/DotNetStac/Extensions/File/ByteOrder.cs
@@ -1,4 +1,8 @@
-using System.Runtime.Serialization;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: ByteOrder.cs
+
+using System.Runtime.Serialization;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
@@ -10,13 +14,16 @@ namespace Stac.Extensions.File
[JsonConverter(typeof(StringEnumConverter))]
public enum ByteOrder
{
- /// Big Endian
+#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member
+#pragma warning disable SA1602 // EnumerationItemsMustBeDocumented
+ // Big Endian
[EnumMember(Value = "big-endian")]
BigEndian,
- /// Little Endian
+ // Little Endian
[EnumMember(Value = "little-endian")]
- LittleEndian
-
+ LittleEndian,
+#pragma warning restore CS1591 // Missing XML comment for publicly visible type or member
+#pragma warning restore SA1602 // EnumerationItemsMustBeDocumented
}
}
diff --git a/src/DotNetStac/Extensions/File/FileStacExtension.cs b/src/DotNetStac/Extensions/File/FileStacExtension.cs
index 621a5b18..eeecf34c 100644
--- a/src/DotNetStac/Extensions/File/FileStacExtension.cs
+++ b/src/DotNetStac/Extensions/File/FileStacExtension.cs
@@ -1,13 +1,10 @@
-using System;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: FileStacExtension.cs
+
+using System;
using System.Collections.Generic;
-using System.Collections.Specialized;
-using System.IO;
-using System.Security.Cryptography;
-using System.Threading.Tasks;
-using Multiformats.Base;
using Multiformats.Hash;
-using Multiformats.Hash.Algorithms;
-using Stac.Model;
namespace Stac.Extensions.File
{
@@ -16,145 +13,108 @@ namespace Stac.Extensions.File
///
public class FileStacExtension : StacPropertiesContainerExtension, IStacExtension
{
- /// Extension identifier and schema url
+#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member
public const string JsonSchemaUrl = "https://stac-extensions.github.io/file/v1.0.0/schema.json";
private const string ByteOrderField = "file:byte_order";
private const string ChecksumField = "file:checksum";
private const string HeaderSizeField = "file:header_size";
private const string SizeField = "file:size";
- private readonly Dictionary itemFields;
+#pragma warning restore CS1591 // Missing XML comment for publicly visible type or member
+ private readonly Dictionary _itemFields;
- internal FileStacExtension(StacAsset stacAsset) : base(JsonSchemaUrl, stacAsset)
+ internal FileStacExtension(StacAsset stacAsset)
+ : base(JsonSchemaUrl, stacAsset)
{
- itemFields = new Dictionary();
- itemFields.Add(ByteOrderField, typeof(string));
- itemFields.Add(ChecksumField, typeof(string));
- itemFields.Add(HeaderSizeField, typeof(string));
- itemFields.Add(SizeField, typeof(IDictionary));
+ this._itemFields = new Dictionary();
+ this._itemFields.Add(ByteOrderField, typeof(string));
+ this._itemFields.Add(ChecksumField, typeof(string));
+ this._itemFields.Add(HeaderSizeField, typeof(string));
+ this._itemFields.Add(SizeField, typeof(IDictionary));
}
///
- /// The byte order of integer values in the file. One of big-endian or little-endian.
+ /// Gets or sets the byte order of integer values in the file. One of big-endian or little-endian.
///
- ///
public ByteOrder ByteOrder
{
- get { return StacPropertiesContainer.GetProperty(ByteOrderField); }
- set { StacPropertiesContainer.SetProperty(ByteOrderField, value); DeclareStacExtension(); }
+ get
+ {
+ return this.StacPropertiesContainer.GetProperty(ByteOrderField);
+ }
+
+ set
+ {
+ this.StacPropertiesContainer.SetProperty(ByteOrderField, value);
+ this.DeclareStacExtension();
+ }
}
///
- /// The name commonly used to refer to the processing level to make it easier to search for product level across collections or items.
+ /// Gets or sets the name commonly used to refer to the processing level to make it easier to search for product level across collections or items.
///
- ///
- public Multiformats.Hash.Multihash Checksum
+ public Multihash Checksum
{
- get { return Multiformats.Hash.Multihash.Parse(StacPropertiesContainer.GetProperty(ChecksumField)); }
- set { StacPropertiesContainer.SetProperty(ChecksumField, value.ToString()); DeclareStacExtension(); }
+ get
+ {
+ return Multihash.Parse(this.StacPropertiesContainer.GetProperty(ChecksumField));
+ }
+
+ set
+ {
+ this.StacPropertiesContainer.SetProperty(ChecksumField, value.ToString());
+ this.DeclareStacExtension();
+ }
}
///
- /// The name of the facility that produced the data.
+ /// Gets or sets the name of the facility that produced the data.
///
- ///
public uint? HeaderSize
{
- get { return StacPropertiesContainer.GetProperty(HeaderSizeField); }
- set { StacPropertiesContainer.SetProperty(HeaderSizeField, value); DeclareStacExtension(); }
+ get
+ {
+ return this.StacPropertiesContainer.GetProperty(HeaderSizeField);
+ }
+
+ set
+ {
+ this.StacPropertiesContainer.SetProperty(HeaderSizeField, value);
+ this.DeclareStacExtension();
+ }
}
///
- /// The name of the facility that produced the data.
+ /// Gets or sets the name of the facility that produced the data.
///
- ///
public ulong? Size
{
- get { return StacPropertiesContainer.GetProperty(SizeField); }
- set { StacPropertiesContainer.SetProperty(SizeField, value); DeclareStacExtension(); }
+ get
+ {
+ return this.StacPropertiesContainer.GetProperty(SizeField);
+ }
+
+ set
+ {
+ this.StacPropertiesContainer.SetProperty(SizeField, value);
+ this.DeclareStacExtension();
+ }
}
///
- /// Potential fields and their types
+ /// Gets potential fields and their types
///
- public override IDictionary ItemFields => itemFields;
+ public override IDictionary ItemFields => this._itemFields;
///
- /// Get the STAC asset
+ /// Gets get the STAC asset
///
- public StacAsset StacAsset => base.StacPropertiesContainer as StacAsset;
+ public StacAsset StacAsset => this.StacPropertiesContainer as StacAsset;
+ ///
public override IDictionary GetSummaryFunctions()
{
Dictionary summaryFunctions = new Dictionary();
return summaryFunctions;
}
-
- }
-
- ///
- /// Extension methods for accessing Processing extension
- ///
- public static class FileStacExtensionExtensions
- {
- ///
- /// Initilize a EoStacExtension class from a STAC item
- ///
- public static FileStacExtension FileExtension(this StacAsset stacAsset)
- {
- return new FileStacExtension(stacAsset);
- }
-
- ///
- /// Set possibly file extension properties from a FileInfo object:
- /// - size
- /// - checksum
- ///
- ///
- public static async Task SetFileExtensionProperties(this FileStacExtension fileStacExtension,
- FileInfo file,
- HashType hashType = HashType.SHA1,
- MultibaseEncoding encoding = MultibaseEncoding.Base16Lower)
- {
- fileStacExtension.Size = Convert.ToUInt64(file.Length);
- await fileStacExtension.SetFileCheckSum(hashType, encoding, uri => file.OpenRead());
- }
-
- ///
- /// Set possibly file extension properties from a FileInfo object:
- /// - size
- /// - checksum
- ///
- ///
- public static async Task SetFileExtensionProperties(this FileStacExtension fileStacExtension,
- Stream stream,
- HashType hashType = HashType.SHA1,
- MultibaseEncoding encoding = MultibaseEncoding.Base16Lower)
- {
- await fileStacExtension.SetFileCheckSum(hashType, encoding, uri => stream);
- }
-
- ///
- /// Add the checksum property of the file extension
- ///
- ///
- public static async Task SetFileCheckSum(this FileStacExtension fileStacExtension,
- HashType hashType,
- MultibaseEncoding encoding,
- Func uriStreamer)
- {
- Multihash mh = null;
- using (var stream = uriStreamer(fileStacExtension.StacAsset.Uri))
- {
- byte[] data = null;
- using (var mem = new MemoryStream())
- {
- await stream.CopyToAsync(mem);
- data = mem.ToArray();
- fileStacExtension.Size = Convert.ToUInt64(mem.Length);
- }
- mh = Multihash.Sum(hashType, data);
- }
- fileStacExtension.Checksum = mh;
- }
}
}
diff --git a/src/DotNetStac/Extensions/File/FileStacExtensionExtensions.cs b/src/DotNetStac/Extensions/File/FileStacExtensionExtensions.cs
new file mode 100644
index 00000000..0940bec7
--- /dev/null
+++ b/src/DotNetStac/Extensions/File/FileStacExtensionExtensions.cs
@@ -0,0 +1,98 @@
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: FileStacExtensionExtensions.cs
+
+using System;
+using System.IO;
+using System.Threading.Tasks;
+using Multiformats.Base;
+using Multiformats.Hash;
+
+namespace Stac.Extensions.File
+{
+ ///
+ /// Extension methods for accessing Processing extension
+ ///
+ public static class FileStacExtensionExtensions
+ {
+ ///
+ /// Initilize a EoStacExtension class from a STAC item
+ ///
+ /// The STAC asset.
+ /// The EoStacExtension class
+ public static FileStacExtension FileExtension(this StacAsset stacAsset)
+ {
+ return new FileStacExtension(stacAsset);
+ }
+
+ ///
+ /// Set possibly file extension properties from a FileInfo object:
+ /// - size
+ /// - checksum
+ ///
+ /// The file extension.
+ /// The file.
+ /// Type of the hash.
+ /// The encoding.
+ /// No object or value is returned by this method when it completes.
+ public static async Task SetFileExtensionProperties(
+ this FileStacExtension fileStacExtension,
+ FileInfo file,
+ HashType hashType = HashType.SHA1,
+ MultibaseEncoding encoding = MultibaseEncoding.Base16Lower)
+ {
+ fileStacExtension.Size = Convert.ToUInt64(file.Length);
+ await fileStacExtension.SetFileCheckSum(hashType, encoding, uri => file.OpenRead());
+ }
+
+ ///
+ /// Set possibly file extension properties from a FileInfo object:
+ /// - size
+ /// - checksum
+ ///
+ /// The file extension.
+ /// The stream.
+ /// Type of the hash.
+ /// The encoding.
+ /// No object or value is returned by this method when it completes.
+ public static async Task SetFileExtensionProperties(
+ this FileStacExtension fileStacExtension,
+ Stream stream,
+ HashType hashType = HashType.SHA1,
+ MultibaseEncoding encoding = MultibaseEncoding.Base16Lower)
+ {
+ await fileStacExtension.SetFileCheckSum(hashType, encoding, uri => stream);
+ }
+
+ ///
+ /// Add the checksum property of the file extension
+ ///
+ /// The file extension.
+ /// Type of the hash.
+ /// The encoding.
+ /// The URI streamer.
+ /// No object or value is returned by this method when it completes.
+ public static async Task SetFileCheckSum(
+ this FileStacExtension fileStacExtension,
+ HashType hashType,
+ MultibaseEncoding encoding,
+ Func uriStreamer)
+ {
+ Multihash mh = null;
+ using (var stream = uriStreamer(fileStacExtension.StacAsset.Uri))
+ {
+ byte[] data = null;
+ using (var mem = new MemoryStream())
+ {
+ await stream.CopyToAsync(mem);
+ data = mem.ToArray();
+ fileStacExtension.Size = Convert.ToUInt64(mem.Length);
+ }
+
+ mh = Multihash.Sum(hashType, data);
+ }
+
+ fileStacExtension.Checksum = mh;
+ }
+ }
+}
diff --git a/src/DotNetStac/Extensions/IStacAssetExtension.cs b/src/DotNetStac/Extensions/IStacAssetExtension.cs
index 492f7400..0d07e15a 100644
--- a/src/DotNetStac/Extensions/IStacAssetExtension.cs
+++ b/src/DotNetStac/Extensions/IStacAssetExtension.cs
@@ -1,11 +1,17 @@
-using System;
-using System.Collections.Generic;
-using Stac.Collection;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: IStacAssetExtension.cs
namespace Stac.Extensions
{
+ ///
+ /// Interface for StacAsset extensions
+ ///
public interface IStacAssetExtension
{
+ ///
+ /// Gets the StacAsset.
+ ///
StacAsset StacAsset { get; }
}
}
diff --git a/src/DotNetStac/Extensions/IStacExtension.cs b/src/DotNetStac/Extensions/IStacExtension.cs
index ab2c0fbd..de6044a4 100644
--- a/src/DotNetStac/Extensions/IStacExtension.cs
+++ b/src/DotNetStac/Extensions/IStacExtension.cs
@@ -1,15 +1,25 @@
-using System;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: IStacExtension.cs
+
using System.Collections.Generic;
-using Stac.Collection;
namespace Stac.Extensions
{
+ ///
+ /// Interface for Stac extensions
+ ///
public interface IStacExtension
{
+ ///
+ /// Gets the Stac Extension identifier.
+ ///
string Identifier { get; }
- bool IsDeclared { get; }
-
+ ///
+ /// Gets the Stac Extension summary functions.
+ ///
+ /// The Stac Extension summary functions.
IDictionary GetSummaryFunctions();
}
}
diff --git a/src/DotNetStac/Extensions/ISummaryFunction.cs b/src/DotNetStac/Extensions/ISummaryFunction.cs
index 56619d50..7e0f06b8 100644
--- a/src/DotNetStac/Extensions/ISummaryFunction.cs
+++ b/src/DotNetStac/Extensions/ISummaryFunction.cs
@@ -1,14 +1,32 @@
-using System.Collections.Generic;
+// Copyright (c) by Terradue Srl. All Rights Reserved.
+// License under the AGPL, Version 3.0.
+// File Name: ISummaryFunction.cs
+
+using System.Collections.Generic;
using Stac.Collection;
namespace Stac.Extensions
{
+ ///
+ /// Interface for Stac Extension summary functions
+ ///
public interface ISummaryFunction
{
+ ///
+ /// Gets the Stac Extension associated to the summary function.
+ ///
IStacExtension Extension { get; }
+ ///
+ /// Gets the PropertyName of the summary function.
+ ///
string PropertyName { get; }
+ ///
+ /// Summarize the items.
+ ///
+ /// The items to summarize.
+ /// The summary item.
IStacSummaryItem Summarize(IEnumerable items);
}
}
diff --git a/src/DotNetStac/Extensions/ItemCollection/ItemCollection.cs b/src/DotNetStac/Extensions/ItemCollection/ItemCollection.cs
deleted file mode 100644
index f7df30d0..00000000
--- a/src/DotNetStac/Extensions/ItemCollection/ItemCollection.cs
+++ /dev/null
@@ -1,114 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Collections.Specialized;
-using System.IO;
-using Newtonsoft.Json;
-using Newtonsoft.Json.Schema;
-using Stac.Collection;
-using Stac.Model;
-
-namespace Stac.Extensions.ItemCollections
-{
- public class ItemCollection : StacCollection, IStacExtension
- {
-
- public const string JsonSchemaUrl = "https://stac-extensions.github.io/processing/v1.0.0/schema.json";
-
- public ItemCollection(string id,
- string description,
- List stacItems) : base(id,
- description,
- null)
- {
- if (stacItems != null)
- {
- Features = new List(stacItems);
- Extent = StacExtent.Create(stacItems);
- }
- }
-
- ///
- /// STAC type (FeatureCollection)
- ///
- [JsonProperty("type")]
- public override string Type => "FeatureCollection";
-
- [JsonProperty(PropertyName = "features", Required = Required.Always)]
- public List Features { get; set; }
-
- public string Identifier => JsonSchemaUrl;
-
- public bool IsDeclared => true;
-
- public IDictionary GetSummaryFunctions()
- {
- return new Dictionary