Existe-t-il un rédacteur de fichiers Shapefile Open Source gratuit pour .NET?

12

Je recherche une bibliothèque OpenSource bien documentée qui peut créer et écrire dans un fichier de formes à partir de .Net. J'ai besoin d'un accès par levier inférieur: c'est-à-dire que je devrais pouvoir écrire fonctionnalité par fonctionnalité.

Existe-t-il une telle bibliothèque?

J'ai enquêté et trouvé ce qui suit:

Y a t-il le moindre espoir pour moi? Existe-t-il une bibliothèque qui peut être utilisée pour écrire un nouveau fichier de formes?

Devdatta Tengshe
la source
1
NTS a de la documentation - c'est juste dans le code (par exemple code.google.com/p/nettopologysuite/source/browse/trunk/… ) et quelques tests. Parfois, la lecture de documents JTS aide.
BradHards

Réponses:

5

Je ne l'ai pas utilisé moi-même mais en regardant rapidement la documentation de DotSpatial , il semble qu'il devrait être capable de faire ce que vous voulez.

Il a des assemblages individuels sur NuGet si vous savez ceux dont vous avez besoin (ce que je n'ai pas).

Voici un exemple qui démontre au moins la possibilité. Ce serait bien s'il y avait un lecteur / convertisseur WKT pour créer un échantillon plus lisible, mais cela semble manquer.

blah238
la source
1
J'ai suivi vos conseils et j'ai trouvé ce document ( dotspatial.codeplex.com/… ), qui montre ce que je veux faire.
Devdatta Tengshe
9

Je ressens ta douleur. J'ai vécu le même genre de chose avec NetTopologySuite (v1.13) et j'ai eu un certain succès en regardant les tests unitaires.

Tout d'abord, vous pouvez consulter la bibliothèque DotSpatial qui a été référencée dans une question similaire spécifique aux opérations de fichiers de formes DS

Je suis personnellement satisfait de la bibliothèque NTS. Une fois que vous avez compris le modèle d'objet, ce n'est pas trop chiant de mettre quelque chose ensemble. Étant donné que cette rubrique sera probablement référencée plus d'une fois, voici un vidage de code rapide pour l'écriture de fichiers de formes à partir de NTS.

1) Téléchargez les fichiers binaires NTS (1.13.0)

2) Référencez les assemblages suivants:

-GeoAPI, NetTopologySuite, NetTopologySuite.IO, NetTopologySuite.IO.GeoTools (devinez combien de temps il a fallu pour comprendre ce dernier était nécessaire)

3) Écrivez du code (c'est un travail de hack de 10 minutes)

ajouter des instructions using pour NetTopologySuite, NetTopologySuite.IO, NetTopologySuite.Features, GeoAPI, GeoAPI.Geometries (désolé, je ne peux pas comprendre comment obtenir SO pour les formater)

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

Donc, pas bien documenté mais c'est assez viser et tirer une fois que vous commencez.

WolfOdrade
la source
J'ai oublié une réponse similaire spécifiquement à DotSpatial gis.stackexchange.com/questions/5816/… , mais je suis assez content de NTS.
WolfOdrade
C'est votre réponse à cette question qui m'a conduit à ceci: dotspatial.codeplex.com/… , ce que je cherchais.
Devdatta Tengshe
2

Il semble que gdal possède une bibliothèque ac #: http://trac.osgeo.org/gdal/wiki/GdalOgrInCsharp

CLJ
la source
Pouvez-vous me montrer de la documentation, où vous pouvez écrire une fonctionnalité de fichier de formes par fonctionnalité, en utilisant cette liaison C #? J'ai essayé, mais je n'ai rien trouvé.
Devdatta Tengshe
1
En général, les liaisons SWIG ne sont pas bien documentées, mais il existe un bon nombre d'exemples dans github.com/OSGeo/gdal/tree/trunk/gdal/swig/csharp/apps , et la plupart du code devrait être très similaire au C ++ version.
scw
1

Vous pouvez également envisager MapWinGIS .

MapWinGIS.ocx est utilisé pour fournir des fonctionnalités SIG et de cartographie à toute application basée sur Windows Forms. MapWinGIS.ocx est un système d'information géographique C ++ SOURCE LIBRE et OUVERT qui programme le contrôle ActiveX et l'interface de programmation d'application (API) qui peut être ajouté à un formulaire Windows en Visual Basic, C #, Delphi ou d'autres langages qui prennent en charge ActiveX, fournissant votre application avec une carte.

Hornbydd
la source
1
+1. Voici un exemple illustrant la création d'un fichier de formes polygonales. Une chose à noter est que le MapWinGIS 6 alpha utilise DotSpatial à sa base. Si vous n'avez pas besoin de l'interface utilisateur, il peut être plus simple et plus léger d'obtenir simplement les assemblages pertinents de la bibliothèque DotSpatial, comme dans ma réponse.
blah238
1

Feature Data Objects (FDO) fait SHP en lecture / écriture via son fournisseur SHP et dispose d'une API pour C ++ et .net

jumpinjackie
la source
1

Bien que cela ait déjà été répondu, une suggestion pour quiconque le visualise à une date ultérieure est également EGIS (Easy GIS) qui permet d'écrire des fichiers de formes fonctionnalité par fonctionnalité.

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

Cela ajoute une fonctionnalité au fichier de formes de choix et la méthode AddRecord a 7 surcharges.

Alfie Goodacre
la source
Pourriez-vous publier un extrait de code qui montre comment cela peut être fait? La réponse dans son état actuel ne peut pas se suffire à elle-même, au cas où le lien disparaîtrait.
Devdatta Tengshe