Apakah ada Writer Shapefile opensource gratis untuk .NET?

12

Saya mencari OpenSource Library yang terdokumentasi dengan baik yang dapat membuat dan menulis ke shapefile dari .Net. Saya perlu akses tuas yang lebih rendah: yaitu saya harus dapat menulis fitur demi fitur.

Apakah perpustakaan semacam itu ada?

Saya telah menyelidiki dan menemukan yang berikut:

  • SharpMap mengklaim untuk menulis ke shapefile di v 2.0, tetapi versi itu belum dirilis.
  • NTS sama sekali tidak memiliki dokumentasi.
  • Pembaca shapefile Catfood menyediakan akses hanya baca.

Apakah ada harapan untuk saya? Apakah ada perpustakaan yang dapat digunakan untuk menulis shapefile baru?

Devdatta Tengshe
sumber
1
NTS memang memiliki dokumentasi - hanya di dalam kode (mis. Code.google.com/p/nettopologysuite/source/browse/trunk/… ) dan beberapa tes. Terkadang membaca dokumen JTS membantu.
BradHards

Jawaban:

5

Saya belum menggunakannya sendiri tetapi dengan cepat melihat dokumentasi untuk DotSpatial , sepertinya itu harus dapat melakukan apa yang Anda inginkan.

Ini memiliki rakitan individu di NuGet jika Anda tahu mana yang Anda butuhkan (yang saya tidak).

Berikut adalah contoh yang setidaknya menunjukkan kemungkinan. Akan lebih baik jika ada pembaca / konverter WKT untuk membuat sampel yang lebih mudah dibaca, tetapi itu tampaknya hilang.

blah238
sumber
1
Saya mengikuti saran Anda, dan menemukan dokumen ini ( dotspatial.codeplex.com/... ), yang menunjukkan apa yang ingin saya lakukan.
Devdatta Tengshe
9

Aku merasakan sakitmu. Saya mengalami hal yang sama dengan NetTopologySuite (v1.13) dan berhasil melihat tes unit.

Pertama, Anda mungkin memeriksa perpustakaan DotSpatial yang dirujuk dalam pertanyaan serupa khusus untuk operasi shapefile DS

Saya pribadi senang dengan perpustakaan NTS. Setelah Anda mengetahui model objek, tidak terlalu repot untuk menyatukan sesuatu. Karena topik ini kemungkinan akan direferensikan lebih dari sekali di sini ada dump kode cepat untuk menulis shapefile dari NTS.

1) Unduh Binari NTS (1.13.0)

2) Referensi majelis berikut:

-GeoAPI, NetTopologySuite, NetTopologySuite.IO, NetTopologySuite.IO.GeoTools (tebak berapa lama waktu yang diperlukan untuk mencari tahu yang terakhir ini diperlukan)

3) Tulis beberapa kode (ini adalah pekerjaan hack 10 menit)

tambahkan pernyataan menggunakan untuk NetTopologySuite, NetTopologySuite.IO, NetTopologySuite.Fitur, GeoAPI, GeoAPI.Geometries (maaf saya tidak tahu bagaimana cara mendapatkan SO untuk memformat ini)

        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);

Jadi, tidak terdokumentasi dengan baik tetapi cukup point & shoot setelah Anda pergi.

WolfOdrade
sumber
Saya lupa tentang respons yang sama khusus untuk DotSpatial gis.stackexchange.com/questions/5816/… , tapi saya cukup puas dengan NTS.
WolfOdrade
Adalah Anda menjawab pertanyaan itu, yang membawa saya ke ini: dotspatial.codeplex.com/… , yang merupakan apa yang saya cari.
Devdatta Tengshe
2

Tampak gdal memiliki ac # library: http://trac.osgeo.org/gdal/wiki/GdalOgrInCsharp

CLJ
sumber
Bisakah Anda menunjukkan kepada saya beberapa dokumentasi, di mana Anda dapat menulis fitur shapefile berdasarkan fitur, menggunakan C # binding ini? Saya sudah mencoba, tetapi belum menemukan apa pun.
Devdatta Tengshe
1
Secara umum binding SWIG tidak didokumentasikan dengan baik, tetapi ada sejumlah contoh yang baik di github.com/OSGeo/gdal/tree/trunk/gdal/swig/csharp/apps , dan sebagian besar kode harus sangat mirip dengan C ++ Versi: kapan.
scw
1

Anda juga dapat mempertimbangkan MapWinGIS .

MapWinGIS.ocx digunakan untuk menyediakan GIS dan fungsi pemetaan untuk aplikasi berbasis Windows Forms apa pun. MapWinGIS.ocx adalah pemrograman sistem informasi geografis berbasis C ++ GRATIS dan BUKA SUMBER ActiveX Control dan antarmuka programmer aplikasi (API) yang dapat ditambahkan ke Formulir Windows dalam Visual Basic, C #, Delphi, atau bahasa lain yang mendukung ActiveX, menyediakan aplikasi Anda dengan peta.

Hornbydd
sumber
1
+1. Berikut adalah contoh yang menunjukkan pembuatan shapefile poligon. Satu hal yang perlu diperhatikan adalah bahwa MapWinGIS 6 alpha menggunakan DotSpatial sebagai intinya. Jika Anda tidak membutuhkan aspek UI, mungkin lebih sederhana dan lebih ringan untuk hanya mendapatkan perangkat yang relevan dari perpustakaan DotSpatial, seperti dalam jawaban saya.
blah238
1

Object Data Objects (FDO) tidak membaca / menulis SHP melalui penyedia SHP dan memiliki API untuk C ++ dan .net

jumpinjackie
sumber
1

Meskipun ini sudah dijawab, saran bagi siapa pun yang melihat ini di kemudian hari adalah juga EGIS (GIS Mudah) yang memungkinkan shapefile untuk dituliskan fitur berdasarkan fitur.

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

Ini menambahkan satu fitur ke shapefile pilihan dan metode AddRecord memiliki 7 kelebihan.

Alfie Goodacre
sumber
Bisakah Anda memposting Potongan kode yang menunjukkan bagaimana hal ini dapat dilakukan? Jawaban dalam keadaan saat ini tidak dapat berdiri sendiri, jika tautannya mati.
Devdatta Tengshe