public async System.Threading.Tasks.Task SetPropertiesFromFileInfo() { var simpleJson = GetJson("Extensions", "MinimalSample"); ValidateJson(simpleJson); StacItem simpleitem = StacConvert.Deserialize <StacItem>(simpleJson); StacAsset stacAsset = StacAsset.CreateDataAsset(simpleitem, new Uri("file:///srid.csv"), new System.Net.Mime.ContentType("text/csv"), "System reference Ids"); await stacAsset.FileExtension().SetFileExtensionProperties(new System.IO.FileInfo("SRID.csv")); simpleitem.Assets.Add("srid", stacAsset); Assert.Equal <UInt64>(1536937, stacAsset.FileExtension().Size.Value); string actualJson = JsonConvert.SerializeObject(simpleitem); ValidateJson(actualJson); string expectedJson = GetJson("Extensions"); JsonAssert.AreEqual(expectedJson, actualJson); }
public void SetAssetBands() { var k3CompleteJson = GetJson("Item", "K3A_20200508102646_28267_00027320_L1G"); var k3MissingBandsJson = GetJson("Item", "K3A_20200508102646_28267_00027320_L1G_missing_bands"); ValidateJson(k3CompleteJson); ValidateJson(k3MissingBandsJson); StacItem k3MissingBands = StacConvert.Deserialize <StacItem>(k3MissingBandsJson); EoBandObject eoBandObject = new EoBandObject("MS1", EoBandCommonName.blue) { CenterWavelength = 0.485 }; eoBandObject.Properties.Add("scale", 27.62430939226519); eoBandObject.Properties.Add("offset", -22.1416); eoBandObject.SolarIllumination = 2001.0; Assert.NotNull(k3MissingBands.Assets["MS1"]); k3MissingBands.Assets["MS1"].EoExtension().Bands = new EoBandObject[] { eoBandObject }; Assert.Same(k3MissingBands, k3MissingBands.StacObjectContainer); Assert.Same(k3MissingBands, k3MissingBands.Assets.First().Value.StacObjectContainer); Assert.NotNull(k3MissingBands.GetAsset(EoBandCommonName.blue)); Assert.Equal(2001, k3MissingBands.GetBandObject(EoBandCommonName.blue).SolarIllumination); k3MissingBandsJson = JsonConvert.SerializeObject(k3MissingBands); ValidateJson(k3MissingBandsJson); JsonAssert.AreEqual(k3CompleteJson, k3MissingBandsJson); }
public static BaselineVector CalculateBaseline(this SatStacExtension sat1, SatStacExtension sat2) { StacItem masterItem = sat1.StacItem; StacItem slaveItem = sat2.StacItem; if (sat1.OrbitStateVectors.Count() == 0) { throw new OperationCanceledException("sat1 has no orbit state vectors"); } if (sat2.OrbitStateVectors.Count() == 0) { throw new OperationCanceledException("sat2 has no orbit state vectors"); } DateTime masterAnxDate = sat1.AscendingNodeCrossingDateTime; DateTime slaveAnxDate = sat2.AscendingNodeCrossingDateTime; var masterOrbits = sat1.OrbitStateVectors.Values; var slaveOrbits = sat2.OrbitStateVectors.Values; IPosition p0 = new Position(sat1.SceneCenterCoordinates[0], sat1.SceneCenterCoordinates[1], sat1.SceneCenterCoordinates[2]); DateTime[] times = new DateTime[3] { masterAnxDate, slaveAnxDate, masterItem.DateTime.Start.Add(TimeSpan.FromMilliseconds(masterItem.DateTime.End.Subtract(masterItem.DateTime.Start).TotalMilliseconds / 2)) }; var baseline = BaselineCalculation.CalculateBaseline(times, masterOrbits.ToArray(), slaveOrbits.ToArray(), p0); return(baseline); }
public void GetProperty() { var coordinates = new[] { new List <IPosition> { new Position(37.488035566, -122.308150179), new Position(37.538869539, -122.597502109), new Position(37.613537207, -122.576687533), new Position(37.562818007, -122.288048600), new Position(37.488035566, -122.308150179) } }; var geometry = new Polygon(new LineString[] { new LineString(coordinates[0]) }); var properties = new Dictionary <string, object>(); properties.Add("datetime", DateTime.Parse("2016-05-03T13:21:30.040Z").ToUniversalTime()); properties.Add("collection", "CS3"); StacItem item = new StacItem("CS3-20160503_132130_04", geometry, properties); item.SetProperty("test", new string[] { "test1", "test2", "test3" }); string json = StacConvert.Serialize(item); ValidateJson(json); item = StacConvert.Deserialize <StacItem>(json); var array = item.GetProperty <string[]>("test"); }
internal ProcessingStacExtension(StacItem stacItem) : base(JsonSchemaUrl, stacItem) { itemFields = new Dictionary <string, Type>(); itemFields.Add(LineageField, typeof(string)); itemFields.Add(LevelField, typeof(string)); itemFields.Add(FacilityField, typeof(string)); itemFields.Add(SoftwareField, typeof(IDictionary <string, string>)); }
public void CreateEoExtension() { var coordinates = new[] { new List <IPosition> { new Position(37.488035566, -122.308150179), new Position(37.538869539, -122.597502109), new Position(37.613537207, -122.576687533), new Position(37.562818007, -122.288048600), new Position(37.488035566, -122.308150179) } }; var geometry = new Polygon(new LineString[] { new LineString(coordinates[0]) }); var properties = new Dictionary <string, object>(); properties.Add("datetime", DateTime.Parse("2016-05-03T13:21:30.040Z").ToUniversalTime()); StacItem item = new StacItem("CS3-20160503_132130_04", geometry, properties); item.Links.Add(StacLink.CreateSelfLink(new Uri("http://cool-sat.com/catalog/CS3-20160503_132130_04/CS3-20160503_132130_04.json"))); item.SetCollection("CS3", new Uri("http://cool-sat.com/catalog.json")); var asset = new StacAsset(item, new Uri("relative-path/to/analytic.tif", UriKind.Relative), null, "4-Band Analytic", null); asset.EoExtension().CloudCover = 0; item.Assets.Add("analytic", asset); item.Assets.Add("thumbnail", StacAsset.CreateThumbnailAsset(item, new Uri("http://cool-sat.com/catalog/CS3-20160503_132130_04/thumbnail.png"), null, "Thumbnail")); // item.BoundingBoxes = new double[4] { -122.59750209, 37.48803556, -122.2880486, 37.613537207 }; item.BoundingBoxes = item.GetBoundingBoxFromGeometryExtent(); EoStacExtension eo = item.EoExtension(); eo.CloudCover = 0; Assert.Equal <double>(0.0, eo.CloudCover.Value); Assert.Equal <double>(0.0, double.Parse(asset.Properties["eo:cloud_cover"].ToString())); var actualJson = StacConvert.Serialize(item); ValidateJson(actualJson); var expectedJson = GetJson("Item"); ValidateJson(expectedJson); JsonAssert.AreEqual(expectedJson, actualJson); asset.EoExtension().Bands = null; Assert.Null(asset.GetProperty("eo:bands")); }
public void CalculatePerpendicularBaseline() { var sentinel1Json_1 = GetJson("Item", "S1A_IW_SLC__1SDV_20150305T051937_20150305T052005_004892_006196_ABBB"); var sentinel1Json_2 = GetJson("Item", "S1A_IW_SLC__1SDV_20150317T051938_20150317T052005_005067_0065D5_B405"); StacItem sentinel1Item_1 = StacConvert.Deserialize <StacItem>(sentinel1Json_1); StacItem sentinel1Item_2 = StacConvert.Deserialize <StacItem>(sentinel1Json_2); var baseline = sentinel1Item_1.SatExtension().CalculateBaseline(sentinel1Item_2.SatExtension()); }
internal ProjectionStacExtension(StacItem stacItem) : base(JsonSchemaUrl, stacItem) { itemFields = new Dictionary <string, Type>(); itemFields.Add(EpsgField, typeof(int)); itemFields.Add(Wkt2Field, typeof(string)); itemFields.Add(ProjJsonField, typeof(string)); itemFields.Add(ProjGeometryField, typeof(IGeometryObject)); itemFields.Add(ProjBboxField, typeof(double[])); itemFields.Add(ProjCentroidField, typeof(CentroidObject)); }
public static StacAsset CreateStacAsset(this IAsset asset, StacItem stacItem) { if (asset is StacAssetAsset) { return(new StacAsset((asset as StacAssetAsset).StacAsset, stacItem)); } var stacAsset = new StacAsset(stacItem, asset.Uri, asset.Roles, asset.Title, asset.ContentType); stacAsset.FileExtension().Size = asset.ContentLength; return(stacAsset); }
public static void MergeAssets(this StacItem stacItem, IAssetsContainer assetContainer, bool removeIfNotInContainer = false) { if (removeIfNotInContainer) { stacItem.Assets.Clear(); } foreach (var asset in assetContainer.Assets) { if (stacItem.Assets.ContainsKey(asset.Key)) { stacItem.Assets.Remove(asset.Key); } stacItem.Assets.Add(asset.Key, asset.Value.CreateStacAsset(stacItem)); } }
public void ReadCoordinateSystem() { var k3CompleteJson = GetJson("Item", "K3A_20200508102646_28267_00027320_L1G"); ValidateJson(k3CompleteJson); StacItem k3Complete = StacConvert.Deserialize <StacItem>(k3CompleteJson); k3Complete.ProjectionExtension().SetCoordinateSystem(4326); Assert.Equal("GEOGCS[\"WGS 84\", DATUM[\"WGS_1984\", SPHEROID[\"WGS 84\", 6378137, 298.257223563, AUTHORITY[\"EPSG\", \"7030\"]], AUTHORITY[\"EPSG\", \"6326\"]], PRIMEM[\"Greenwich\", 0, AUTHORITY[\"EPSG\", \"8901\"]], UNIT[\"degree\", 0.01745329251994328, AUTHORITY[\"EPSG\", \"9122\"]], AUTHORITY[\"EPSG\", \"4326\"]]", k3Complete.ProjectionExtension().Wkt2); ValidateJson(StacConvert.Serialize(k3Complete)); }
public void StacObjectLink() { var simpleJson = GetJson("Exceptions", "MinimalSample"); ValidateJson(simpleJson); StacItem simpleitem = StacConvert.Deserialize <StacItem>(simpleJson); StacObjectLink stacObjectLink = (StacObjectLink)StacLink.CreateObjectLink(simpleitem, new Uri("file:///test")); Assert.Throws <InvalidOperationException>(() => stacObjectLink.Title = "test"); Assert.Throws <InvalidOperationException>(() => stacObjectLink.ContentType = new System.Net.Mime.ContentType("text/plain")); Assert.Equal(simpleitem, stacObjectLink.StacObject); StacLink nullStacLink = null; Assert.Throws <ArgumentNullException>(() => new StacLink(nullStacLink)); }
public void CanSerializeMinimalSample() { var coordinates = new[] { new List <IPosition> { new Position(37.488035566, -122.308150179), new Position(37.538869539, -122.597502109), new Position(37.613537207, -122.576687533), new Position(37.562818007, -122.288048600), new Position(37.488035566, -122.308150179) } }; var geometry = new Polygon(new LineString[] { new LineString(coordinates[0]) }); var properties = new Dictionary <string, object>(); properties.Add("collection", "CS3"); StacItem item = new StacItem("CS3-20160503_132130_04", geometry, properties); item.DateTime = new Itenso.TimePeriod.TimeInterval(DateTime.Parse("2016-05-03T13:21:30.040Z")); item.Links.Add(StacLink.CreateSelfLink(new Uri("http://cool-sat.com/catalog/CS3-20160503_132130_04/CS3-20160503_132130_04.json"))); item.SetCollection("cool-sat", new Uri("http://cool-sat.com/catalog.json")); item.Assets.Add("analytic", new StacAsset(item, new Uri("relative-path/to/analytic.tif", UriKind.Relative), null, "4-Band Analytic", null)); item.Assets.Add("thumbnail", StacAsset.CreateThumbnailAsset(item, new Uri("http://cool-sat.com/catalog/CS3-20160503_132130_04/thumbnail.png"), null, "Thumbnail")); // item.BoundingBoxes = new double[4] { -122.59750209, 37.48803556, -122.2880486, 37.613537207 }; item.BoundingBoxes = item.GetBoundingBoxFromGeometryExtent(); var actualJson = StacConvert.Serialize(item); ValidateJson(actualJson); var expectedJson = GetJson("Item"); ValidateJson(expectedJson); JsonAssert.AreEqual(expectedJson, actualJson); item.Links.Remove(item.Links.First(l => l.RelationshipType == "collection")); Assert.Null(item.Collection); }
public void SetCoordinateSystem() { var k3CompleteJson = GetJson("Item", "K3A_20200508102646_28267_00027320_L1G"); ValidateJson(k3CompleteJson); StacItem k3Complete = StacConvert.Deserialize <StacItem>(k3CompleteJson); k3Complete.ProjectionExtension().SetCoordinateSystem(ProjNet.CoordinateSystems.GeocentricCoordinateSystem.WGS84); string k3newProjJson = StacConvert.Serialize(k3Complete); var expectedJson = GetJson("Item", "K3A_20200508102646_28267_00027320_L1G_newproj"); ValidateJson(expectedJson); JsonAssert.AreEqual(expectedJson, k3newProjJson); }
public void ItemProviders() { var simpleJson = GetJson("Item", "ItemProvidersIn"); ValidateJson(simpleJson); StacItem simpleItem = StacConvert.Deserialize <StacItem>(simpleJson); simpleItem.Providers.Add(new StacProvider("ESA", new StacProviderRole[] { StacProviderRole.licensor })); Assert.Contains <string, object>("providers", simpleItem.Properties); simpleItem.Providers.RemoveAt(0); Assert.DoesNotContain <string, object>("providers", simpleItem.Properties); var newJson = StacConvert.Serialize(simpleItem); ValidateJson(newJson); }
public void SetVersion() { var simpleJson = GetJson("Extensions", "MinimalSample"); ValidateJson(simpleJson); StacItem simpleitem = StacConvert.Deserialize <StacItem>(simpleJson); simpleitem.VersionExtension().Version = "1"; Assert.Equal("1", simpleitem.Properties["version"]); string actualJson = JsonConvert.SerializeObject(simpleitem); ValidateJson(actualJson); string expectedJson = GetJson("Extensions"); JsonAssert.AreEqual(expectedJson, actualJson); }
public void GetAssetsBands() { var k3CompleteJson = GetJson("Item", "GetAssetsBands_K3_20201112193439_45302_18521139_L1G"); ValidateJson(k3CompleteJson); StacItem k3complete = StacConvert.Deserialize <StacItem>(k3CompleteJson); var overviewAssets = k3complete.Assets.Where(a => { if (a.Value.Properties.ContainsKey("eo:bands")) { Assert.NotNull(k3complete.EoExtension().Bands); Assert.NotEmpty(k3complete.EoExtension().Bands); return(k3complete.EoExtension().Bands.Any(band => !string.IsNullOrEmpty(band.Name))); } return(false); }); Assert.Equal(5, overviewAssets.Count()); }
public void CloneEoItem() { var json = GetJson("Item"); ValidateJson(json); var item = StacConvert.Deserialize <StacItem>(json); var actualJson = StacConvert.Serialize(item); ValidateJson(actualJson); JsonAssert.AreEqual(json, actualJson); item = item = StacConvert.Deserialize <StacItem>(json); item = new StacItem(item as StacItem); actualJson = JsonConvert.SerializeObject(item); JsonAssert.AreEqual(json, actualJson); }
public void TestObservableDictionary() { var k3CompleteJson = GetJson("Item", "K3A_20200508102646_28267_00027320_L1G_software"); var k3MissingSoftwareJson = GetJson("Item", "K3A_20200508102646_28267_00027320_L1G_missing_software"); ValidateJson(k3CompleteJson); ValidateJson(k3MissingSoftwareJson); StacItem k3MissingSoftware = StacConvert.Deserialize <StacItem>(k3MissingSoftwareJson); Assert.NotNull(k3MissingSoftware.ProcessingExtension().Software); Assert.Equal(0, k3MissingSoftware.ProcessingExtension().Software.Count); k3MissingSoftware.ProcessingExtension().Software.Add("proc_IPF", "2.0.1"); Assert.Equal(1, k3MissingSoftware.ProcessingExtension().Software.Count); k3MissingSoftwareJson = StacConvert.Serialize(k3MissingSoftware); ValidateJson(k3MissingSoftwareJson); JsonAssert.AreEqual(k3CompleteJson, k3MissingSoftwareJson); }
public void ItemClone() { var simpleJson = GetJson("Item", "ItemCloneIn"); ValidateJson(simpleJson); StacItem simpleItem = StacConvert.Deserialize <StacItem>(simpleJson); StacItem simpleItemClone = new StacItem(simpleItem); var clonedJson = StacConvert.Serialize(simpleItemClone); ValidateJson(clonedJson); var expectedJson = GetJson("Item"); JsonAssert.AreEqual(simpleJson, expectedJson); simpleItemClone = (StacItem)simpleItem.Clone(); clonedJson = StacConvert.Serialize(simpleItemClone); ValidateJson(clonedJson); JsonAssert.AreEqual(simpleJson, expectedJson); }
public void TestFullSar() { var coordinates = new[] { new List <IPosition> { new Position(14.953436, -5.730959), new Position(15.388663, -3.431006), new Position(13.880572, -3.136116), new Position(13.441674, -5.419919), new Position(14.953436, -5.730959) } }; var geometry = new Polygon(new LineString[] { new LineString(coordinates[0]) }); var properties = new Dictionary <string, object>(); StacItem stacItem = new StacItem("S1A_IW_GRDH_1SDV_20160822T182823_20160822T182848_012717_013FFE_90AF", geometry, properties); stacItem.DateTime = new Itenso.TimePeriod.TimeInterval(DateTime.Parse("2016-08-22T18:28:23.368922Z")); stacItem.Platform = "sentinel-1a"; stacItem.SarExtension().Required("IW", SarCommonFrequencyBandName.C, new string[2] { "VV", "VH" }, "GRD"); var actualJson = StacConvert.Serialize(stacItem); ValidateJson(actualJson); var expectedJson = GetJson("Item", "S1A_IW_GRDH_1SDV_20160822T182823_20160822T182848_012717_013FFE_90AF"); ValidateJson(expectedJson); JsonAssert.AreEqual(expectedJson, actualJson); }
/// <summary> /// Get a STAC EO Band object from a STAC item by its common name /// </summary> /// <param name="stacItem">Stac Item</param> /// <param name="commonName">common name</param> /// <returns></returns> public static EoBandObject GetBandObject(this StacItem stacItem, EoBandCommonName commonName) { return(stacItem.Assets.Values.Where(a => a.EoExtension().Bands != null).Select(a => a.EoExtension().Bands.FirstOrDefault(b => b.CommonName == commonName)).First()); }
/// <summary> /// Initilize a EoStacExtension class from a STAC item /// </summary> public static EoStacExtension EoExtension(this StacItem stacItem) { return(new EoStacExtension(stacItem)); }
public static SarStacExtension SarExtension(this StacItem stacItem) { return(new SarStacExtension(stacItem)); }
/// <summary> /// Get a STAC asset from a STAC item by its common name /// </summary> /// <param name="stacItem">Stac Item</param> /// <param name="commonName">common name</param> /// <returns></returns> public static StacAsset GetAsset(this StacItem stacItem, EoBandCommonName commonName) { return(stacItem.Assets.Values.Where(a => a.EoExtension().Bands != null).FirstOrDefault(a => a.EoExtension().Bands.Any(b => b.CommonName == commonName))); }
/// <summary> /// Initilize a EoStacExtension class from a STAC item /// </summary> public static ProcessingStacExtension ProcessingExtension(this StacItem stacItem) { return(new ProcessingStacExtension(stacItem)); }
public static StacAsset GetAsset(this StacItem stacItem, string polarization) { return(stacItem.Assets.Values.FirstOrDefault(a => a.SarExtension().Polarizations.Contains(polarization))); }
public StacItemNode(StacItem stacItem, Uri uri, ICredentials credentials = null) : base(stacItem, uri, credentials) { }
public static ViewStacExtension ViewExtension(this StacItem stacItem) { return(new ViewStacExtension(stacItem)); }
public static StacItemNode CreateUnlocatedNode(StacItem stacItem) { return(new StacItemNode(stacItem, new Uri(stacItem.Id + ".json", UriKind.Relative))); }