Criar e Ler Shapefile em C#

O formato Shapefile é um formato de dados vetoriais geoespaciais usado para exibir informações geográficas. Podemos armazenar a localização, geometria e atribuição de recursos de ponto, linha e polígono no Shapefile. Neste artigo, aprenderemos como criar e ler Shapefile em C#.

Este artigo deve abordar os seguintes tópicos:

  1. O que é um Shapefile
  2. Como usar um Shapefile
  3. API C# para criar e ler Shapefile – Biblioteca .NET GIS
  4. Crie um Shapefile usando C#
  5. Adicionar recursos a um ShapeFile existente em C#
  6. Leia um Shapefile usando C#

O que é um Shapefile

Um shapefile representa informações geoespaciais na forma de dados vetoriais a serem usados por aplicativos GIS. Foi desenvolvido pela ESRI como uma especificação aberta para facilitar a interoperabilidade entre a ESRI e outros produtos de software. Ele contém os dados geométricos que desenham pontos, linhas ou polígonos em um mapa e os atributos dos dados. Shapefiles podem ser lidos diretamente por vários programas de software GIS, como ArcGIS e QGIS.

Como usar um Shapefile

Um shapefile autônomo (.shp) não pode ser usado por aplicativos de software. No entanto, um shapefile válido que pode ser usado em software GIS deve conter os seguintes arquivos obrigatórios adicionais:

API C# para criar e ler Shapefile – Biblioteca .NET GIS

Para criar ou ler shapefiles, usaremos a API Aspose.GIS for .NET. Permite renderizar mapas, criar, ler e converter dados geográficos sem software adicional. Ele suporta trabalhar com shapefiles junto com vários outros formatos de arquivo suportados.

A classe VectorLayer da API representa uma camada vetorial. Ele oferece várias propriedades e métodos para trabalhar com uma coleção de feições geográficas armazenadas em um arquivo. O método Create() desta classe permite a criação de camadas vetoriais suportadas. A classe Drivers fornece drivers para todos os formatos suportados. A classe Feature da API representa um recurso geográfico composto de geometria e atributos definidos pelo usuário.

Por favor, baixe a DLL da API ou instale-a usando NuGet.

PM> Install-Package Aspose.GIS

Criar Shapefile usando C#

Podemos facilmente criar um shapefile programaticamente seguindo as etapas abaixo:

  1. Primeiramente, crie uma camada usando o método VectorLayer.Create().
  2. Em seguida, adicione FeatureAttributes à coleção de atributos da camada.
  3. Em seguida, crie uma instância da classe Feature usando o método ConstructFeature().
  4. Depois disso, defina valores de diferentes atributos.
  5. Por fim, adicione o recurso usando o método Add().

O exemplo de código a seguir mostra como criar um shapefile em C#:

// Este exemplo de código demonstra como criar um novo shapefile.
// Criar um novo Shapefile
using (VectorLayer layer = VectorLayer.Create(@"C:\Files\GIS\NewShapeFile_out.shp", Drivers.Shapefile))
{
    // Adicione atributos antes de adicionar recursos
    layer.Attributes.Add(new FeatureAttribute("name", AttributeDataType.String));
    layer.Attributes.Add(new FeatureAttribute("age", AttributeDataType.Integer));
    layer.Attributes.Add(new FeatureAttribute("dob", AttributeDataType.DateTime));

    // Adicionar recurso e definir 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);

    // Adicione outro recurso e defina 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);
}
Criar-Shapefile-usando-CSharp

Crie Shapefile usando C#.

Adicionar recursos ao ShapeFile existente usando C#

Também podemos adicionar novos recursos a um shapefile existente seguindo as etapas abaixo:

  1. Primeiramente, carregue um shapefile usando o método Drivers.Shapefile.EditLayer().
  2. Em seguida, crie uma instância da classe Feature usando o método ConstructFeature().
  3. Depois disso, defina valores de diferentes atributos.
  4. Por fim, adicione o recurso usando o método Add().

O exemplo de código a seguir mostra como adicionar recursos a um shapefile existente usando C#.

// Este exemplo de código demonstra como editar um shapefile.
// Caminho de arquivo
string path = Path.Combine(dataDir, "NewShapeFile_out.shp");

// Editar camada Shapefile
using (var layer = Drivers.Shapefile.EditLayer(path))
{
    // Adicionar recurso
    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);
}

Ler um Shapefile usando C#

Podemos ler atributos de um shapefile seguindo os passos abaixo:

  1. Primeiramente, carregue um shapefile usando o método Drivers.Shapefile.OpenLayer().
  2. Faça um loop em cada Recurso na camada.
  3. Faça um loop pelos atributos e mostre os detalhes dos atributos.
  4. Finalmente, verifique a geometria do ponto e leia os pontos.

O exemplo de código a seguir mostra como ler um shapefile usando C#.

// Este exemplo de código demonstra como ler um novo shapefile.
// Caminho de arquivo
string path = Path.Combine(dataDir, "NewShapeFile_out.shp");

// Abra uma camada
var layer = Drivers.Shapefile.OpenLayer(path);

foreach (Feature feature in layer)
{
    foreach (var attribute in layer.Attributes)
    {
        // Mostrar detalhes do atributo
        Console.WriteLine(attribute.Name + " : " + feature.GetValue(attribute.Name));
    }

    // Verifique a geometria do ponto
    if (feature.Geometry.GeometryType == GeometryType.Point)
    {
        // Pontos de leitura
        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

Obtenha uma licença gratuita

Você pode obter uma licença temporária gratuita para experimentar a biblioteca sem limitações de avaliação.

Conclusão

Neste artigo, aprendemos como

  • crie um novo shapefile programaticamente;
  • adicionar novos recursos ao shapefile;
  • editar camada shapefile;
  • abra a camada shapefile e leia os atributos usando C#.

Além disso, você pode explorar como trabalhar com vários outros formatos de arquivo GIS e aprender mais sobre Aspose.GIS para .NET API usando a documentação. Em caso de qualquer ambiguidade, não hesite em contactar-nos no nosso fórum.

Veja também