public void StartDownloadProduct(ModisProduct ModisProduct) { DateTime dateLast = GetProductLastDate(ModisProduct), dateDownload = dateLast.AddDays(ModisProduct.Period); DownloadProduct(ModisProduct, dateDownload); }
public void SaveProductLastDate(ModisProduct ModisProduct, DateTime Date) { string dateFile = Path.Combine(textBoxArchiveDirectory.Text, ModisProduct.GetProductWithoutVersion()); dateFile = Path.ChangeExtension(dateFile, "txt"); File.WriteAllText(dateFile, Date.ToString("yyyy-MM-dd")); }
public async Task <IActionResult> Edit(int id, [Bind("Id,ModisSourceId,Name")] ModisProduct modisProduct) { if (id != modisProduct.Id) { return(NotFound()); } if (ModelState.IsValid) { try { _context.Update(modisProduct); await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!ModisProductExists(modisProduct.Id)) { return(NotFound()); } else { throw; } } return(RedirectToAction(nameof(Index))); } ViewData["ModisSourceId"] = new SelectList(_context.ModisSource, "Id", "Name", modisProduct.ModisSourceId); return(View(modisProduct)); }
public async Task <IActionResult> Create([Bind("Id,ModisSourceId,Name")] ModisProduct modisProduct) { if (ModelState.IsValid) { _context.Add(modisProduct); await _context.SaveChangesAsync(); return(RedirectToAction(nameof(Index))); } ViewData["ModisSourceId"] = new SelectList(_context.ModisSource, "Id", "Name", modisProduct.ModisSourceId); return(View(modisProduct)); }
private static void ModisMosaic(string Folder) { string modisListFile = Directory.EnumerateFiles(Folder, "*listfile*", SearchOption.TopDirectoryOnly).FirstOrDefault(), index = ModisDataSetIndex.ToString().PadLeft(2, '0'); string arguments = $"-o {ModisSource}_{ModisProduct.Replace(".", "")}_B{index}_{ModisDataSet}.tif" + $" -s \"{ModisDataSetIndex.ToString()}\"" + $" \"{modisListFile}\""; GDALExecute( CMDPath, "modis_mosaic.py", Folder, arguments); }
public void StartDownloadAll() { DateTime dateMin = new DateTime(2100, 12, 31); ModisProduct modisProductToDownload = new ModisProduct(); foreach (ModisProduct modisProduct in modisProducts) { DateTime dateCurrent = GetProductLastDate(modisProduct).AddDays(modisProduct.Period); if (dateCurrent < dateMin) { dateMin = dateCurrent; modisProductToDownload = modisProduct; } } StartDownloadProduct(modisProductToDownload); }
private static void Publish(string Folder) { foreach (string file in Directory.EnumerateFiles(Folder, $"*{ModisProjection}*.tif", SearchOption.TopDirectoryOnly)) { // move to GeoServer string fileGeoServer = Path.Combine(GeoServerModisDataDir, Path.GetFileName(file)); File.Move( file, fileGeoServer ); // publish string layerName = Path.GetFileNameWithoutExtension(fileGeoServer); // store string publishParameters = $" -v -u" + $" {GeoServerUser}:{GeoServerPassword}" + $" -POST -H \"Content-type: text/xml\"" + $" -d \"<coverageStore><name>{layerName}</name><type>GeoTIFF</type><enabled>true</enabled><workspace>{GeoServerWorkspace}</workspace><url>" + $"/data/{GeoServerWorkspace}/{layerName}.tif</url></coverageStore>\"" + $" {GeoServerURL}rest/workspaces/{GeoServerWorkspace}/coveragestores?configure=all"; CurlExecute( CMDPath, publishParameters); // layer publishParameters = $" -v -u" + $" {GeoServerUser}:{GeoServerPassword}" + $" -PUT -H \"Content-type: text/xml\"" + $" -d \"<coverage><name>{layerName}</name><title>{layerName}</title><defaultInterpolationMethod><name>nearest neighbor</name></defaultInterpolationMethod></coverage>\"" + $" \"{GeoServerURL}rest/workspaces/{GeoServerWorkspace}/coveragestores/{layerName}/coverages?recalculate=nativebbox\""; CurlExecute( CMDPath, publishParameters); // style string index = ModisDataSetIndex.ToString().PadLeft(2, '0'), style = $"{GeoServerWorkspace}:{ModisSource}_{ModisProduct.Replace(".", "")}_B{index}_{ModisDataSet}"; publishParameters = $" -v -u" + $" {GeoServerUser}:{GeoServerPassword}" + $" -X PUT -H \"Content-type: text/xml\"" + $" -d \"<layer><defaultStyle><name>{style}</name></defaultStyle></layer>\"" + $" {GeoServerURL}rest/layers/{GeoServerWorkspace}:{layerName}.xml"; CurlExecute( CMDPath, publishParameters); } }
public DateTime GetProductLastDate(ModisProduct ModisProduct) { string dateFile = Path.Combine(textBoxArchiveDirectory.Text, ModisProduct.GetProductWithoutVersion()); dateFile = Path.ChangeExtension(dateFile, "txt"); if (!File.Exists(dateFile)) { return(ModisProduct.StartDate.AddDays(-ModisProduct.Period)); } string s_lastDate = File.ReadAllText(dateFile), s_year = s_lastDate.Split('-')[0], s_month = s_lastDate.Split('-')[1], s_day = s_lastDate.Split('-')[2]; int year = Convert.ToInt32(s_year), month = Convert.ToInt32(s_month), day = Convert.ToInt32(s_day); return(new DateTime(year, month, day)); }
private static void Anomaly(string Folder) { foreach (string FileCalc in Directory.EnumerateFiles(GeoServerModisDataDir, "*.tif", SearchOption.TopDirectoryOnly)) { if (FileCalc.Contains("Anomaly") || FileCalc.Contains("BASE")) { continue; } // calculate anomaly string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(FileCalc), anomalyFile = Path.Combine(GeoServerModisDataDir, Path.ChangeExtension(fileNameWithoutExtension + "_Anomaly", "tif")), baseFile = Path.Combine(GeoServerModisDataDir, Path.ChangeExtension($"ABASE{fileNameWithoutExtension.Substring(5)}", "tif")), letters = "ABCDEFGHIJKLMNOPQRSTUVWXY"; // check if anomaly already exists if (File.Exists(anomalyFile)) { continue; } // check if base layer for anomaly calculation already exists, if no then try to create it string arguments = "--co COMPRESS=LZW"; if (!File.Exists(baseFile)) { // check if base layers for base calculation already exist bool baseExists = true; for (int year = AnomalyStartYear; year <= AnomalyFinishYear; year++) { string baseYearFile = Path.Combine(GeoServerModisDataDir, Path.ChangeExtension(fileNameWithoutExtension.Remove(1, 4).Insert(1, year.ToString()), "tif")); if (!File.Exists(baseYearFile)) { baseExists = false; break; } } if (!baseExists) { continue; } // create base file to day for (int year = AnomalyStartYear; year <= AnomalyFinishYear; year++) { int letterIndex = year - AnomalyStartYear; string baseYearFile = Path.ChangeExtension(fileNameWithoutExtension.Remove(1, 4).Insert(1, year.ToString()), "tif"); arguments += $" -{letters[letterIndex]} {Path.GetFileName(baseYearFile)}"; } arguments += $" --outfile={Path.GetFileName(baseFile)}"; arguments += $" --calc=\"(("; for (int year = AnomalyStartYear; year <= AnomalyFinishYear; year++) { int letterIndex = year - AnomalyStartYear; arguments += $"{letters[letterIndex]}+"; } arguments = arguments.Remove(arguments.Length - 1); arguments += $")/{(AnomalyFinishYear - AnomalyStartYear + 1).ToString()})\""; GDALExecute( CMDPath, "gdal_calc.py", Folder, arguments); } // calculate arguments = "--co COMPRESS=LZW"; arguments += $" -{letters[0]} {Path.GetFileName(baseFile)}"; arguments += $" -{letters[1]} {Path.GetFileName(FileCalc)} "; arguments += $"--outfile={Path.GetFileName(anomalyFile)} "; arguments += $"--calc=\"(B-A)*0.01\""; GDALExecute( CMDPath, "gdal_calc.py", Folder, arguments); // publish string layerName = Path.GetFileNameWithoutExtension(anomalyFile); // store string publishParameters = $" -v -u" + $" {GeoServerUser}:{GeoServerPassword}" + $" -POST -H \"Content-type: text/xml\"" + $" -d \"<coverageStore><name>{layerName}</name><type>GeoTIFF</type><enabled>true</enabled><workspace>{GeoServerWorkspace}</workspace><url>" + $"/data/{GeoServerWorkspace}/{layerName}.tif</url></coverageStore>\"" + $" {GeoServerURL}rest/workspaces/{GeoServerWorkspace}/coveragestores?configure=all"; CurlExecute( CMDPath, publishParameters); // layer publishParameters = $" -v -u" + $" {GeoServerUser}:{GeoServerPassword}" + $" -PUT -H \"Content-type: text/xml\"" + $" -d \"<coverage><name>{layerName}</name><title>{layerName}</title><defaultInterpolationMethod><name>nearest neighbor</name></defaultInterpolationMethod></coverage>\"" + $" \"{GeoServerURL}rest/workspaces/{GeoServerWorkspace}/coveragestores/{layerName}/coverages?recalculate=nativebbox\""; CurlExecute( CMDPath, publishParameters); // style string index = ModisDataSetIndex.ToString().PadLeft(2, '0'), style = $"{GeoServerWorkspace}:{ModisSource}_{ModisProduct.Replace(".", "")}_B{index}_{ModisDataSet}_Anomaly"; publishParameters = $" -v -u" + $" {GeoServerUser}:{GeoServerPassword}" + $" -X PUT -H \"Content-type: text/xml\"" + $" -d \"<layer><defaultStyle><name>{style}</name></defaultStyle></layer>\"" + $" {GeoServerURL}rest/layers/{GeoServerWorkspace}:{layerName}.xml"; CurlExecute( CMDPath, publishParameters); } }
public void DownloadProduct(ModisProduct ModisProduct, DateTime Date) { Log($"{ModisProduct.GetProductWithoutVersion()} {Date.ToString("yyyy-MM-dd")} download started!"); ClearBufer(); bool ok = false; while (!ok) { try { string resource = $"https://n5eil02u.ecs.nsidc.org/egi/request?" + $"short_name={ModisProduct.GetProductWithoutVersion()}&" + $"version={ModisProduct.GetProductVersion()}&" + $"time={Date.ToString("yyyy-MM-dd")},{Date.ToString("yyyy-MM-dd")}&" + $"bounding_box={textBoxBoundingBox.Text}&" + $"agent=NO&" + $"page_size=2000", urs = "https://urs.earthdata.nasa.gov", username = "******", password = "******"; CookieContainer myContainer = new CookieContainer(); CredentialCache cache = new CredentialCache(); cache.Add(new Uri(urs), "Basic", new NetworkCredential(username, password)); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(resource); request.Method = "GET"; request.Credentials = cache; request.CookieContainer = myContainer; request.PreAuthenticate = false; request.AllowAutoRedirect = true; HttpWebResponse response = (HttpWebResponse)request.GetResponse(); long length = response.ContentLength; string type = response.ContentType; Stream stream = response.GetResponseStream(); string fileName = response.Headers["Content-Disposition"].Replace("attachment; filename=", String.Empty).Replace("\"", String.Empty); using (Stream s = File.Create(Path.Combine(textBoxArchiveDirectory.Text, "Bufer", fileName))) { stream.CopyTo(s); } stream.Close(); MoveFilesToArchive(); SaveProductLastDate(ModisProduct, Date); ok = true; } catch (WebException webException) { if ((HttpWebResponse)webException.Response != null) { if (((HttpWebResponse)webException.Response).StatusCode == HttpStatusCode.NotImplemented) { Log($"{ModisProduct.GetProductWithoutVersion()} {Date.ToString("yyyy-MM-dd")} download error: " + $"{((HttpWebResponse)webException.Response).StatusCode} ({((HttpWebResponse)webException.Response).StatusDescription})"); SaveProductLastDate(ModisProduct, Date); ok = true; } } } catch (Exception exception) { Log($"{ModisProduct.GetProductWithoutVersion()} {Date.ToString("yyyy-MM-dd")} download error: {exception.Message}"); } } Log($"{ModisProduct.GetProductWithoutVersion()} {Date.ToString("yyyy-MM-dd")} download finished!"); }