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:
- Cos’è uno Shapefile
- Come utilizzare uno Shapefile
- API C# per creare e leggere Shapefile – Libreria .NET GIS
- Crea uno Shapefile usando C#
- Aggiungi funzionalità a uno ShapeFile esistente in C#
- 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:
- File di indice della forma (.shx) - a positional index of the feature geometry;
- File di attributi dBase (.dbf) - a dBASE file that stores all the attributes of the shapes;
- File di tabella codici (.cpg): il file per identificare la codifica dei caratteri.
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:
- Innanzitutto, crea un livello usando il metodo VectorLayer.Create().
- Successivamente, aggiungi FeatureAttributes alla raccolta di attributi del livello.
- Quindi, crea un’istanza della classe Feature utilizzando il metodo ConstructFeature().
- Successivamente, imposta i valori di attributi diversi.
- 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);
}
Aggiungi funzionalità a ShapeFile esistente utilizzando C#
Possiamo anche aggiungere nuove funzionalità a uno shapefile esistente seguendo i passaggi indicati di seguito:
- Innanzitutto, carica uno shapefile utilizzando il metodo Drivers.Shapefile.EditLayer().
- Quindi, crea un’istanza della classe Feature utilizzando il metodo ConstructFeature().
- Successivamente, imposta i valori di attributi diversi.
- 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:
- Innanzitutto, carica uno shapefile utilizzando il metodo Drivers.Shapefile.OpenLayer().
- Passa attraverso ogni caratteristica nel livello.
- Scorri gli attributi e mostra i dettagli degli attributi.
- 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.