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:
- Co to jest plik Shape
- Jak korzystać z pliku Shape
- C# API do tworzenia i odczytywania plików Shapefile – biblioteka .NET GIS
- Utwórz plik Shape przy użyciu C#
- Dodaj funkcje do istniejącego pliku kształtu w C#
- 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:
- Plik indeksu kształtów (.shx) - a positional index of the feature geometry;
- Plik atrybutów dBase (.dbf) - a dBASE file that stores all the attributes of the shapes;
- Plik strony kodowej (.cpg) - plik identyfikujący kodowanie znaków.
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:
- Najpierw utwórz warstwę za pomocą metody VectorLayer.Create().
- Następnie dodaj FeatureAttributes do kolekcji atrybutów warstwy.
- Następnie utwórz instancję klasy Feature za pomocą metody ConstructFeature().
- Następnie ustaw wartości różnych atrybutów.
- 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);
}
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:
- Najpierw załaduj plik kształtu za pomocą metody Drivers.Shapefile.EditLayer().
- Następnie utwórz instancję klasy Feature za pomocą metody ConstructFeature().
- Następnie ustaw wartości różnych atrybutów.
- 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:
- Najpierw załaduj plik kształtu za pomocą metody Drivers.Shapefile.OpenLayer().
- Przejdź przez każdy obiekt w warstwie.
- Przeglądaj atrybuty i wyświetlaj szczegóły atrybutów.
- 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.