.NET用の無料のオープンソースシェープファイルライターはありますか?


12

.Netからシェープファイルを作成して書き込むことができる、よく文書化されたオープンソースライブラリを探しています。より低いレバーアクセスが必要です。つまり、機能ごとに機能を記述できる必要があります。

そのようなライブラリは存在しますか?

私は以下を調査し、発見しました:

  • SharpMapはv 2.0でシェープファイルに書き込むと主張していますが、そのバージョンはリリースされていません。
  • NTSにはドキュメントはまったくありません。
  • Catfoodシェープファイルリーダーは読み取り専用アクセスを提供します。

私に希望はありますか?新しいシェープファイルを作成するために使用できるライブラリはありますか?


1
NTSにはドキュメンテーションがあります-そのコード(たとえばcode.google.com/p/nettopologysuite/source/browse/trunk/…)といくつかのテストにあります。JTSドキュメントを読むと役立つ場合があります。
BradHards

回答:


5

私はそれを自分で使用していませんが、DotSpatialのドキュメントをすぐに見て、あなたが望むことをできるはずです。

必要なものがわかっている場合(私には必要ありません)、NuGetには個々のアセンブリがあります。

少なくとも可能性を示すサンプルを次に示します。より読みやすいサンプルを作成するWKTリーダー/コンバーターがあればいいのですが、それは欠けているようです。


1
私はあなたのアドバイスに従い、私がやりたいことを示しているこのドキュメント(dotspatial.codeplex.com/…)を見つけました。
Devdatta Tengshe

9

あなたの痛みが分かります。NetTopologySuite(v1.13)でも同じようなことを経験し、単体テストである程度の成功を収めました。

最初に、DSシェープファイル操作に固有の同様の質問で参照されたDotSpatialライブラリをチェックアウトします。

私はNTSライブラリに個人的に満足しています。オブジェクトモデルがわかれば、何かをまとめるのはそれほど面倒ではありません。このトピックは複数回参照される可能性があるため、NTSからシェープファイルを作成するためのクイックコードダンプがあります。

1)NTS(1.13.0)バイナリをダウンロードします

2)次のアセンブリを参照します。

-GeoAPI、NetTopologySuite、NetTopologySuite.IO、NetTopologySuite.IO.GeoTools(この最後の1つが必要であると判断するのにかかった時間を推測します)

3)いくつかのコードを書く(これは10分間のハックジョブです)

NetTopologySuite、NetTopologySuite.IO、NetTopologySuite.Features、GeoAPI、GeoAPI.Geometriesのusingステートメントを追加します(これらをフォーマットするためにSOを取得する方法がわかりません)

        string path = @"C:\data\atreides";
        string firstNameAttribute = "firstname";
        string lastNameAttribute = "lastname";

        //create geometry factory
        IGeometryFactory geomFactory = NtsGeometryServices.Instance.CreateGeometryFactory();

        //create the default table with fields - alternately use DBaseField classes
        AttributesTable t1 = new AttributesTable();
        t1.AddAttribute(firstNameAttribute, "Paul");
        t1.AddAttribute(lastNameAttribute, "Atreides");

        AttributesTable t2 = new AttributesTable();
        t2.AddAttribute(firstNameAttribute, "Duncan");
        t2.AddAttribute(lastNameAttribute, "Idaho");

        //create geometries and features
        IGeometry g1 = geomFactory.CreatePoint(new Coordinate(300000, 5000000));
        IGeometry g2 = geomFactory.CreatePoint(new Coordinate(300200, 5000300));

        Feature feat1 = new Feature(g1, t1);
        Feature feat2 = new Feature(g2, t2);

        //create attribute list
        IList<Feature> features = new List<Feature>() { feat1, feat2 };
        ShapefileDataWriter writer = new ShapefileDataWriter(path) { Header = ShapefileDataWriter.GetHeader(features[0], features.Count) };

        System.Collections.IList featList = (System.Collections.IList)features;
        writer.Write(featList);

そのため、十分に文書化されていませんが、うまくいけばかなりポイント&シュートです。


私は、具体的DotSpatialのような応答を忘れgis.stackexchange.com/questions/5816/...が、私は、NTSとかなり内容です。
ウルフオドラデ

その質問に答えてくれたので、私にこれを導きました:dotspatial.codeplex.com/…、私が探していたものでした。
Devdatta Tengshe

2

gdalにはac#ライブラリがあります:http ://trac.osgeo.org/gdal/wiki/GdalOgrInCsharp


このC#バインディングを使用して、機能ごとにシェープファイル機能を作成できるドキュメントをいくつか教えていただけますか?試しましたが、何も見つかりませんでした。
Devdatta Tengshe

1
一般に、SWIGバインディングは十分に文書化されていませんが、github.com / OSGeo / gdal / tree / trunk / gdal / swig / csharp / appsには多くの例があり、ほとんどのコードはC ++に非常に類似しています。バージョン。
scw


1

MapWinGISも検討できます。

MapWinGIS.ocxは、GISおよびマッピング機能をWindows Formsベースのアプリケーションに提供するために使用されます。MapWinGIS.ocxは、Visual Basic、C#、Delphi、またはActiveXをサポートする他の言語のWindowsフォームに追加できるActiveXコントロールとアプリケーションプログラマーインターフェイス(API)をプログラミングする無料のオープンソースC ++ベースの地理情報システムです。地図付き。


1
+1。以下は、ポリゴンシェープファイルの作成を示すサンプルです。注意すべきことの1つは、MapWinGIS 6アルファがその中心でDotSpatialを使用していることです。UIの側面が必要ない場合は、私の答えのように、関連するアセンブリをDotSpatialライブラリから取得する方が簡単で軽量かもしれません。
blah238


1

たぶんストレッチが...

PyShpは、純粋なPythonで機能レベルのシェープファイルコントロール以上を提供します:http ://code.google.com/p/pyshp/

IronPythonでは、.NET CLRで純粋なPythinスクリプトを実行できます:http ://ironpython.net/

IronPythonスクリプトを次のスレッドのような.Netライブラリに変換します:https : //stackoverflow.com/questions/1578010/ironpython-2-6-py-exe/9609120#9609120


1

これはすでに回答されていますが、後日これを表示する人への提案は、機能ごとにシェープファイルを作成できるEGIS(Easy GIS)です。

ShapeFileWriter sfw = ShapeFileWriter.CreateWriter(dir,fileName,shapeType,dataFieldHeadings);
sfw.AddRecord(pointArray, pointCount, fieldData);

これにより、選択したシェープファイルに1つの機能が追加され、AddRecordメソッドには7つのオーバーロードがあります。


これを行う方法を示すコードスニペットを投稿できますか?リンクが機能しなくなった場合に備えて、現在の状態での回答は単独では成り立ちません。
Devdatta Tengshe
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.