Shapefile in C# erstellen und lesen

Das Shapefile-Format ist ein Geodaten-Vektordatenformat, das zum Anzeigen geografischer Informationen verwendet wird. Wir können die Position, Geometrie und Zuordnung von Punkt-, Linien- und Polygon-Features in Shapefile speichern. In diesem Artikel lernen wir, wie man Shapefiles in C# erstellt und liest.

Dieser Artikel soll folgende Themen behandeln:

  1. Was ist ein Shapefile
  2. So verwenden Sie ein Shapefile
  3. C#-API zum Erstellen und Lesen von Shapefiles – .NET GIS-Bibliothek
  4. Shapefile mit C# erstellen
  5. Features zu einem vorhandenen ShapeFile in C# hinzufügen
  6. Ein Shapefile mit C# lesen

Was ist ein Shapefile

Ein Shapefile stellt Geoinformationen in Form von Vektordaten dar, die von GIS-Anwendungen verwendet werden. Es wurde von ESRI als offene Spezifikation entwickelt, um die Interoperabilität zwischen ESRI und anderen Softwareprodukten zu erleichtern. Es enthält die geometrischen Daten, die Punkte, Linien oder Polygone auf einer Karte zeichnen, und die Datenattribute. Shapefiles können direkt von mehreren GIS-Softwareprogrammen wie ArcGIS und QGIS gelesen werden.

So verwenden Sie ein Shapefile

Ein eigenständiges Shapefile (.shp) kann nicht von Softwareanwendungen verwendet werden. Ein gültiges Shapefile, das in GIS-Software verwendet werden kann, sollte jedoch die folgenden zusätzlichen obligatorischen Dateien enthalten:

C#-API zum Erstellen und Lesen von Shapefiles – .NET GIS-Bibliothek

Zum Erstellen oder Lesen von Shapefiles verwenden wir die API Aspose.GIS for .NET. Es ermöglicht das Rendern von Karten, das Erstellen, Lesen und Konvertieren von geografischen Daten ohne zusätzliche Software. Es unterstützt das Arbeiten mit Shapefiles zusammen mit mehreren anderen unterstützten Dateiformaten.

Die Klasse VectorLayer der API repräsentiert eine Vektorebene. Es bietet verschiedene Eigenschaften und Methoden, um mit einer Sammlung geografischer Merkmale zu arbeiten, die in einer Datei gespeichert sind. Die Methode Create() dieser Klasse ermöglicht die Erstellung von unterstützten Vektorebenen. Die Klasse Drivers stellt Treiber für alle unterstützten Formate bereit. Die Klasse Feature der API stellt ein geografisches Feature dar, das aus Geometrie und benutzerdefinierten Attributen besteht.

Bitte entweder die DLL der API herunterladen oder sie mit NuGet installieren.

PM> Install-Package Aspose.GIS

Shapefile mit C# erstellen

Wir können ganz einfach ein Shapefile programmgesteuert erstellen, indem wir die folgenden Schritte ausführen:

  1. Erstellen Sie zunächst eine Ebene mit der Methode VectorLayer.Create().
  2. Fügen Sie als Nächstes FeatureAttributes zur Attributsammlung des Layers hinzu.
  3. Erstellen Sie dann mit der ConstructFeature()-Methode eine Instanz der Feature-Class.
  4. Legen Sie danach die Werte verschiedener Attribute fest.
  5. Fügen Sie schließlich das Feature mit der Methode Add() hinzu.

Das folgende Codebeispiel zeigt, wie Sie ein Shapefile in C# erstellen:

// Dieses Codebeispiel zeigt, wie Sie ein neues Shapefile erstellen.
// Erstellen Sie ein neues Shapefile
using (VectorLayer layer = VectorLayer.Create(@"C:\Files\GIS\NewShapeFile_out.shp", Drivers.Shapefile))
{
    // Fügen Sie Attribute hinzu, bevor Sie Features hinzufügen
    layer.Attributes.Add(new FeatureAttribute("name", AttributeDataType.String));
    layer.Attributes.Add(new FeatureAttribute("age", AttributeDataType.Integer));
    layer.Attributes.Add(new FeatureAttribute("dob", AttributeDataType.DateTime));

    // Feature hinzufügen und Werte festlegen
    Feature firstFeature = layer.ConstructFeature();
    firstFeature.Geometry = new Point(33.97, -118.25);
    firstFeature.SetValue("name", "John");
    firstFeature.SetValue("age", 23);
    firstFeature.SetValue("dob", new DateTime(1982, 2, 5, 16, 30, 0));
    layer.Add(firstFeature);

    // Fügen Sie ein weiteres Feature hinzu und legen Sie Werte fest
    Feature secondFeature = layer.ConstructFeature();
    secondFeature.Geometry = new Point(35.81, -96.28);
    secondFeature.SetValue("name", "Mary");
    secondFeature.SetValue("age", 54);
    secondFeature.SetValue("dob", new DateTime(1984, 12, 15, 15, 30, 0));
    layer.Add(secondFeature);
}
Shapefile-mit-CSharp erstellen

