Esiste un writer gratuito Shapefile di OpenSource per .NET?


12

Sto cercando una libreria OpenSource ben documentata in grado di creare e scrivere in un file di forma da .Net. Ho bisogno di un accesso con leva inferiore: cioè dovrei essere in grado di scrivere funzione per funzione.

Esiste una biblioteca del genere?

Ho studiato e trovato il seguente:

C'è qualche speranza per me? Esiste una libreria che può essere utilizzata per scrivere un nuovo shapefile?


1
NTS ha documentazione - è solo nel codice (ad esempio code.google.com/p/nettopologysuite/source/browse/trunk/… ) e alcuni test. A volte la lettura di documenti JTS aiuta.
BradHards,

Risposte:


5

Non l'ho usato da solo, ma guardando rapidamente la documentazione di DotSpatial , sembra che dovrebbe essere in grado di fare quello che vuoi.

Ha singoli assiemi su NuGet se sai quali ti servono (cosa che io no).

Ecco un esempio che dimostra almeno la possibilità. Sarebbe bello se ci fosse un lettore / convertitore WKT per creare un campione più leggibile, ma sembra che manchi.


1
Ho seguito i tuoi consigli e ho trovato questo documento ( dotspatial.codeplex.com/… ), che mostra cosa voglio fare.
Devdatta Tengshe,

9

Condivido il tuo dolore. Ho passato lo stesso genere di cose con NetTopologySuite (v1.13) e ho avuto un certo successo guardando i test unitari.

Prima di tutto, potresti dare un'occhiata alla libreria DotSpatial a cui faceva riferimento una domanda simile specifica per le operazioni del file di forma DS

Sono personalmente contento della libreria NTS. Una volta che hai capito il modello a oggetti, non è troppo complicato mettere insieme qualcosa. Dal momento che questo argomento verrà probabilmente citato più di una volta, ecco un dump di codice rapido per la scrittura di shapefile da NTS.

1) Scarica i binari NTS (1.13.0)

2) Fare riferimento ai seguenti assiemi:

-GeoAPI, NetTopologySuite, NetTopologySuite.IO, NetTopologySuite.IO.GeoTools (indovina quanto tempo è stato necessario per capire l'ultimo richiesto)

3) Scrivi un po 'di codice (questo è un processo di hacking di 10 minuti)

aggiungere le istruzioni usando per NetTopologySuite, NetTopologySuite.IO, NetTopologySuite.Features, GeoAPI, GeoAPI.Geometries (scusate non riesco a capire come ottenere SO per formattarli)

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

Quindi, non ben documentato, ma è abbastanza semplice fare una ripresa.


Ho dimenticato una risposta simile specificamente a DotSpatial gis.stackexchange.com/questions/5816/… , ma sono abbastanza contento di NTS.
WolfOdrade,

È stata la tua risposta a quella domanda, che mi ha portato a questo: dotspatial.codeplex.com/… , che era quello che stavo cercando.
Devdatta Tengshe,

2

Sembra che gdal abbia una libreria ac #: http://trac.osgeo.org/gdal/wiki/GdalOgrInCsharp


Potete mostrarmi un po 'di documentazione, in cui è possibile scrivere una funzione shapefile per funzione, usando questa associazione C #? Ho provato, ma non ho trovato nulla.
Devdatta Tengshe,

1
Generalmente i binding SWIG non sono ben documentati, ma ci sono molti esempi in github.com/OSGeo/gdal/tree/trunk/gdal/swig/csharp/apps e la maggior parte del codice dovrebbe essere molto simile al C ++ versione.
scw


1

Puoi anche prendere in considerazione MapWinGIS .

MapWinGIS.ocx viene utilizzato per fornire funzionalità GIS e di mapping a qualsiasi applicazione basata su Windows Form. MapWinGIS.ocx è un sistema di informazione geografica GRATUITO e OPEN SOURCE basato su C ++ che programma il controllo ActiveX e l'interfaccia del programmatore dell'applicazione (API) che possono essere aggiunti a un Windows Form in Visual Basic, C #, Delphi o altre lingue che supportano ActiveX, fornendo la tua app con una mappa.


1
+1. Ecco un esempio che dimostra come creare un file di forma poligonale. Una cosa da notare è che MapWinGIS 6 alpha utilizza DotSpatial al suo interno. Se non hai bisogno dell'aspetto dell'interfaccia utente, potrebbe essere più semplice e leggero ottenere gli assiemi pertinenti dalla libreria DotSpatial, come nella mia risposta.
blah238,



1

Sebbene sia già stata data una risposta, un suggerimento per chiunque la veda in un secondo momento è anche EGIS (Easy GIS) che consente di scrivere gli shapefile funzione per funzione.

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

Ciò aggiunge una funzionalità al file di forma scelto e il metodo AddRecord ha 7 sovraccarichi.


Potresti pubblicare uno snippet di codice che mostra come eseguire questa operazione? La risposta nel suo stato attuale non può reggere da sola, nel caso in cui il collegamento si interrompa.
Devdatta Tengshe,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.