Формат Shapefile — це формат геопросторових векторних даних, який використовується для відображення географічної інформації. Ми можемо зберігати розташування, геометрію та атрибути точок, ліній і багатокутників у Shapefile. У цій статті ми навчимося створювати та читати Shapefile у C#.
Ця стаття охоплюватиме наступні теми:
- Що таке шейп-файл
- Як використовувати шейп-файл
- C# API для створення та читання шейп-файлу – бібліотека .NET GIS
- Створіть шейп-файл за допомогою C#
- Додати функції до наявного ShapeFile у 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 для створення та читання Shapefile – бібліотека .NET GIS
Для створення або читання шейп-файлів ми будемо використовувати Aspose.GIS for .NET API. Він дозволяє відтворювати карти, створювати, читати та конвертувати географічні дані без додаткового програмного забезпечення. Він підтримує роботу з шейп-файлами разом із кількома іншими підтримуваними форматами файлів.
Клас VectorLayer API представляє векторний рівень. Він пропонує різні властивості та методи для роботи з колекцією географічних об’єктів, що зберігаються у файлі. Метод Create() цього класу дозволяє створювати підтримувані векторні шари. Клас Drivers містить драйвери для всіх підтримуваних форматів. Клас Feature API представляє географічний об’єкт, що складається з геометрії та визначених користувачем атрибутів.
Завантажте DLL API або встановіть його за допомогою NuGet.
PM> Install-Package Aspose.GIS
Створення Shapefile за допомогою C#
Ми можемо легко створити шейп-файл програмно, дотримуючись наведених нижче кроків:
- По-перше, створіть шар за допомогою методу VectorLayer.Create().
- Далі додайте FeatureAttributes до колекції атрибутів шару.
- Потім створіть екземпляр класу Feature за допомогою методу ConstructFeature().
- Після цього встановіть значення різних атрибутів.
- Нарешті, додайте функцію за допомогою методу Add().
У наведеному нижче прикладі коду показано, як створити шейп-файл у C#:
// Цей приклад коду демонструє, як створити новий шейп-файл.
// Створіть новий Shapefile
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);
}
Додайте функції до існуючого ShapeFile за допомогою C#
Ми також можемо додати нові функції до існуючого шейп-файлу, виконавши наведені нижче дії.
- По-перше, завантажте шейп-файл за допомогою методу Drivers.Shapefile.EditLayer().
- Далі створіть екземпляр класу Feature за допомогою методу ConstructFeature().
- Після цього встановіть значення різних атрибутів.
- Нарешті, додайте функцію за допомогою методу Add().
У наведеному нижче прикладі коду показано, як додати функції до наявного шейп-файлу за допомогою C#.
// Цей приклад коду демонструє, як редагувати шейп-файл.
// Шлях до файлу
string path = Path.Combine(dataDir, "NewShapeFile_out.shp");
// Редагувати шар Shapefile
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 за допомогою документації. У разі будь-якої неясності зв’яжіться з нами на нашому форумі.