niedziela, 17 listopada 2013

GDAL + c#

GDAL czyli  Geospatial Data Abstraction Library to zbiór narzędzi umożliwiających m.in. zaawansaowane operacje na danych rastrowych. Oprócz standardowych aplikacji uruchamianych w trybie konsoli dostępne są również biblioteki, które można podpiąć do aplikacji opartych na .NET:
http://trac.osgeo.org/gdal/wiki/GdalOgrInCsharp

Podążając za linkiem  build SDK packages znajdziesz komplet skompilowanych bibliotek dla poszczególnych wersji .NET, np. MSVC2010 (Win64) -stable dla .NET 4.0 lub MSVC2008 (Win64) -stable dla .NET 3.5.



Polecam kompletny zestaw Compiled binaries in a single .zip package. Po rozpakowaniu w katalogu \bin znajdziesz wszystkie natywne pliki *.dll, a w katalogu \bin\gdal\csharp pliki *.dll zarządzane przez .NET (są tam też przykłądowe aplikacje *.exe napisane w c#).

Jeżeli chcesz napisać swój własny program w c# będziesz potrzebować wszystkich plików *.dll z katalogów \bin\bin\gdal\csharp (pliki *.exe nie są potrzebne). Jeżeli chcesz uniknąć problemu z błędem dostępu do bibliotek natywnych (OSGeo.GDAL.GdalPINVOKE) to albo dodaj ktalogi z bibiliotekami do systemowej zmiennej PATH albo skopiuj te pliki *.dll  do katalogu z Twoją aplikacją, np. \bin\Release. Warto też zmienić domyślne ustawienia kompilacji projektu z .NET 3.5 Client Profile na .NET 3.5.



Dla testu czy wszystko działa poprawnie dodaj do swojego projektu referencje do gdal_csharp.dll, a następnie dodaj kilka linijek kodu:


private void button1_Click(object sender, EventArgs e)
{
    Gdal.AllRegister();

    Dataset ds = Gdal.Open(@"C:\data\OrtoFoto.tif", Access.GA_ReadOnly);
    if (ds == null)
    {
        MessageBox.Show("Nie można otworzyć pliku");
        return;
    }
    MessageBox.Show("  Projection: " + ds.GetProjectionRef()
        + "\n\n  RasterCount: " + ds.RasterCount
        + "\n\n  RasterSize (" + ds.RasterXSize + "," + ds.RasterYSize + ")");
}