'****************************************************************************** '* '* Name: GdalConfiguration.cs.pp '* Project: GDAL CSharp Interface '* Purpose: A static configuration utility class to enable GDAL/OGR. '* Author: Felix Obermaier '* '****************************************************************************** '* Copyright (c) 2012, Felix Obermaier '* '* Permission is hereby granted, free of charge, to any person obtaining a '* copy of this software and associated documentation files (the "Software"), '* to deal in the Software without restriction, including without limitation '* the rights to use, copy, modify, merge, publish, distribute, sublicense, '* and/or sell copies of the Software, and to permit persons to whom the '* Software is furnished to do so, subject to the following conditions: '* '* The above copyright notice and this permission notice shall be included '* in all copies or substantial portions of the Software. '* '* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS '* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, '* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL '* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER '* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING '* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER '* DEALINGS IN THE SOFTWARE. '*****************************************************************************/ Option Infer On Imports System Imports System.IO Imports System.Reflection Imports Gdal = OSGeo.GDAL.Gdal Imports Ogr = OSGeo.OGR.Ogr Namespace $rootnamespace$ ''' ''' Configuration class for GDAL/OGR ''' Public NotInheritable Partial Class GdalConfiguration Private Sub New() End Sub Private Shared _configuredOgr As Boolean Private Shared _configuredGdal As Boolean ''' ''' Function to determine which platform we're on ''' Private Shared Function GetPlatform() As String Return If(IntPtr.Size = 4, "x86", "x64") End Function ''' ''' Construction of Gdal/Ogr ''' Shared Sub New() Dim executingAssemblyFile = new Uri(Assembly.GetExecutingAssembly().GetName().CodeBase).LocalPath Dim executingDirectory = Path.GetDirectoryName(executingAssemblyFile) If String.IsNullOrEmpty(executingDirectory) Then Throw New InvalidOperationException("cannot get executing directory") End If Dim gdalPath = Path.Combine(executingDirectory, "gdal") Dim nativePath = Path.Combine(gdalPath, GetPlatform()) ' Prepend native path to environment path, to ensure the ' right libs are being used. Dim path__1 = Environment.GetEnvironmentVariable("PATH") path__1 = nativePath & ";" & Path.Combine(nativePath, "plugins") & ";" & path__1 Environment.SetEnvironmentVariable("PATH", path__1) ' Set the additional GDAL environment variables. Dim gdalData = Path.Combine(gdalPath, "data") Environment.SetEnvironmentVariable("GDAL_DATA", gdalData) Gdal.SetConfigOption("GDAL_DATA", gdalData) Dim driverPath = Path.Combine(nativePath, "plugins") Environment.SetEnvironmentVariable("GDAL_DRIVER_PATH", driverPath) Gdal.SetConfigOption("GDAL_DRIVER_PATH", driverPath) Environment.SetEnvironmentVariable("GEOTIFF_CSV", gdalData) Gdal.SetConfigOption("GEOTIFF_CSV", gdalData) Dim projSharePath = Path.Combine(gdalPath, "share") Environment.SetEnvironmentVariable("PROJ_LIB", projSharePath) Gdal.SetConfigOption("PROJ_LIB", projSharePath) End Sub ''' ''' Method to ensure the static constructor is being called. ''' ''' Be sure to call this function before using Gdal/Ogr/Osr Public Shared Sub ConfigureOgr() If _configuredOgr Then Return End If ' Register drivers Ogr.RegisterAll() _configuredOgr = True PrintDriversOgr() End Sub ''' ''' Method to ensure the static constructor is being called. ''' ''' Be sure to call this function before using Gdal/Ogr/Osr Public Shared Sub ConfigureGdal() If _configuredGdal Then Return End If ' Register drivers Gdal.AllRegister() _configuredGdal = True PrintDriversGdal() End Sub Private Shared Sub PrintDriversOgr() #If DEBUG Then Dim num = Ogr.GetDriverCount() For i As var = 0 To num - 1 Dim driver = Ogr.GetDriver(i) Console.WriteLine(String.Format("OGR {0}: {1}", i, driver.name)) Next #End If End Sub Private Shared Sub PrintDriversGdal() #If DEBUG Then Dim num = Gdal.GetDriverCount() For i As var = 0 To num - 1 Dim driver = Gdal.GetDriver(i) Console.WriteLine(String.Format("GDAL {0}: {1}-{2}", i, driver.ShortName, driver.LongName)) Next #End If End Sub End Class End Namespace