예제 #1
0
        private void WritePointData(string outputfile, List <string> points)
        {
            HandleFileInput fileops = new HandleFileInput();

            System.IO.FileStream csvfilestream;
            //crossing streams...
            //it's okay as long as caller remembers to wrap it in using() { }
            using (csvfilestream = fileops.CheckandCreateCSV(outputfile))
            {
                if (csvfilestream == null)
                {
                    Console.WriteLine("    [-] Could not create file for editing. Exiting");
                    return;
                }
                foreach (var point in points)
                {
                    byte[] datatowrite = new UTF8Encoding(true).GetBytes(point);
                    csvfilestream.Write(datatowrite, 0, datatowrite.Length);
                }
            }
            // in case the file stream is still open
            if (csvfilestream != null)
            {
                csvfilestream.Dispose();
            }
            return;
        }
예제 #2
0
        private IEnumerable <List <string> > ReturnClusterCoords(string filepath)
        {
            HandleFileInput fileinput = new HandleFileInput();
            //more LINQ weirdness
            //group list elements into new lists by third comma-separated element in sublist, which represents the tile name
            //shouldn't be needed anymore now that csv's are output per-tile, will probably remove
            var groupedlist = from l in HandleFileInput.ReadFromCSV(filepath).Skip(1)
                              let x = l.Split(',')
                                      group l by x[6] into g
                                      select g.ToList();

            return(groupedlist);
        }
