Skapa och läs Shapefil i C#

Formatet Shapefile är ett geospatialt vektordataformat som används för att visa geografisk information. Vi kan lagra platsen, geometrin och tilldelningen av punkt-, linje- och polygonfunktioner i Shapefile. I den här artikeln kommer vi att lära oss hur du skapar och läser Shapefile i C#.

Den här artikeln ska täcka följande ämnen:

  1. Vad är en Shapefil
  2. Hur man använder en Shapefil
  3. C# API för att skapa och läsa Shapefile – .NET GIS Library
  4. Skapa en Shapefil med C#
  5. Lägg till funktioner till en befintlig ShapeFile i C#
  6. Läs en Shapefil med C#

Vad är en Shapefil

En shapefil representerar geospatial information i form av vektordata som ska användas av GIS-applikationer. Den utvecklades av ESRI som en öppen specifikation för att underlätta interoperabilitet mellan ESRI och andra mjukvaruprodukter. Den innehåller geometriska data som ritar punkter, linjer eller polygoner på en karta och dataattributen. Shapefiler kan läsas direkt av flera GIS-program som ArcGIS och QGIS.

Hur man använder en Shapefil

En fristående shapefil (.shp) kan inte användas av program. En giltig shapefil som kan användas i GIS-programvara bör dock innehålla följande ytterligare obligatoriska filer:

  • Shapeindexfil (.shx) - a positional index of the feature geometry;
  • dBase-attributfil (.dbf) - a dBASE file that stores all the attributes of the shapes;
  • Teckentabellsfil (.cpg) - filen för att identifiera teckenkodningen.

C# API för att skapa och läsa Shapefile – .NET GIS-bibliotek

För att skapa eller läsa shapefiler kommer vi att använda Aspose.GIS for .NET API. Det gör det möjligt att rendera kartor, skapa, läsa och konvertera geografiska data utan extra programvara. Den stöder arbete med shapefiler tillsammans med flera andra filformat som stöds.

Klassen VectorLayer i API:t representerar ett vektorlager. Den erbjuder olika egenskaper och metoder för att arbeta med en samling geografiska egenskaper lagrade i en fil. Metoden Create() för denna klass tillåter skapandet av vektorlager som stöds. Klassen Drivers tillhandahåller drivrutiner för alla format som stöds. Klassen Funktion i API:t representerar en geografisk funktion som består av geometri och användardefinierade attribut.

Vänligen antingen ladda ner API:ts DLL eller installera den med NuGet.

PM> Install-Package Aspose.GIS

Skapa Shapefil med C#

Vi kan enkelt skapa en shapefil programmatiskt genom att följa stegen nedan:

  1. Skapa först ett lager med VectorLayer.Create()-metoden.
  2. Lägg sedan till FeatureAttributes till lagrets samling av attribut.
  3. Skapa sedan en instans av klassen Feature med metoden ConstructFeature() .
  4. Efter det ställer du in värden för olika attribut.
  5. Lägg slutligen till funktionen med Add()-metoden.

Följande kodexempel visar hur man skapar en shapefil i C#:

// Detta kodexempel visar hur man skapar en ny shapefil.
// Skapa en ny Shapefil
using (VectorLayer layer = VectorLayer.Create(@"C:\Files\GIS\NewShapeFile_out.shp", Drivers.Shapefile))
{
    // Lägg till attribut innan du lägger till funktioner
    layer.Attributes.Add(new FeatureAttribute("name", AttributeDataType.String));
    layer.Attributes.Add(new FeatureAttribute("age", AttributeDataType.Integer));
    layer.Attributes.Add(new FeatureAttribute("dob", AttributeDataType.DateTime));

    // Lägg till funktion och ställ in värden
    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);

    // Lägg till ytterligare en funktion och ställ in värden
    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);
}
Skapa-Shapefil-med-CSharp

Skapa Shapefil med C#.

Lägg till funktioner till befintlig ShapeFile med C#

Vi kan också lägga till nya funktioner till en befintlig shapefil genom att följa stegen nedan:

  1. Först laddar du en shapefil med metoden Drivers.Shapefile.EditLayer().
  2. Skapa sedan en instans av klassen Feature med metoden ConstructFeature() .
  3. Efter det ställer du in värden för olika attribut.
  4. Lägg slutligen till funktionen med Add()-metoden.

Följande kodexempel visar hur man lägger till funktioner till en befintlig shapefil med C#.

// Detta kodexempel visar hur man redigerar en shapefil.
// Sökväg
string path = Path.Combine(dataDir, "NewShapeFile_out.shp");

// Redigera Shapefil-lager
using (var layer = Drivers.Shapefile.EditLayer(path))
{
    // Lägg till funktion
    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);
}

Läs en Shapefil med C#

Vi kan läsa attribut från en shapefil genom att följa stegen nedan:

  1. Först laddar du en shapefil med metoden Drivers.Shapefile.OpenLayer().
  2. Gå igenom varje funktion i lagret.
  3. Gå igenom attribut och visa attributdetaljer.
  4. Kontrollera slutligen efter punktgeometri och läs av punkter.

Följande kodexempel visar hur man läser en shapefil med C#.

// Detta kodexempel visar hur man läser en ny shapefil.
// Sökväg
string path = Path.Combine(dataDir, "NewShapeFile_out.shp");

// Öppna ett lager
var layer = Drivers.Shapefile.OpenLayer(path);

foreach (Feature feature in layer)
{
    foreach (var attribute in layer.Attributes)
    {
        // Visa attributdetaljer
        Console.WriteLine(attribute.Name + " : " + feature.GetValue(attribute.Name));
    }

    // Kontrollera för punktgeometri
    if (feature.Geometry.GeometryType == GeometryType.Point)
    {
        // Läs poäng
        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

Skaffa en gratis licens

Du kan få en gratis tillfällig licens för att prova biblioteket utan utvärderingsbegränsningar.

Slutsats

I den här artikeln har vi lärt oss hur man gör

  • skapa en ny shapefil programmatiskt;
  • lägg till nya funktioner till shapefilen;
  • redigera shapefile lager;
  • öppna shapefile-lagret och läs attributen med C#.

Dessutom kan du utforska hur du arbetar med flera andra GIS-filformat och lära dig mer om Aspose.GIS för .NET API med hjälp av dokumentationen. I händelse av oklarheter, var god kontakta oss på vårt forum.

Se även