15

アプリケーションでgdal_csharp dll の使用を開始し、geotiff ファイルを読み取りました。しかし、それは言う:

The type initializer for 'OSGeo.GDAL.GdalPINVOKE' threw an exception.

それは私のコードです

string fileName = @"/path to geotiff file";

OSGeo.GDAL.Dataset DS = 
    OSGeo.GDAL.Gdal.Open(fileName, OSGeo.GDAL.Access.GA_ReadOnly);

誰でも助けることができますか?

編集:

私はこれらのdllを持っています

ここに画像の説明を入力

これは完全なエラー メッセージです。

ここに画像の説明を入力

読み込めませんと表示されますgdal_wrap。しかし、その dll をアプリケーションに追加しようとすると、次のメッセージが表示されます。

ここに画像の説明を入力

4

9 に答える 9

5

これを解決するために、ここで説明されているようにビルド済みのライブラリをダウンロードし、ここから FWTools を取得しました

私が使用したアンマネージ DLL は から\install_dir\FWTools2.4.7\bin、C# ラッパーは\install_dir\FWTools2.4.7\csharp.

gdal14.dll、最初のリンクで言及されているheremsvcp71.dllからmsvcr71.dll来ました。

あなたが受け取っているエラーはgdal_wrap.dll、その依存関係の1つを参照しています。その DLL を投入するdependsと、依存ライブラリの長いリストが見つかりました。私が FWTools ディストリビューションを使用しているため、このリストは長くなる可能性があることに注意してください。ソースからバージョンをビルドした場合、同じ原則が適用されますが、見た目が異なる場合があります。

上記のコードを自分のマシンで動作させるために、出力ディレクトリに次のファイルがありました。

gdal14.dll
gdalconst_csharp.dll
gdalconst_wrap.dll
gdal_csharp.dll
gdal_fw.dll
gdal_wrap.dll
geos_fw.dll
geotiff_fw.dll
hdf5dll.dll
hdf_fw.dll
jpeg12_osgeo.dll
jpeg_osgeo.dll
libcurl.dll
libeay32.dll
libexpat.dll
libmysql.dll
libpq.dll
libtiff_fw.dll
lti_dsdk_dll.dll
mfhdf_fw.dll
msvcp71.dll
msvcr71.dll
NCScnet_fw.dll
NCSEcw_fw.dll
NCSUtil_fw.dll
netcdf.dll
ogdi_32b1.dll
proj.dll
sqlite3.dll
ssleay32.dll
szlibdll.dll
xerces-c_2_7.dll
zlib1.dll
zlib_osgeo.dll

現在、これらは必ずしもすべて出力ディレクトリに存在する必要はありません - それらがパスのどこかにある限り (たとえば\Windows\System32)、問題ないはずです。

于 2013-02-05T08:51:59.947 に答える
5

私はそれが古い質問であることを知っていますが、私の答えが誰かを助けるかもしれないと信じています.

次のようにして、c# gdal を使用してサンプルを正常にコンパイルおよび実行できました。

  1. http://www.gisinternals.com/から GDAL SDK をダウンロードする (私の場合は 64 ビット)
  2. スクリプトを実行してSDKShell.bat、システム環境のパスなどを設定します。
  3. Visual Studio でプロジェクトを作成します。ダウンロードした SDK 内_csharp.dllにあるすべての .net dll (名前が で終わるもの) を参照します。\bin\gdal\csharp\
  4. Visual Studio プロジェクト設定のプラットフォーム ターゲットを x64 に設定して、不正な画像形式の例外を取り除きます。使用する SDK の 32 ビット バージョンを選択した場合、最後の手順は必要ありません。

fwtools をまったくインストールしませんでした。fw_tools の最後のビルドは比較的古いようで、sdk はまだ維持されています。

于 2015-12-09T14:47:27.230 に答える
3

これはかなり古い質問であることはわかっていますが、同じ問題を自分で調査した後、Googleでこれを見つけました。つまり、このエラーに関する検索では、これがまだトップ5に入っていることを考えると、更新するのに非常に関連性のあるページであることを意味します同じ問題を検索すると、大きな G が表示されます。

私の場合、和音を打ったのは「DeusExMachina25」と「Grzegorz Sławecki」からの回答でした。

NUGet で「シャープ マップ」の現在のビルドを利用するソフトウェアを作成しています (2016 年 6 月 24 日現在)。 Sharpmap チームが提供する GDAL パッケージ。

パッケージの NUGet インストーラーが構成クラスをインストールしていることに気付きませんでしたが、このスレッドを読んで、それがインストールされていることがわかった後、探しに行きました。

案の定、私のプロジェクトでファイル 'GdalConfiguration.cs' を見つけ、GDAL が正しく初期化されることを期待して、プロジェクトの適切な場所にその呼び出しを追加しました。

ただし、これを行った後も、同じ問題が発生しました。

そこで、追加したGDALルーチンの先頭にブレークポイントを設定し、ブレークポイントに到達するまで待ちました。

次に、メソッドをトレースしたところ、最終的に次の行が見つかりました。

var gdalPath = Path.Combine(executingDirectory, "gdal");

ファイルの64行目あたり。

これをたどると、構築されているパスが次のとおりであることに気付きました。

d:\geodata\maptest\maptest\bin\debug\gdal

しかし、NUGet インストーラーはすべての依存アセンブリを

d:\geodata\maptest\maptest\bin\debug

まさに私が期待していた場所です。

64 行目を次のように変更しました。

var gdalPath = Path.Combine(executingDirectory, "");

出来上がり、エラーはなくなり、すべてが機能し始めました。

他の方法でも行うことができ、gdal というフォルダーを作成し、そこにすべてをコピーしましたが、プロジェクトで「クリーン」を実行すると削除されてしまいます。

構成クラス以降、このパスに基づいてさまざまな環境変数を設定し、その 1 行をすばやく変更すると、GDAL データ ファイル、プラグイン、およびその他のいくつかのパスも修正されます。

于 2016-06-24T21:24:51.157 に答える
1

GDALライブラリへのパスをPATH環境変数に追加しましたか?http://vbkto.dyndns.org/sdk/?_sm_au_=iVVqjsHS2n46WP00からファイルをダウンロードしました。パスは次のとおりです:C:\ libs \ release-1600-gdal-1-9-mapserver-6-2\bin。

于 2013-02-14T13:20:39.937 に答える
1

Dependency Walker を使用して、gdal_csharp が取得しようとしているが取得できない dll があるかどうかを確認できます。

于 2013-01-29T17:56:44.837 に答える
0

GDAL の C# バインディングを使用するには、FWTools ( http://fwtools.maptools.org/から) と、システムに一致する最新のバイナリ ( http://vbkto.dyndns.org/から) のインストールが必要です。 SDK/ )。その後、FWTools の bin ディレクトリ (64 ビット システムの例: C:\Program Files (x86)\FWTools2.4.7\bin ) を PATH 変数に含め、必要な dll を含めることが重要です(質問gdal_csharp.dll言及されました)。 ) を Visual Studio プロジェクト参照に追加します。ここで完全なプロセスの概要を説明しました。

このプロセスは 32 ビットと 64 ビットのシステムで動作します。私は VS 2010 と 2012 でテストしました。

于 2013-05-06T21:16:41.310 に答える