예제 #3
0
        static void Main(string[] args)
        {
            int                 row            = 0;
            int                 col            = 0;
            string              inputdirectory = string.Empty;
            string              outputfile     = string.Empty;
            string              argshelp       = string.Empty;
            string              maskshpfile    = string.Empty;
            List <string>       searchresults;
            List <string>       masktilenames;
            List <string>       maskresults;
            HandleFileInput     fileops       = new HandleFileInput();
            FindNoDataPixels    findpix       = new FindNoDataPixels();
            CreateConvexHullShp convexhull    = new CreateConvexHullShp();
            GetSpatialReference getspatialref = new GetSpatialReference();
            GenerateMaskList    maskinput     = new GenerateMaskList();

            argshelp = String.Concat(argshelp, "Mandatory Arguments:\r\n");
            argshelp = String.Concat(argshelp, "-i\t\t\tinput directory (must be a valid, existing directory)\r\n");
            argshelp = String.Concat(argshelp, "-o\t\t\toutput file (.shp format)\r\n");
            argshelp = String.Concat(argshelp, "Optional Arguments:\r\n");
            argshelp = String.Concat(argshelp, "-m\t\t\tmask shapefile to limit which tiffs are processed");
            //make sure program has been provided the correct args
            if (args.Length < 4)
            {
                Console.WriteLine(argshelp);
                return;
            }
            if (!(args.Contains <String>("-i") && args.Contains <String>("-o")))
            {
                Console.WriteLine(argshelp);
                return;
            }
            for (var x = 0; x < args.Count(); x++)
            {
                switch (args[x].Trim())
                {
                case "-i":
                    inputdirectory = args.Length == (x + 1) ? "" : args[++x];
                    break;

                case "-o":
                    outputfile = args.Length == (x + 1) ? "" : args[++x];
                    break;

                case "-m":
                    maskshpfile = args.Length == (x + 1) ? "" : args[++x];
                    break;
                }
            }
            if (!String.IsNullOrEmpty(inputdirectory))
            {
                // get the file attributes for file or directory
                FileAttributes attr = new FileAttributes();
                try
                {
                    attr = File.GetAttributes(inputdirectory);
                }
                catch (FileNotFoundException)
                {
                    Console.WriteLine("    [-] Directory does not exist");
                    return;
                }
                if ((attr & FileAttributes.Directory) != FileAttributes.Directory)
                {
                    Console.WriteLine("    [-] Argument must be a directory");
                    return;
                }
            }
            else
            {
                Console.WriteLine(argshelp);
                return;
            }
            if (!String.IsNullOrEmpty(outputfile))
            {
                if (!(Path.GetExtension(outputfile) == ".shp"))
                {
                    Console.WriteLine("    [-] Argument must be a .shp file.");
                    return;
                }
                if (File.Exists(outputfile))
                {
                    Console.WriteLine("    [-] {0} already exists.", outputfile);
                    return;
                }
            }
            else
            {
                Console.WriteLine(argshelp);
                return;
            }
            if (!String.IsNullOrEmpty(maskshpfile))
            {
                if (!(Path.GetExtension(maskshpfile) == ".shp"))
                {
                    Console.WriteLine("    [-] Argument must be a .shp file.");
                    return;
                }
                if (File.Exists(outputfile))
                {
                    Console.WriteLine("    [-] {0} already exists.", outputfile);
                    return;
                }
            }

            //register gdal/ogr drivers
            GdalConfiguration.ConfigureGdal();
            GdalConfiguration.ConfigureOgr();

            //find all tif files in directory from args
            Console.WriteLine(">Searching directory for tiffs...        ");
            searchresults = fileops.GetTifFilePathsFromDirectory(inputdirectory);
            if (!searchresults.Any())
            {
                Console.WriteLine("    [-] Invalid directory or no tifs found. Exiting.");
                return;
            }
            else
            {
                Console.WriteLine("    [+] {0} Files found.", searchresults.Count);
            }
            if (!String.IsNullOrEmpty(maskshpfile))
            {
                Console.WriteLine(">Finding files matching shapefile features...");
                maskresults   = new List <string>();
                masktilenames = maskinput.GetTileNameFromShapefile(maskshpfile);
                foreach (var filename in searchresults)
                {
                    foreach (var tilename in masktilenames)
                    {
                        if (tilename.Trim() == Path.GetFileNameWithoutExtension(filename))
                        {
                            maskresults.Add(filename);
                        }
                    }
                }
                searchresults = maskresults;
                if (!searchresults.Any())
                {
                    Console.WriteLine("    [-] Could not find any matches. Exiting.");
                    return;
                }
            }

            //find the coordinates of all pixels that are likely to be data voids
            Console.WriteLine(">Parsing tiffs for black pixels...    ");
            string outputdir    = Path.GetDirectoryName(outputfile);
            string csvdirectory = fileops.CreateCSVDirectory(outputdir);

            if (String.IsNullOrEmpty(csvdirectory))
            {
                Console.WriteLine("    [-] Could not create output files. Exiting.");
                return;
            }
            row = Console.CursorTop - 1;
            col = Console.CursorLeft + 35;
            var spinner = new Spinner(col, row);

            spinner.Start();
            Stopwatch stopwatch = new Stopwatch();

            stopwatch.Start();
            int i = 0;

            foreach (var result in searchresults)
            {
                Console.SetCursorPosition((Console.CursorLeft), (Console.CursorTop));
                Console.Write("    [+] {0} out of {1} files processed", i, searchresults.Count);
                findpix.FindNoDataXYCoords(result, csvdirectory);
                i += 1;
            }
            spinner.Stop();
            stopwatch.Stop();
            TimeSpan ts = stopwatch.Elapsed;

            Console.WriteLine("    [+] Finished processing. Processing time: {0:hh\\:mm\\:ss}", ts);

            //see if any results were actually returned
            if (!ResultCoords.csvfiles.Any())
            {
                Console.WriteLine("    [-] No data voids found! Nothing left to do.");
                return;
            }

            //write output to shapefile
            //shp will contain multipoint features, one for each tiff
            Console.WriteLine(">Retrieving Projection Reference...");
            string spatialref = getspatialref.GetSpatialReferenceFromPath(searchresults.First());

            if (spatialref == null)
            {
                Console.WriteLine("    [-] Could not retrieve projection reference. Exiting.");
                return;
            }
            Console.WriteLine("    [+] Got projection reference.");
            Console.WriteLine(">Creating shapefile...");
            convexhull.CreateShapeFile(spatialref, outputfile);
            Console.WriteLine("    [+] Done!");

            Console.WriteLine(">Dissolving features...");
            string outshp = Path.ChangeExtension(outputfile, null) + "_dissolved.shp";

            convexhull.DissolveFeatures(outputfile, outshp, spatialref);
            Console.WriteLine("    [+] Done!");

            Console.WriteLine(">Cleaning Up...");
            try
            {
                Directory.Delete(csvdirectory, true);
            }
            catch (Exception)
            {
                Console.WriteLine("    [-] Could not delete temp data.");
            }
            Console.WriteLine("    [+] Done!");
        }