¿Existe un Escritor de archivos de forma gratuita de código abierto para .NET?

12

Estoy buscando una biblioteca OpenSource bien documentada que pueda crear y escribir en un shapefile desde .Net. Necesito acceso de palanca inferior: es decir, debería poder escribir característica por característica.

¿Existe tal biblioteca?

Investigué y encontré lo siguiente:

¿Hay alguna esperanza para mi? ¿Hay una biblioteca que se pueda usar para escribir un nuevo shapefile?

Devdatta Tengshe
fuente
1
NTS tiene documentación, solo está en el código (por ejemplo, code.google.com/p/nettopologysuite/source/browse/trunk/… ) y algunas pruebas. A veces, la lectura de documentos JTS ayuda.
BradHards

Respuestas:

5

No lo he usado yo mismo, pero mirando rápidamente la documentación de DotSpatial , parece que debería poder hacer lo que usted desea.

Tiene ensamblajes individuales en NuGet si sabes cuáles necesitas (cuáles no).

Aquí hay una muestra que al menos demuestra la posibilidad. Sería bueno si hubiera un lector / convertidor WKT para hacer una muestra más legible, pero parece que falta.

blah238
fuente
1
Seguí su consejo y encontré este documento ( dotspatial.codeplex.com/… ), que muestra lo que quiero hacer.
Devdatta Tengshe
9

Siento tu dolor. Pasé por el mismo tipo de cosas con NetTopologySuite (v1.13) y tuve algo de éxito mirando las pruebas unitarias.

En primer lugar, puede consultar la biblioteca DotSpatial a la que se hizo referencia en una pregunta similar específica de las operaciones de archivo de formas DS

Estoy personalmente feliz con la biblioteca NTS. Una vez que descubres el modelo de objetos, no es demasiado complicado armar algo. Como es probable que se haga referencia a este tema más de una vez, aquí hay un volcado de código rápido para escribir archivos de forma desde NTS.

1) Descargue los binarios NTS (1.13.0)

2) Consulte los siguientes ensamblajes:

-GeoAPI, NetTopologySuite, NetTopologySuite.IO, NetTopologySuite.IO.GeoTools (adivina cuánto tiempo tardó en descubrir que este último era necesario)

3) Escriba un código (este es un trabajo de pirateo de 10 minutos)

agregue usando declaraciones para NetTopologySuite, NetTopologySuite.IO, NetTopologySuite.Features, GeoAPI, GeoAPI.Geometries (lo siento, no puedo entender cómo hacer que SO dé formato a estos)

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

Por lo tanto, no está bien documentado, pero es bastante apuntar y disparar una vez que se pone en marcha.

WolfOdrade
fuente
Olvidé una respuesta similar específicamente a DotSpatial gis.stackexchange.com/questions/5816/… , pero estoy bastante contento con NTS.
WolfOdrade
Fue su respuesta a esa pregunta, lo que me llevó a esto: dotspatial.codeplex.com/… , que era lo que estaba buscando.
Devdatta Tengshe
2

Parece que gdal tiene una biblioteca ac #: http://trac.osgeo.org/gdal/wiki/GdalOgrInCsharp

CLJ
fuente
¿Puede mostrarme alguna documentación, donde puede escribir un archivo de forma característica por característica, utilizando este enlace de C #? Lo he intentado, pero no he encontrado nada.
Devdatta Tengshe
1
En general, los enlaces SWIG no están bien documentados, pero hay una buena cantidad de ejemplos en github.com/OSGeo/gdal/tree/trunk/gdal/swig/csharp/apps , y la mayoría del código debería ser muy similar al C ++ versión.
scw
1

También podría considerar MapWinGIS .

MapWinGIS.ocx se utiliza para proporcionar SIG y funcionalidad de mapeo a cualquier aplicación basada en formularios Windows Forms. MapWinGIS.ocx es un sistema de información geográfica basado en C ++ GRATUITO y ABIERTO que programa ActiveX Control y la interfaz del programador de aplicaciones (API) que se puede agregar a un formulario de Windows en Visual Basic, C #, Delphi u otros idiomas que admiten ActiveX, proporcionando su aplicación con un mapa

Hornbydd
fuente
1
+1. Aquí hay una muestra que demuestra la creación de un archivo de forma poligonal. Una cosa a tener en cuenta es que MapWinGIS 6 alpha utiliza DotSpatial en su núcleo. Si no necesita el aspecto de la interfaz de usuario, puede ser más simple y liviano obtener los ensamblados relevantes de la biblioteca DotSpatial, como en mi respuesta.
blah238
1

Aunque esto ya ha sido respondido, una sugerencia para cualquiera que vea esto en una fecha posterior también es EGIS (Easy GIS) que permite que los archivos de forma se escriban característica por característica.

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

Esto agrega una característica al archivo shape de elección y el método AddRecord tiene 7 sobrecargas.

Alfie Goodacre
fuente
¿Podría publicar un fragmento de código que muestre cómo se puede hacer esto? La respuesta en su estado actual no puede sostenerse por sí misma, en caso de que el enlace se corte.
Devdatta Tengshe