Shapefile mit C# erstellen.

Hinzufügen von Features zu vorhandenem ShapeFile mit C#

Wir können einem vorhandenen Shapefile auch neue Funktionen hinzufügen, indem Sie die folgenden Schritte ausführen:

  1. Laden Sie zunächst ein Shapefile mit der Methode Drivers.Shapefile.EditLayer().
  2. Erstellen Sie als Nächstes mit der ConstructFeature()-Methode eine Instanz der Feature-Class.
  3. Legen Sie danach die Werte verschiedener Attribute fest.
  4. Fügen Sie schließlich das Feature mit der Methode Add() hinzu.

Das folgende Codebeispiel zeigt, wie Sie Features zu einem vorhandenen Shapefile mit C# hinzufügen.

// Dieses Codebeispiel zeigt, wie Sie ein Shapefile bearbeiten.
// Dateipfad
string path = Path.Combine(dataDir, "NewShapeFile_out.shp");

// Bearbeiten Sie die Shapefile-Ebene
using (var layer = Drivers.Shapefile.EditLayer(path))
{
    // Funktion hinzufügen
    var feature = layer.ConstructFeature();
    feature.Geometry = new Point(34.81, -92.28);
    object[] data = new object[3] { "Alex", 25, new DateTime(1989, 4, 15, 15, 30, 0) };
    feature.SetValues(data);
    layer.Add(feature);
}

Lesen Sie ein Shapefile mit C#

Wir können Attribute aus einem Shapefile lesen, indem wir die folgenden Schritte ausführen:

  1. Laden Sie zunächst ein Shapefile mit der Methode Drivers.Shapefile.OpenLayer().
  2. Durchlaufen Sie jedes Feature in der Ebene.
  3. Durchlaufen Sie Attribute und zeigen Sie Attributdetails an.
  4. Überprüfen Sie abschließend die Punktgeometrie und lesen Sie die Punkte.

Das folgende Codebeispiel zeigt, wie ein Shapefile mit C# gelesen wird.

// Dieses Codebeispiel zeigt, wie ein neues Shapefile gelesen wird.
// Dateipfad
string path = Path.Combine(dataDir, "NewShapeFile_out.shp");

// Öffnen Sie eine Ebene
var layer = Drivers.Shapefile.OpenLayer(path);

foreach (Feature feature in layer)
{
    foreach (var attribute in layer.Attributes)
    {
        // Attributdetails anzeigen
        Console.WriteLine(attribute.Name + " : " + feature.GetValue(attribute.Name));
    }

    // Suchen Sie nach Punktgeometrie
    if (feature.Geometry.GeometryType == GeometryType.Point)
    {
        // Punkte lesen
        Point point = (Point)feature.Geometry;
        Console.WriteLine(point.AsText() + " X: " + point.X + " Y: " + point.Y);
        Console.WriteLine("---------------------");
    }
}
name : John
age : 23
dob : 1982-02-05T16:30:00
POINT (33.97 -118.25) X: 33.97 Y: -118.25
---------------------
name : Mary
age : 54
dob : 1984-12-15T15:30:00
POINT (35.81 -96.28) X: 35.81 Y: -96.28
---------------------
name : Alex
age : 25
dob : 04/15/1989 15:30:00
POINT (34.81 -92.28) X: 34.81 Y: -92.28

Holen Sie sich eine kostenlose Lizenz

Sie können eine kostenlose temporäre Lizenz erhalten, um die Bibliothek ohne Evaluierungseinschränkungen zu testen.

Fazit

In diesem Artikel haben wir gelernt, wie es geht

  • programmgesteuert ein neues Shapefile erstellen;
  • neue Funktionen zum Shapefile hinzufügen;
  • Shapefile-Ebene bearbeiten;
  • Öffnen Sie die Shapefile-Ebene und lesen Sie die Attribute mit C#.

Außerdem können Sie in der Dokumentation erkunden, wie Sie mit mehreren anderen GIS-Dateiformaten arbeiten und mehr über Aspose.GIS for .NET API erfahren. Bei Unklarheiten können Sie sich gerne in unserem Forum an uns wenden.

Siehe auch