Le format Shapefile est un format de données vectorielles géospatiales utilisé pour afficher des informations géographiques. Nous pouvons stocker l’emplacement, la géométrie et l’attribution des entités ponctuelles, linéaires et polygonales dans Shapefile. Dans cet article, nous allons apprendre à créer et à lire Shapefile en C#.
Cet article couvrira les sujets suivants :
- Qu’est-ce qu’un fichier de formes
- Comment utiliser un fichier de formes
- API C# pour créer et lire un fichier de formes - Bibliothèque SIG .NET
- Créer un fichier de formes à l’aide de C#
- Ajouter des fonctionnalités à un ShapeFile existant en C#
- Lire un Shapefile en C#
Qu’est-ce qu’un fichier de formes
Un fichier de formes représente des informations géospatiales sous la forme de données vectorielles à utiliser par les applications SIG. Il a été développé par ESRI en tant que spécification ouverte pour faciliter l’interopérabilité entre ESRI et d’autres produits logiciels. Il contient les données géométriques qui dessinent des points, des lignes ou des polygones sur une carte et les attributs de données. Les fichiers de formes peuvent être directement lus par plusieurs logiciels SIG tels que ArcGIS et QGIS.
Comment utiliser un fichier de formes
Un fichier de formes autonome (.shp) ne peut pas être utilisé par des applications logicielles. Cependant, un fichier de formes valide pouvant être utilisé dans un logiciel SIG doit contenir les fichiers obligatoires supplémentaires suivants :
- Fichier d’index de forme (.shx) - a positional index of the feature geometry;
- Fichier d’attributs dBase (.dbf) - a dBASE file that stores all the attributes of the shapes;
- Fichier de page de code (.cpg) - le fichier permettant d’identifier l’encodage des caractères.
API C# pour créer et lire un fichier de formes - Bibliothèque SIG .NET
Pour créer ou lire des fichiers de formes, nous utiliserons l’API Aspose.GIS for .NET. Il permet de restituer des cartes, de créer, de lire et de convertir des données géographiques sans logiciel supplémentaire. Il prend en charge le travail avec des fichiers de formes ainsi que plusieurs autres formats de fichiers pris en charge.
La classe VectorLayer de l’API représente une couche vectorielle. Il offre diverses propriétés et méthodes pour travailler avec une collection d’entités géographiques stockées dans un fichier. La méthode Create() de cette classe permet la création de couches vectorielles prises en charge. La classe Drivers fournit des pilotes pour tous les formats pris en charge. La classe Feature de l’API représente une entité géographique composée de géométrie et d’attributs définis par l’utilisateur.
Veuillez soit télécharger la DLL de l’API ou l’installer à l’aide de NuGet.
PM> Install-Package Aspose.GIS
Créer un fichier de formes à l’aide de C#
Nous pouvons facilement créer un fichier de formes par programmation en suivant les étapes ci-dessous :
- Tout d’abord, créez un calque à l’aide de la méthode VectorLayer.Create().
- Ensuite, ajoutez FeatureAttributes à la collection d’attributs de la couche.
- Ensuite, créez une instance de la classe Feature à l’aide de la méthode ConstructFeature().
- Après cela, définissez les valeurs des différents attributs.
- Enfin, ajoutez la fonctionnalité à l’aide de la méthode Add().
L’exemple de code suivant montre comment créer un fichier de formes en C# :
// Cet exemple de code montre comment créer un nouveau fichier de formes.
// Créer un nouveau fichier de formes
using (VectorLayer layer = VectorLayer.Create(@"C:\Files\GIS\NewShapeFile_out.shp", Drivers.Shapefile))
{
// Ajouter des attributs avant d'ajouter des fonctionnalités
layer.Attributes.Add(new FeatureAttribute("name", AttributeDataType.String));
layer.Attributes.Add(new FeatureAttribute("age", AttributeDataType.Integer));
layer.Attributes.Add(new FeatureAttribute("dob", AttributeDataType.DateTime));
// Ajouter une fonctionnalité et définir des valeurs
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);
// Ajouter une autre fonctionnalité et définir des valeurs
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);
}
Ajouter des fonctionnalités à un fichier de formes existant à l’aide de C#
Nous pouvons également ajouter de nouvelles fonctionnalités à un fichier de formes existant en suivant les étapes ci-dessous :
- Tout d’abord, chargez un fichier de formes à l’aide de la méthode Drivers.Shapefile.EditLayer().
- Ensuite, créez une instance de la classe Feature à l’aide de la méthode ConstructFeature().
- Après cela, définissez les valeurs des différents attributs.
- Enfin, ajoutez la fonctionnalité à l’aide de la méthode Add().
L’exemple de code suivant montre comment ajouter des fonctionnalités à un fichier de formes existant à l’aide de C#.
// Cet exemple de code montre comment modifier un fichier de formes.
// Chemin du fichier
string path = Path.Combine(dataDir, "NewShapeFile_out.shp");
// Modifier le calque Shapefile
using (var layer = Drivers.Shapefile.EditLayer(path))
{
// Ajouter une fonctionnalité
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);
}
Lire un Shapefile en C#
Nous pouvons lire les attributs d’un fichier de formes en suivant les étapes ci-dessous :
- Tout d’abord, chargez un fichier de formes à l’aide de la méthode Drivers.Shapefile.OpenLayer().
- Parcourez chaque entité de la couche.
- Parcourez les attributs et affichez les détails des attributs.
- Enfin, vérifiez la géométrie des points et lisez les points.
L’exemple de code suivant montre comment lire un fichier de formes à l’aide de C#.
// Cet exemple de code montre comment lire un nouveau fichier de formes.
// Chemin du fichier
string path = Path.Combine(dataDir, "NewShapeFile_out.shp");
// Ouvrir un calque
var layer = Drivers.Shapefile.OpenLayer(path);
foreach (Feature feature in layer)
{
foreach (var attribute in layer.Attributes)
{
// Afficher les détails de l'attribut
Console.WriteLine(attribute.Name + " : " + feature.GetValue(attribute.Name));
}
// Vérifier la géométrie du point
if (feature.Geometry.GeometryType == GeometryType.Point)
{
// Points de lecture
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
Obtenez une licence gratuite
Vous pouvez obtenir une licence temporaire gratuite pour essayer la bibliothèque sans limitation d’évaluation.
Conclusion
Dans cet article, nous avons appris à
- créer un nouveau fichier de formes par programmation ;
- ajouter de nouvelles fonctionnalités au fichier de formes ;
- modifier le calque du fichier de formes ;
- ouvrez la couche du fichier de formes et lisez les attributs à l’aide de C#.
En outre, vous pouvez découvrir comment travailler avec plusieurs autres formats de fichiers SIG et en savoir plus sur Aspose.GIS pour l’API .NET à l’aide de la documentation. En cas d’ambiguïté, n’hésitez pas à nous contacter sur notre forum.
Voir également
- Créer un fichier KML ou lire ses fonctionnalités par programmation à l’aide de C#
- Convertir Shapefile en GeoJSON et GeoJSON en Shapefile en utilisant C#
- Exporter la couche vectorielle au format CSV en C#
- Lire les fonctionnalités, les points et les géométries des couches vectorielles à partir de fichiers CSV
- Lire des fichiers GPX à l’aide de C#