Crear y leer Shapefile en C#

El formato Shapefile es un formato de datos vectoriales geoespaciales que se utiliza para mostrar información geográfica. Podemos almacenar la ubicación, la geometría y la atribución de características de puntos, líneas y polígonos en Shapefile. En este artículo, aprenderemos cómo crear y leer Shapefile en C#.

Este artículo cubrirá los siguientes temas:

  1. Qué es un Shapefile
  2. Cómo usar un archivo de formas
  3. API C# para crear y leer Shapefile – Biblioteca .NET GIS
  4. Crear un Shapefile usando C#
  5. Agregar funciones a un ShapeFile existente en C#
  6. Leer un Shapefile usando C#

¿Qué es un archivo de forma?

Un archivo de forma representa información geoespacial en forma de datos vectoriales para ser utilizados por aplicaciones GIS. Fue desarrollado por ESRI como una especificación abierta para facilitar la interoperabilidad entre ESRI y otros productos de software. Contiene los datos geométricos que dibujan puntos, líneas o polígonos en un mapa y los atributos de los datos. Los archivos de forma pueden ser leídos directamente por varios programas de software GIS como ArcGIS y QGIS.

Cómo usar un archivo de forma

Las aplicaciones de software no pueden utilizar un archivo de forma independiente (.shp). Sin embargo, un archivo de forma válido que se puede usar en el software GIS debe contener los siguientes archivos obligatorios adicionales:

API de C# para crear y leer Shapefile – Biblioteca .NET GIS

Para crear o leer archivos de forma, usaremos la API Aspose.GIS for .NET. Permite renderizar mapas, crear, leer y convertir datos geográficos sin software adicional. Admite trabajar con archivos de forma junto con varios otros formatos de archivo admitidos.

La clase VectorLayer de la API representa una capa vectorial. Ofrece varias propiedades y métodos para trabajar con una colección de características geográficas almacenadas en un archivo. El método Create() de esta clase permite la creación de capas vectoriales compatibles. La clase Drivers proporciona controladores para todos los formatos admitidos. La clase Característica de la API representa una característica geográfica compuesta de geometría y atributos definidos por el usuario.

Descargue la DLL de la API o instálela usando NuGet.

PM> Install-Package Aspose.GIS

Crear archivo de formas usando C#

Podemos crear fácilmente un archivo de forma mediante programación siguiendo los pasos que se detallan a continuación:

  1. En primer lugar, cree una capa utilizando el método VectorLayer.Create().
  2. A continuación, agregue FeatureAttributes a la colección de atributos de la capa.
  3. Luego, crea una instancia de la clase Feature usando el método ConstructFeature().
  4. Después de eso, establezca valores de diferentes atributos.
  5. Finalmente, agregue la característica utilizando el método Add().

El siguiente ejemplo de código muestra cómo crear un archivo de formas en C#:

// Este ejemplo de código demuestra cómo crear un nuevo shapefile.
// Crear un nuevo Shapefile
using (VectorLayer layer = VectorLayer.Create(@"C:\Files\GIS\NewShapeFile_out.shp", Drivers.Shapefile))
{
    // Agregar atributos antes de agregar características
    layer.Attributes.Add(new FeatureAttribute("name", AttributeDataType.String));
    layer.Attributes.Add(new FeatureAttribute("age", AttributeDataType.Integer));
    layer.Attributes.Add(new FeatureAttribute("dob", AttributeDataType.DateTime));

    // Agregar características y establecer valores
    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);

    // Agregar otra función y establecer valores
    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);
}
Crear-Shapefile-usando-CSharp

Cree un archivo Shapefile usando C#.

Agregar características a ShapeFile existente usando C#

También podemos agregar nuevas funciones a un archivo de forma existente siguiendo los pasos que se detallan a continuación:

  1. En primer lugar, cargue un archivo de forma utilizando el método Drivers.Shapefile.EditLayer().
  2. A continuación, cree una instancia de la clase Feature mediante el método ConstructFeature().
  3. Después de eso, establezca valores de diferentes atributos.
  4. Finalmente, agregue la característica utilizando el método Add().

El siguiente ejemplo de código muestra cómo agregar características a un archivo de forma existente usando C#.

// Este ejemplo de código muestra cómo editar un archivo de forma.
// Ruta de archivo
string path = Path.Combine(dataDir, "NewShapeFile_out.shp");

// Editar capa de Shapefile
using (var layer = Drivers.Shapefile.EditLayer(path))
{
    // Agregar función
    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);
}

Leer un Shapefile usando C#

Podemos leer atributos de un archivo de forma siguiendo los pasos que se detallan a continuación:

  1. En primer lugar, cargue un archivo de forma utilizando el método Drivers.Shapefile.OpenLayer().
  2. Recorra cada Característica en la capa.
  3. Recorra los atributos y muestre los detalles de los atributos.
  4. Finalmente, verifique la geometría del punto y lea los puntos.

El siguiente ejemplo de código muestra cómo leer un archivo de forma usando C#.

// Este ejemplo de código demuestra cómo leer un nuevo shapefile.
// Ruta de archivo
string path = Path.Combine(dataDir, "NewShapeFile_out.shp");

// Abrir una capa
var layer = Drivers.Shapefile.OpenLayer(path);

foreach (Feature feature in layer)
{
    foreach (var attribute in layer.Attributes)
    {
        // Mostrar detalles de atributos
        Console.WriteLine(attribute.Name + " : " + feature.GetValue(attribute.Name));
    }

    // Compruebe la geometría de punto
    if (feature.Geometry.GeometryType == GeometryType.Point)
    {
        // Leer puntos
        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

Obtenga una licencia gratis

Puede obtener una licencia temporal gratuita para probar la biblioteca sin limitaciones de evaluación.

Conclusión

En este artículo, hemos aprendido cómo

  • crear un nuevo shapefile programáticamente;
  • agregar nuevas características al archivo de forma;
  • editar capa de archivo de forma;
  • abra la capa del archivo de forma y lea los atributos usando C#.

Además, puede explorar cómo trabajar con varios otros formatos de archivo GIS y obtener más información sobre Aspose.GIS para la API .NET utilizando la documentación. En caso de cualquier ambigüedad, no dude en contactarnos en nuestro foro.

Ver también