Example #1
0
        public void StartDownloadProduct(ModisProduct ModisProduct)
        {
            DateTime dateLast     = GetProductLastDate(ModisProduct),
                     dateDownload = dateLast.AddDays(ModisProduct.Period);

            DownloadProduct(ModisProduct, dateDownload);
        }
Example #2
0
        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));
        }
Example #5
0
        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);
        }
Example #6
0
        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);
        }
Example #7
0
 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);
     }
 }
Example #8
0
        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));
        }
Example #9
0
        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);
            }
        }
Example #10
0
        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!");
        }