Tạo và đọc Shapefile trong C#

Định dạng Shapefile là định dạng dữ liệu vectơ không gian địa lý được sử dụng để hiển thị thông tin địa lý. Chúng tôi có thể lưu trữ vị trí, hình học và thuộc tính của các đối tượng điểm, đường và đa giác trong Shapefile. Trong bài này, chúng ta sẽ học cách tạo và đọc Shapefile trong C#.

Bài viết này sẽ bao gồm các chủ đề sau:

  1. Shapefile là gì
  2. Cách sử dụng tệp hình dạng
  3. API C# để tạo và đọc tệp hình dạng - Thư viện .NET GIS
  4. Tạo Shapefile bằng C#
  5. Thêm tính năng vào ShapeFile hiện có trong C#
  6. Đọc tệp Shapefile bằng C#

Shapefile là gì

Một tệp hình dạng đại diện cho thông tin Không gian địa lý dưới dạng dữ liệu vectơ sẽ được sử dụng bởi các ứng dụng GIS. Nó được phát triển bởi ESRI như một đặc tả mở để tạo điều kiện cho khả năng tương tác giữa ESRI và các sản phẩm phần mềm khác. Nó chứa dữ liệu hình học vẽ các điểm, đường thẳng hoặc đa giác trên bản đồ và các thuộc tính dữ liệu. Các tệp định dạng có thể được đọc trực tiếp bằng một số chương trình phần mềm GIS như ArcGISQGIS.

Cách sử dụng Shapefile

Các ứng dụng phần mềm không thể sử dụng tệp hình dạng độc lập (.shp). Tuy nhiên, một tệp định dạng hợp lệ có thể được sử dụng trong phần mềm GIS phải chứa các tệp bắt buộc bổ sung sau:

API C# để tạo và đọc tệp hình dạng - Thư viện .NET GIS

Để tạo hoặc đọc tệp hình dạng, chúng tôi sẽ sử dụng API Aspose.GIS for .NET. Nó cho phép hiển thị bản đồ, tạo, đọc và chuyển đổi dữ liệu địa lý mà không cần phần mềm bổ sung. Nó hỗ trợ làm việc với các tệp định dạng cùng với một số định dạng tệp được hỗ trợ khác.

Lớp VectorLayer của API đại diện cho một lớp vectơ. Nó cung cấp các thuộc tính và phương pháp khác nhau để làm việc với một tập hợp các đối tượng địa lý được lưu trữ trong một tệp. Phương thức Create() của lớp này cho phép tạo các lớp vectơ được hỗ trợ. Lớp Trình điều khiển cung cấp trình điều khiển cho tất cả các định dạng được hỗ trợ. Lớp Tính năng của API đại diện cho một đối tượng địa lý bao gồm hình học và các thuộc tính do người dùng xác định.

Vui lòng tải xuống DLL của API hoặc cài đặt nó bằng NuGet.

PM> Install-Package Aspose.GIS

Tạo Shapefile bằng C#

Chúng ta có thể dễ dàng tạo một shapefile theo chương trình bằng cách làm theo các bước dưới đây:

  1. Đầu tiên, tạo một lớp bằng phương thức VectorLayer.Create().
  2. Tiếp theo, thêm FeatureAttributes vào bộ sưu tập các thuộc tính của lớp.
  3. Sau đó, tạo một thể hiện của lớp Feature bằng phương thức ConstructFeature().
  4. Sau đó, đặt giá trị của các thuộc tính khác nhau.
  5. Cuối cùng, thêm tính năng bằng phương thức Add().

Mẫu mã sau đây cho thấy cách tạo một tệp hình dạng trong C#:

// Ví dụ mã này trình bày cách tạo một tệp hình dạng mới.
// Tạo một Shapefile mới
using (VectorLayer layer = VectorLayer.Create(@"C:\Files\GIS\NewShapeFile_out.shp", Drivers.Shapefile))
{
    // Thêm thuộc tính trước khi thêm tính năng
    layer.Attributes.Add(new FeatureAttribute("name", AttributeDataType.String));
    layer.Attributes.Add(new FeatureAttribute("age", AttributeDataType.Integer));
    layer.Attributes.Add(new FeatureAttribute("dob", AttributeDataType.DateTime));

    // Thêm tính năng và đặt giá trị
    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);

    // Thêm một tính năng khác và đặt giá trị
    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);
}
Tạo-Shapefile-using-CSharp

Tạo Shapefile bằng C#.

Thêm các tính năng vào ShapeFile hiện có bằng C#

Chúng tôi cũng có thể thêm các tính năng mới vào tệp hình dạng hiện có bằng cách làm theo các bước dưới đây:

  1. Đầu tiên, tải một tệp hình dạng bằng phương thức Drivers.Shapefile.EditLayer().
  2. Tiếp theo, tạo một thể hiện của lớp Feature bằng phương thức ConstructFeature().
  3. Sau đó, đặt giá trị của các thuộc tính khác nhau.
  4. Cuối cùng, thêm tính năng bằng phương thức Add().

Mẫu mã sau đây cho thấy cách thêm các tính năng vào một tệp hình dạng hiện có bằng cách sử dụng C#.

// Ví dụ mã này trình bày cách chỉnh sửa một tệp hình dạng.
// Đường dẫn tập tin
string path = Path.Combine(dataDir, "NewShapeFile_out.shp");

// Chỉnh sửa lớp Shapefile
using (var layer = Drivers.Shapefile.EditLayer(path))
{
    // Thêm tính năng
    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 Shapefile bằng C#

Chúng ta có thể đọc các thuộc tính từ một tệp hình dạng bằng cách làm theo các bước dưới đây:

  1. Đầu tiên, tải một tệp hình dạng bằng phương thức Drivers.Shapefile.OpenLayer().
  2. Lặp qua từng Tính năng trong lớp.
  3. Lặp qua các thuộc tính và hiển thị chi tiết thuộc tính.
  4. Cuối cùng, kiểm tra hình học Điểm và đọc điểm.

Mẫu mã sau đây cho thấy cách đọc tệp hình dạng bằng C#.

// Ví dụ mã này trình bày cách đọc một tệp hình dạng mới.
// Đường dẫn tập tin
string path = Path.Combine(dataDir, "NewShapeFile_out.shp");

// Mở một lớp
var layer = Drivers.Shapefile.OpenLayer(path);

foreach (Feature feature in layer)
{
    foreach (var attribute in layer.Attributes)
    {
        // Hiển thị chi tiết thuộc tính
        Console.WriteLine(attribute.Name + " : " + feature.GetValue(attribute.Name));
    }

    // Kiểm tra hình học điểm
    if (feature.Geometry.GeometryType == GeometryType.Point)
    {
        // Đọc điểm
        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

Nhận giấy phép miễn phí

Bạn có thể nhận giấy phép tạm thời miễn phí để dùng thử thư viện mà không có giới hạn đánh giá.

Sự kết luận

Trong bài viết này, chúng ta đã học cách

  • tạo một shapefile mới theo lập trình;
  • thêm các tính năng mới vào shapefile;
  • chỉnh sửa lớp shapefile;
  • mở lớp shapefile và đọc các thuộc tính bằng C#.

Bên cạnh đó, bạn có thể khám phá cách làm việc với một số định dạng tệp GIS khác và tìm hiểu thêm về API Aspose.GIS cho .NET bằng cách sử dụng tài liệu. Trong trường hợp có bất kỳ sự mơ hồ nào, vui lòng liên hệ với chúng tôi trên diễn đàn của chúng tôi.

Xem thêm