
Формат Shapefile — это формат геопространственных векторных данных, используемый для отображения географической информации. Мы можем хранить местоположение, геометрию и атрибуты точечных, линейных и полигональных объектов в шейп-файле. В этой статье мы узнаем, как создавать и читать шейп-файлы на C#.
Эта статья должна охватывать следующие темы:
- Что такое шейп-файл
- Как использовать шейп-файл
- API C# для создания и чтения шейп-файлов — библиотека .NET GIS
- Создайте шейп-файл с помощью C#
- Добавить функции в существующий шейп-файл в C#
- Чтение шейп-файла с помощью C#
Что такое шейп-файл
Шейп-файл представляет геопространственную информацию в виде векторных данных, которые будут использоваться ГИС-приложениями. Он был разработан ESRI как открытая спецификация для облегчения взаимодействия между ESRI и другими программными продуктами. Он содержит геометрические данные, которые рисуют точки, линии или многоугольники на карте, а также атрибуты данных. Шейп-файлы могут напрямую считываться несколькими программами ГИС, такими как ArcGIS и QGIS.
Как использовать шейп-файл
Отдельный шейп-файл (.shp) не может использоваться программными приложениями. Однако действительный шейп-файл, который можно использовать в программном обеспечении ГИС, должен содержать следующие дополнительные обязательные файлы:
- Файл индекса формы (.shx) - a positional index of the feature geometry;
- Файл атрибутов dBase (.dbf) - a dBASE file that stores all the attributes of the shapes;
- Файл кодовой страницы (.cpg) — файл для определения кодировки символов.
C# API для создания и чтения шейп-файлов — Библиотека .NET GIS
Для создания или чтения шейп-файлов мы будем использовать API Aspose.GIS for .NET. Он позволяет отображать карты, создавать, читать и преобразовывать географические данные без дополнительного программного обеспечения. Он поддерживает работу с шейп-файлами наряду с несколькими другими поддерживаемыми форматами файлов.
Класс API VectorLayer представляет собой векторный слой. Он предлагает различные свойства и методы для работы с набором географических объектов, хранящихся в файле. Метод Create() этого класса позволяет создавать поддерживаемые векторные слои. Класс Drivers предоставляет драйверы для всех поддерживаемых форматов. Класс Feature API представляет собой географический объект, состоящий из геометрии и определенных пользователем атрибутов.
Пожалуйста, загрузите DLL API или установите его с помощью NuGet.
PM> Install-Package Aspose.GIS
Создать шейп-файл с помощью C#
Мы можем легко создать шейп-файл программно, выполнив следующие шаги:
- Во-первых, создайте слой с помощью метода VectorLayer.Create().
- Затем добавьте FeatureAttributes в коллекцию атрибутов слоя.
- Затем создайте экземпляр класса Feature с помощью метода ConstructFeature().
- После этого установите значения различных атрибутов.
- Наконец, добавьте функцию, используя метод 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);
}

Создайте шейп-файл с помощью C#.
Добавить функции в существующий шейп-файл с помощью C#
Мы также можем добавить новые функции в существующий шейп-файл, выполнив следующие шаги:
- Во-первых, загрузите шейп-файл с помощью метода Drivers.Shapefile.EditLayer().
- Затем создайте экземпляр класса Feature с помощью метода ConstructFeature().
- После этого установите значения различных атрибутов.
- Наконец, добавьте функцию, используя метод 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#
Мы можем прочитать атрибуты из шейп-файла, выполнив следующие шаги:
- Во-первых, загрузите шейп-файл с помощью метода Drivers.Shapefile.OpenLayer().
- Прокрутите каждую функцию в слое.
- Прокручивайте атрибуты и показывайте сведения об атрибутах.
- Наконец, проверьте геометрию точек и прочтите точки.
В следующем примере кода показано, как читать шейп-файл с помощью 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, используя документацию. В случае каких-либо неясностей, пожалуйста, свяжитесь с нами на нашем форуме.