Twórz i czytaj Shapefile w C#

Format Shapefile to format wektorowych danych geoprzestrzennych używany do wyświetlania informacji geograficznych. W Shapefile możemy przechowywać lokalizację, geometrię i przypisanie cech punktowych, liniowych i wielokątnych. W tym artykule nauczymy się tworzyć i odczytywać Shapefile w języku C#.

Ten artykuł obejmuje następujące tematy:

  1. Co to jest plik Shape
  2. Jak korzystać z pliku Shape
  3. C# API do tworzenia i odczytywania plików Shapefile – biblioteka .NET GIS
  4. Utwórz plik Shape przy użyciu C#
  5. Dodaj funkcje do istniejącego pliku kształtu w C#
  6. Odczyt pliku Shape przy użyciu języka C#

Co to jest plik Shape

Plik kształtu reprezentuje informacje geoprzestrzenne w postaci danych wektorowych, które mają być używane przez aplikacje GIS. Został opracowany przez ESRI jako otwarta specyfikacja ułatwiająca interoperacyjność między ESRI a innymi produktami oprogramowania. Zawiera dane geometryczne, które rysują punkty, linie lub wielokąty na mapie oraz atrybuty danych. Pliki shape mogą być bezpośrednio odczytywane przez kilka programów GIS, takich jak ArcGIS i QGIS.

Jak korzystać z pliku Shape

Samodzielny plik kształtu (.shp) nie może być używany przez aplikacje. Jednak prawidłowy plik kształtu, którego można użyć w oprogramowaniu GIS, powinien zawierać następujące dodatkowe obowiązkowe pliki:

C# API do tworzenia i odczytywania plików Shapefile – biblioteka .NET GIS

Do tworzenia lub odczytywania plików kształtu będziemy używać API Aspose.GIS for .NET. Pozwala renderować mapy, tworzyć, odczytywać i konwertować dane geograficzne bez dodatkowego oprogramowania. Obsługuje pracę z plikami kształtu wraz z kilkoma innymi obsługiwanymi formatami plików.

Klasa VectorLayer interfejsu API reprezentuje warstwę wektorową. Oferuje różne właściwości i metody pracy ze zbiorem obiektów geograficznych przechowywanych w pliku. Metoda Create() tej klasy umożliwia tworzenie obsługiwanych warstw wektorowych. Klasa Drivers udostępnia sterowniki dla wszystkich obsługiwanych formatów. Klasa Feature interfejsu API reprezentuje obiekt geograficzny składający się z geometrii i atrybutów zdefiniowanych przez użytkownika.

Pobierz bibliotekę DLL interfejsu API lub zainstaluj ją za pomocą NuGet.

PM> Install-Package Aspose.GIS

Utwórz plik Shapefile za pomocą C#

Możemy łatwo programowo utworzyć plik kształtu, wykonując czynności podane poniżej:

  1. Najpierw utwórz warstwę za pomocą metody VectorLayer.Create().
  2. Następnie dodaj FeatureAttributes do kolekcji atrybutów warstwy.
  3. Następnie utwórz instancję klasy Feature za pomocą metody ConstructFeature().
  4. Następnie ustaw wartości różnych atrybutów.
  5. Na koniec dodaj funkcję przy użyciu metody Add().

Poniższy przykładowy kod pokazuje, jak utworzyć plik kształtu w języku C#:

// Ten przykład kodu demonstruje, jak utworzyć nowy plik kształtu.
// Utwórz nowy plik kształtu
using (VectorLayer layer = VectorLayer.Create(@"C:\Files\GIS\NewShapeFile_out.shp", Drivers.Shapefile))
{
    // Dodaj atrybuty przed dodaniem funkcji
    layer.Attributes.Add(new FeatureAttribute("name", AttributeDataType.String));
    layer.Attributes.Add(new FeatureAttribute("age", AttributeDataType.Integer));
    layer.Attributes.Add(new FeatureAttribute("dob", AttributeDataType.DateTime));

    // Dodaj funkcję i ustaw wartości
    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);

    // Dodaj kolejną funkcję i ustaw wartości
    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);
}
Utwórz-Shapefile-używając-CSharp

Utwórz plik Shapefile przy użyciu języka C#.

Dodaj funkcje do istniejącego pliku ShapeFile za pomocą C#

Możemy również dodać nowe funkcje do istniejącego pliku kształtu, wykonując czynności podane poniżej:

  1. Najpierw załaduj plik kształtu za pomocą metody Drivers.Shapefile.EditLayer().
  2. Następnie utwórz instancję klasy Feature za pomocą metody ConstructFeature().
  3. Następnie ustaw wartości różnych atrybutów.
  4. Na koniec dodaj funkcję przy użyciu metody Add().

Poniższy przykładowy kod pokazuje, jak dodać funkcje do istniejącego pliku kształtu przy użyciu języka C#.

// Ten przykład kodu pokazuje, jak edytować plik kształtu.
// Ścieżka pliku
string path = Path.Combine(dataDir, "NewShapeFile_out.shp");

// Edytuj warstwę Shapefile
using (var layer = Drivers.Shapefile.EditLayer(path))
{
    // Dodaj funkcję
    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);
}

Odczytywanie pliku Shapefile za pomocą języka C#

Możemy odczytać atrybuty z pliku kształtu, wykonując poniższe czynności:

  1. Najpierw załaduj plik kształtu za pomocą metody Drivers.Shapefile.OpenLayer().
  2. Przejdź przez każdy obiekt w warstwie.
  3. Przeglądaj atrybuty i wyświetlaj szczegóły atrybutów.
  4. Na koniec sprawdź geometrię punktu i przeczytaj punkty.

Poniższy przykładowy kod pokazuje, jak odczytać plik kształtu przy użyciu języka C#.

// Ten przykład kodu demonstruje, jak odczytać nowy plik kształtu.
// Ścieżka pliku
string path = Path.Combine(dataDir, "NewShapeFile_out.shp");

// Otwórz warstwę
var layer = Drivers.Shapefile.OpenLayer(path);

foreach (Feature feature in layer)
{
    foreach (var attribute in layer.Attributes)
    {
        // Pokaż szczegóły atrybutu
        Console.WriteLine(attribute.Name + " : " + feature.GetValue(attribute.Name));
    }

    // Sprawdź geometrię punktu
    if (feature.Geometry.GeometryType == GeometryType.Point)
    {
        // Przeczytaj punkty
        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

Uzyskaj bezpłatną licencję

Możesz uzyskać bezpłatną tymczasową licencję, aby wypróbować bibliotekę bez ograniczeń ewaluacyjnych.

Wniosek

W tym artykule dowiedzieliśmy się, jak to zrobić

  • programowo utwórz nowy plik kształtu;
  • dodawać nowe funkcje do pliku kształtu;
  • edytuj warstwę pliku kształtu;
  • otwórz warstwę pliku kształtu i odczytaj atrybuty za pomocą C#.

Poza tym możesz dowiedzieć się, jak pracować z kilkoma innymi formatami plików GIS i dowiedzieć się więcej o Aspose.GIS for .NET API, korzystając z dokumentacji. W przypadku jakichkolwiek niejasności prosimy o kontakt na naszym forum.

Zobacz też