Crea e leggi Shapefile in C#

Il formato Shapefile è un formato di dati vettoriali geospaziali utilizzato per visualizzare informazioni geografiche. Possiamo memorizzare la posizione, la geometria e l’attribuzione di punti, linee e poligoni in Shapefile. In questo articolo impareremo come creare e leggere Shapefile in C#.

Questo articolo tratterà i seguenti argomenti:

  1. Cos’è uno Shapefile
  2. Come utilizzare uno Shapefile
  3. API C# per creare e leggere Shapefile – Libreria .NET GIS
  4. Crea uno Shapefile usando C#
  5. Aggiungi funzionalità a uno ShapeFile esistente in C#
  6. Leggi uno Shapefile usando C#

Cos’è uno Shapefile

Uno shapefile rappresenta le informazioni geospaziali sotto forma di dati vettoriali che devono essere utilizzati dalle applicazioni GIS. È stato sviluppato da ESRI come specifica aperta per facilitare l’interoperabilità tra ESRI e altri prodotti software. Contiene i dati geometrici che disegnano punti, linee o poligoni su una mappa e gli attributi dei dati. Gli shapefile possono essere letti direttamente da diversi programmi software GIS come ArcGIS e QGIS.

Come utilizzare uno Shapefile

Uno shapefile autonomo (.shp) non può essere utilizzato dalle applicazioni software. Tuttavia, uno shapefile valido che può essere utilizzato nel software GIS dovrebbe contenere i seguenti file obbligatori aggiuntivi:

API C# per creare e leggere Shapefile – Libreria .NET GIS

Per creare o leggere shapefile, utilizzeremo l’API Aspose.GIS for .NET. Consente di eseguire il rendering di mappe, creare, leggere e convertire dati geografici senza software aggiuntivo. Supporta il lavoro con gli shapefile insieme a molti altri formati di file supportati.

La classe VectorLayer dell’API rappresenta un livello vettoriale. Offre varie proprietà e metodi per lavorare con una raccolta di caratteristiche geografiche memorizzate in un file. Il metodo Create() di questa classe consente la creazione di livelli vettoriali supportati. La classe Drivers fornisce i driver per tutti i formati supportati. La classe Feature dell’API rappresenta una caratteristica geografica composta da geometria e attributi definiti dall’utente.

Si prega di scaricare la DLL dell’API o installarla utilizzando NuGet.

PM> Install-Package Aspose.GIS

Crea Shapefile usando C#

Possiamo facilmente creare uno shapefile a livello di codice seguendo i passaggi indicati di seguito:

  1. Innanzitutto, crea un livello usando il metodo VectorLayer.Create().
  2. Successivamente, aggiungi FeatureAttributes alla raccolta di attributi del livello.
  3. Quindi, crea un’istanza della classe Feature utilizzando il metodo ConstructFeature().
  4. Successivamente, imposta i valori di attributi diversi.
  5. Infine, aggiungi la funzionalità usando il metodo Add().

L’esempio di codice seguente mostra come creare uno shapefile in C#:

// Questo esempio di codice mostra come creare un nuovo shapefile.
// Crea un nuovo Shapefile
using (VectorLayer layer = VectorLayer.Create(@"C:\Files\GIS\NewShapeFile_out.shp", Drivers.Shapefile))
{
    // Aggiungi attributi prima di aggiungere funzionalità
    layer.Attributes.Add(new FeatureAttribute("name", AttributeDataType.String));
    layer.Attributes.Add(new FeatureAttribute("age", AttributeDataType.Integer));
    layer.Attributes.Add(new FeatureAttribute("dob", AttributeDataType.DateTime));

    // Aggiungi funzionalità e imposta valori
    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);

    // Aggiungi un'altra funzione e imposta i valori
    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);
}
Crea-Shapefile-usando-CSharp

Crea Shapefile usando C#.

Aggiungi funzionalità a ShapeFile esistente utilizzando C#

Possiamo anche aggiungere nuove funzionalità a uno shapefile esistente seguendo i passaggi indicati di seguito:

  1. Innanzitutto, carica uno shapefile utilizzando il metodo Drivers.Shapefile.EditLayer().
  2. Quindi, crea un’istanza della classe Feature utilizzando il metodo ConstructFeature().
  3. Successivamente, imposta i valori di attributi diversi.
  4. Infine, aggiungi la funzionalità usando il metodo Add().

L’esempio di codice seguente mostra come aggiungere funzionalità a uno shapefile esistente usando C#.

// Questo esempio di codice mostra come modificare uno shapefile.
// Percorso del file
string path = Path.Combine(dataDir, "NewShapeFile_out.shp");

// Modifica il livello Shapefile
using (var layer = Drivers.Shapefile.EditLayer(path))
{
    // Aggiungi funzionalità
    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);
}

Leggi uno Shapefile usando C#

Possiamo leggere gli attributi da uno shapefile seguendo i passaggi indicati di seguito:

  1. Innanzitutto, carica uno shapefile utilizzando il metodo Drivers.Shapefile.OpenLayer().
  2. Passa attraverso ogni caratteristica nel livello.
  3. Scorri gli attributi e mostra i dettagli degli attributi.
  4. Infine, controlla la geometria del punto e leggi i punti.

L’esempio di codice seguente mostra come leggere uno shapefile usando C#.

// Questo esempio di codice mostra come leggere un nuovo file di forma.
// Percorso del file
string path = Path.Combine(dataDir, "NewShapeFile_out.shp");

// Apri un livello
var layer = Drivers.Shapefile.OpenLayer(path);

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

    // Controlla la geometria del punto
    if (feature.Geometry.GeometryType == GeometryType.Point)
    {
        // Leggi punti
        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

Ottieni una licenza gratuita

Puoi ottenere una licenza temporanea gratuita per provare la libreria senza limitazioni di valutazione.

Conclusione

In questo articolo abbiamo imparato a farlo

  • creare un nuovo shapefile a livello di codice;
  • aggiungere nuove funzionalità allo shapefile;
  • modificare il livello dello shapefile;
  • apri il livello dello shapefile e leggi gli attributi usando C#.

Inoltre, puoi esplorare come lavorare con diversi altri formati di file GIS e saperne di più su Aspose.GIS per .NET API utilizzando la documentazione. In caso di ambiguità, non esitare a contattarci sul nostro forum.

Guarda anche