CSV для Geotiff с использованием GDAL в C # - PullRequest
0 голосов
/ 16 января 2019

Первый пост здесь, извинения за неправильный этикет. Я очень новичок в GDAL.

Как видно из заголовка, я пытаюсь взять данные в виде CSV-файла и создать геотиф из этих данных. Файл csv имеет следующую структуру: более 40 тыс. Строк:

id,Longitude,Latitude,Z_GPS,CA
1,-99.5228,49.9973,1278.8067,1917.5495

В настоящее время я работаю с консольным приложением для тестирования, но в конечном итоге оно станет частью веб-приложения. Я искал сеть для информации, и кажется, что это проще сделать на python, но мне было поручено написать его на c #. Там также, кажется, мало документации о том, как использовать GDAL в C #. Я использую GDAL.NET, установленный через Nuget с использованием Windows 10. Ниже мой код:

using System;
using System.IO;
using CsvHelper;
using OSGeo.GDAL;
using Ogr = OSGeo.OGR.Ogr;

namespace CSV_To_GeoTiff
{
  public class Program
  {
    static void Main(string[] args)
    {
        //Configures gdal and sets up the drivers
        GdalConfiguration.ConfigureGdal();

        //Declare an empty dataset
        OSGeo.GDAL.Dataset ds;

        //Path and string setup
        string path = Path.GetFullPath(Path.Combine(Directory.GetCurrentDirectory(), @"..\..\.."));
        string csvFile = "Ca.csv";
        string vrtFile = "Ca.vrt";
        string tifFile = "Ca.tif";
        string lyr_name = "";
        //DirectoryInfo oDir = Directory.CreateDirectory(path + @"\Output");

        Console.WriteLine(path);
        Console.ReadLine();

        //Read the csv file and grab the name of the last column to be used as the layer name of the geotiff
        using (var reader = new StreamReader(path + "\\" + csvFile))
        using (var csv = new CsvReader(reader))
        {
            csv.Read();
            csv.ReadHeader();
            string[] headerRow = csv.Context.HeaderRecord;
            lyr_name = headerRow[headerRow.Length - 1];
        }

        //Set up the vrt file with appropriate tags from the csv data
        string[] vrtTags = { "<OGRVRTDataSource>",
                        "\t" + $"<OGRVRTLayer name=\"{lyr_name}\">",
                        "\t\t" + $"<SrcDataSource>{csvFile}</SrcDataSource>",
                        "\t\t" +"<GeometryType>wkbPoint</GeometryType>",
                        "\t\t" + "<LayerSRS>WGS84</LayerSRS>",
                        "\t\t" + $"<GeometryField encoding=\"PointFromColumns\" x=\"Longitude\" y=\"Latitude\" z=\"{lyr_name}\"/>",
                        "\t" + "</OGRVRTLayer>",
                        "</OGRVRTDataSource>"
                    };

        string vrtPath = path + @"\Output\" + vrtFile;
        string csvPath = path + "\\" +csvFile;

        //Create and write the tags into the VRT file in an output directory for testing
        File.WriteAllLines(vrtPath, vrtTags);            

        ds = Gdal.OpenEx(vrtPath, 0, null, null, null);

        //Creates the raster file in the output folder
        Gdal.wrapper_GDALGrid(path + @"\Output\"+ tifFile, ds, null, null, string.Empty);

    }
  }
}

Я получаю сообщение об ошибке в строке Gdal.wrapper_GDALGrid, в которой говорится "System.ApplicationException: 'Не удалось открыть источник данных` Ca.csv'. '". Что для меня означает, что файл vrt читается правильно и пытается открыть файл csv, но что-то идет не так. Я не знаю, что я делаю неправильно или как это исправить. Я поместил файл csv в то же место, что и файл vrt (в выходном каталоге), поскольку я предполагаю, что он должен находиться в том же месте.

Любая помощь будет принята с благодарностью и спасибо за ваше время.

...