Создание и чтение шейп-файла в C#

Формат Shapefile — это формат геопространственных векторных данных, используемый для отображения географической информации. Мы можем хранить местоположение, геометрию и атрибуты точечных, линейных и полигональных объектов в шейп-файле. В этой статье мы узнаем, как создавать и читать шейп-файлы на C#.

Эта статья должна охватывать следующие темы:

  1. Что такое шейп-файл
  2. Как использовать шейп-файл
  3. API C# для создания и чтения шейп-файлов — библиотека .NET GIS
  4. Создайте шейп-файл с помощью C#
  5. Добавить функции в существующий шейп-файл в C#
  6. Чтение шейп-файла с помощью C#

Что такое шейп-файл

Шейп-файл представляет геопространственную информацию в виде векторных данных, которые будут использоваться ГИС-приложениями. Он был разработан ESRI как открытая спецификация для облегчения взаимодействия между ESRI и другими программными продуктами. Он содержит геометрические данные, которые рисуют точки, линии или многоугольники на карте, а также атрибуты данных. Шейп-файлы могут напрямую считываться несколькими программами ГИС, такими как ArcGIS и QGIS.

Как использовать шейп-файл

Отдельный шейп-файл (.shp) не может использоваться программными приложениями. Однако действительный шейп-файл, который можно использовать в программном обеспечении ГИС, должен содержать следующие дополнительные обязательные файлы:

C# API для создания и чтения шейп-файлов — Библиотека .NET GIS

Для создания или чтения шейп-файлов мы будем использовать API Aspose.GIS for .NET. Он позволяет отображать карты, создавать, читать и преобразовывать географические данные без дополнительного программного обеспечения. Он поддерживает работу с шейп-файлами наряду с несколькими другими поддерживаемыми форматами файлов.

Класс API VectorLayer представляет собой векторный слой. Он предлагает различные свойства и методы для работы с набором географических объектов, хранящихся в файле. Метод Create() этого класса позволяет создавать поддерживаемые векторные слои. Класс Drivers предоставляет драйверы для всех поддерживаемых форматов. Класс Feature API представляет собой географический объект, состоящий из геометрии и определенных пользователем атрибутов.

Пожалуйста, загрузите DLL API или установите его с помощью NuGet.

PM> Install-Package Aspose.GIS

Создать шейп-файл с помощью C#

Мы можем легко создать шейп-файл программно, выполнив следующие шаги:

  1. Во-первых, создайте слой с помощью метода VectorLayer.Create().
  2. Затем добавьте FeatureAttributes в коллекцию атрибутов слоя.
  3. Затем создайте экземпляр класса Feature с помощью метода ConstructFeature().
  4. После этого установите значения различных атрибутов.
  5. Наконец, добавьте функцию, используя метод Add().

В следующем примере кода показано, как создать шейп-файл на C#:

// В этом примере кода показано, как создать новый шейп-файл.
// Создайте новый шейп-файл
using (VectorLayer layer = VectorLayer.Create(@"C:\Files\GIS\NewShapeFile_out.shp", Drivers.Shapefile))
{
    // Добавляйте атрибуты перед добавлением функций
    layer.Attributes.Add(new FeatureAttribute("name", AttributeDataType.String));
    layer.Attributes.Add(new FeatureAttribute("age", AttributeDataType.Integer));
    layer.Attributes.Add(new FeatureAttribute("dob", AttributeDataType.DateTime));

    // Добавить функцию и установить значения
    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);

    // Добавить еще одну функцию и установить значения
    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);
}
Создать шейп-файл с помощью CSharp

Создайте шейп-файл с помощью C#.

Добавить функции в существующий шейп-файл с помощью C#

Мы также можем добавить новые функции в существующий шейп-файл, выполнив следующие шаги:

  1. Во-первых, загрузите шейп-файл с помощью метода Drivers.Shapefile.EditLayer().
  2. Затем создайте экземпляр класса Feature с помощью метода ConstructFeature().
  3. После этого установите значения различных атрибутов.
  4. Наконец, добавьте функцию, используя метод Add().

В следующем примере кода показано, как добавить функции в существующий шейп-файл с помощью C#.

// В этом примере кода показано, как редактировать шейп-файл.
// Путь к файлу
string path = Path.Combine(dataDir, "NewShapeFile_out.shp");

// Редактировать слой шейп-файла
using (var layer = Drivers.Shapefile.EditLayer(path))
{
    // Добавить функцию
    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);
}

Чтение шейп-файла с помощью C#

Мы можем прочитать атрибуты из шейп-файла, выполнив следующие шаги:

  1. Во-первых, загрузите шейп-файл с помощью метода Drivers.Shapefile.OpenLayer().
  2. Прокрутите каждую функцию в слое.
  3. Прокручивайте атрибуты и показывайте сведения об атрибутах.
  4. Наконец, проверьте геометрию точек и прочтите точки.

В следующем примере кода показано, как читать шейп-файл с помощью C#.

// В этом примере кода показано, как читать новый шейп-файл.
// Путь к файлу
string path = Path.Combine(dataDir, "NewShapeFile_out.shp");

// Открыть слой
var layer = Drivers.Shapefile.OpenLayer(path);

foreach (Feature feature in layer)
{
    foreach (var attribute in layer.Attributes)
    {
        // Показать детали атрибута
        Console.WriteLine(attribute.Name + " : " + feature.GetValue(attribute.Name));
    }

    // Проверка геометрии точки
    if (feature.Geometry.GeometryType == GeometryType.Point)
    {
        // Точки чтения
        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

Получить бесплатную лицензию

Вы можете получить бесплатную временную лицензию, чтобы попробовать библиотеку без ограничений пробной версии.

Вывод

В этой статье мы узнали, как

  • создать новый шейп-файл программно;
  • добавить новые функции в шейп-файл;
  • редактировать слой шейп-файла;
  • откройте слой шейп-файла и прочитайте атрибуты с помощью C#.

Кроме того, вы можете узнать, как работать с несколькими другими форматами файлов ГИС, и узнать больше об Aspose.GIS for .NET API, используя документацию. В случае каких-либо неясностей, пожалуйста, свяжитесь с нами на нашем форуме.

Смотрите также