สร้างและอ่าน Shapefile ใน C#

รูปแบบ Shapefile เป็นรูปแบบข้อมูลเวกเตอร์เชิงพื้นที่ที่ใช้แสดงข้อมูลทางภูมิศาสตร์ เราสามารถจัดเก็บตำแหน่ง รูปทรงเรขาคณิต และลักษณะของจุด เส้น และรูปหลายเหลี่ยมใน Shapefile ในบทความนี้ เราจะมาเรียนรู้วิธีการสร้างและอ่าน Shapefile ใน C#

บทความนี้จะครอบคลุมหัวข้อต่อไปนี้:

  1. Shapefile คืออะไร
  2. วิธีใช้ Shapefile
  3. C# API เพื่อสร้างและอ่าน Shapefile – .NET GIS Library
  4. สร้าง Shapefile โดยใช้ C#
  5. เพิ่มคุณสมบัติให้กับ ShapeFile ที่มีอยู่ใน C#
  6. อ่าน Shapefile โดยใช้ C#

Shapefile คืออะไร

ไฟล์รูปร่างแสดงข้อมูลเชิงพื้นที่ในรูปแบบของข้อมูลเวกเตอร์ที่จะใช้โดยแอปพลิเคชัน GIS ได้รับการพัฒนาโดย ESRI เป็นข้อกำหนดแบบเปิดเพื่ออำนวยความสะดวกในการทำงานร่วมกันระหว่าง ESRI และผลิตภัณฑ์ซอฟต์แวร์อื่นๆ ประกอบด้วยข้อมูลทางเรขาคณิตที่วาดจุด เส้น หรือรูปหลายเหลี่ยมบนแผนที่และแอตทริบิวต์ของข้อมูล Shapefiles สามารถอ่านได้โดยตรงจากโปรแกรมซอฟต์แวร์ GIS หลายโปรแกรม เช่น ArcGIS และ QGIS

วิธีใช้ Shapefile

ซอฟต์แวร์แอปพลิเคชันไม่สามารถใช้ Shapefile (.shp) แบบสแตนด์อโลนได้ อย่างไรก็ตาม ไฟล์รูปร่างที่ถูกต้องที่สามารถใช้ในซอฟต์แวร์ GIS ควรมีไฟล์บังคับเพิ่มเติมต่อไปนี้:

C# API เพื่อสร้างและอ่าน Shapefile – .NET GIS Library

ในการสร้างหรืออ่านไฟล์รูปร่าง เราจะใช้ API ของ Aspose.GIS for .NET ช่วยให้แสดงแผนที่ สร้าง อ่าน และแปลงข้อมูลทางภูมิศาสตร์โดยไม่ต้องใช้ซอฟต์แวร์เพิ่มเติม รองรับการทำงานกับไฟล์รูปร่างพร้อมกับ [รูปแบบไฟล์ที่รองรับ] อื่น ๆ อีกมากมาย 14

คลาส VectorLayer ของ API แสดงถึงเลเยอร์เวกเตอร์ นำเสนอคุณสมบัติและวิธีการต่างๆ ในการทำงานกับคอลเลกชันของคุณลักษณะทางภูมิศาสตร์ที่จัดเก็บไว้ในไฟล์ เมธอด Create() ของคลาสนี้ทำให้สามารถสร้างเลเยอร์เวกเตอร์ที่รองรับได้ คลาส Drivers มีไดรเวอร์สำหรับรูปแบบที่รองรับทั้งหมด คลาส ฟีเจอร์ ของ API แสดงถึงฟีเจอร์ทางภูมิศาสตร์ที่ประกอบด้วยรูปทรงเรขาคณิตและแอตทริบิวต์ที่ผู้ใช้กำหนด

โปรด ดาวน์โหลด DLL ของ API หรือติดตั้งโดยใช้ NuGet

PM> Install-Package Aspose.GIS

สร้าง Shapefile โดยใช้ C#

เราสามารถสร้างไฟล์รูปร่างโดยทางโปรแกรมได้อย่างง่ายดายโดยทำตามขั้นตอนด้านล่าง:

  1. ขั้นแรก สร้างเลเยอร์โดยใช้เมธอด VectorLayer.Create()
  2. ถัดไป เพิ่ม FeatureAttributes ให้กับคอลเลกชันของแอตทริบิวต์ของเลเยอร์
  3. จากนั้น สร้างอินสแตนซ์ของคลาส Feature โดยใช้เมธอด ConstructFeature()
  4. หลังจากนั้นให้กำหนดค่าของแอตทริบิวต์ต่างๆ
  5. สุดท้ายเพิ่มคุณสมบัติโดยใช้วิธีการเพิ่ม ()

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการสร้างไฟล์รูปร่างใน 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-โดยใช้-CSharp

สร้าง Shapefile โดยใช้ C#

เพิ่มคุณสมบัติให้กับ ShapeFile ที่มีอยู่โดยใช้ C

เรายังสามารถเพิ่มคุณสมบัติใหม่ให้กับไฟล์รูปร่างที่มีอยู่โดยทำตามขั้นตอนด้านล่าง:

  1. ประการแรก โหลดไฟล์รูปร่างโดยใช้เมธอด Drivers.Shapefile.EditLayer()
  2. จากนั้น สร้างอินสแตนซ์ของคลาส Feature โดยใช้เมธอด ConstructFeature()
  3. หลังจากนั้นให้กำหนดค่าของแอตทริบิวต์ต่างๆ
  4. สุดท้ายเพิ่มคุณสมบัติโดยใช้วิธีการเพิ่ม ()

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีเพิ่มฟีเจอร์ให้กับไฟล์รูปร่างที่มีอยู่โดยใช้ 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);
}

อ่าน Shapefile โดยใช้ C#

เราสามารถอ่านแอตทริบิวต์จากไฟล์รูปร่างได้โดยทำตามขั้นตอนด้านล่าง:

  1. ประการแรก โหลดไฟล์รูปร่างโดยใช้เมธอด Drivers.Shapefile.OpenLayer()
  2. วนซ้ำแต่ละฟีเจอร์ในเลเยอร์
  3. วนซ้ำแอตทริบิวต์และแสดงรายละเอียดแอตทริบิวต์
  4. สุดท้าย ตรวจสอบ Point geometry และอ่าน point

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการอ่านไฟล์รูปร่างโดยใช้ 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#

นอกจากนี้ คุณสามารถสำรวจวิธีการทำงานกับไฟล์ GIS รูปแบบอื่นๆ และเรียนรู้เพิ่มเติมเกี่ยวกับ Aspose.GIS for .NET API โดยใช้ เอกสารประกอบ ในกรณีที่มีความคลุมเครือ โปรดติดต่อเราได้ที่ ฟอรัม

ดูสิ่งนี้ด้วย