MapPiloteGeopackageHelper 1.1.1

dotnet add package MapPiloteGeopackageHelper --version 1.1.1
                    
NuGet\Install-Package MapPiloteGeopackageHelper -Version 1.1.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="MapPiloteGeopackageHelper" Version="1.1.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="MapPiloteGeopackageHelper" Version="1.1.1" />
                    
Directory.Packages.props
<PackageReference Include="MapPiloteGeopackageHelper" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add MapPiloteGeopackageHelper --version 1.1.1
                    
#r "nuget: MapPiloteGeopackageHelper, 1.1.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package MapPiloteGeopackageHelper@1.1.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=MapPiloteGeopackageHelper&version=1.1.1
                    
Install as a Cake Addin
#tool nuget:?package=MapPiloteGeopackageHelper&version=1.1.1
                    
Install as a Cake Tool

MapPiloteGeopackageHelper

Modern .NET library for creating, reading, and bulk-loading GeoPackage (GPKG) data using SQLite and NetTopologySuite.

Quick Start - Modern Fluent API

// Create/open GeoPackage with fluent API
using var geoPackage = await GeoPackage.OpenAsync("data.gpkg", srid: 3006);

// Create layer with schema
var layer = await geoPackage.EnsureLayerAsync("cities", new Dictionary<string, string>
{
    ["name"] = "TEXT",
    ["population"] = "INTEGER",
    ["area_km2"] = "REAL"
});

// Bulk insert with progress
var progress = new Progress<BulkProgress>(p => 
    Console.WriteLine($"Progress: {p.PercentComplete:F1}%"));

await layer.BulkInsertAsync(features, 
    new BulkInsertOptions(BatchSize: 1000, CreateSpatialIndex: true),
    progress);

// Query with async streaming
await foreach (var city in layer.ReadFeaturesAsync(
    new ReadOptions(WhereClause: "population > 100000", Limit: 10)))
{
    Console.WriteLine($"City: {city.Attributes["name"]} - {city.Attributes["population"]} people");
}

// Count and delete operations
var count = await layer.CountAsync("population < 50000");
var deleted = await layer.DeleteAsync("population < 10000");

? Modern Features

Feature Description Example
Async/Await Proper async support with CancellationToken await layer.BulkInsertAsync(...)
Fluent API Chain operations naturally GeoPackage.OpenAsync().EnsureLayerAsync()
Progress Reporting Track long-running operations IProgress<BulkProgress>
Options Objects Clean configuration, no parameter soup BulkInsertOptions(BatchSize: 1000)
Streaming IAsyncEnumerable for large datasets await foreach (var item in ...)
Rich Queries WHERE, LIMIT, ORDER BY support ReadOptions(WhereClause: "pop > 1000")
Conflict Handling Insert policies (Abort/Ignore/Replace) ConflictPolicy.Ignore
CRUD Operations Count, Delete with conditions await layer.DeleteAsync("status = 'old'")

API Comparison

// One-liner with progress and options
using var gp = await GeoPackage.OpenAsync("data.gpkg");
var layer = await gp.EnsureLayerAsync("places", schema);
await layer.BulkInsertAsync(features, options, progress);

Traditional API (Still Supported)

// Multi-step process
CMPGeopackageCreateHelper.CreateGeoPackage(path, srid);
GeopackageLayerCreateHelper.CreateGeopackageLayer(path, name, schema);
CGeopackageAddDataHelper.BulkInsertFeatures(path, name, features);

?? Sample Projects

Project Purpose API Style
FluentApiExample Comprehensive modern API demo ?? Modern
MapPiloteGeopackageHelperHelloWorld Step-by-step tutorial ?? Traditional
MapPiloteGeopackageHelperSchemaBrowser Inspect unknown GeoPackages ?? Analysis
BulkLoadPerformaceTester Performance comparison ? Benchmarks

What This Library Does

? Creates GeoPackages with required core tables
? Creates layers (tables) with geometry + custom attribute columns
? Bulk writes features with validation and progress tracking
? Streams features back with filtering and paging
? Modern async patterns with cancellation support
? Schema inspection and validation

Getting Started

  1. Install: dotnet add package MapPiloteGeopackageHelper
  2. Explore: Check out FluentApiExample project
  3. Inspect: Use MapPiloteGeopackageHelperSchemaBrowser for unknown files
  4. Learn: Traditional patterns in MapPiloteGeopackageHelperHelloWorld

Open the generated .gpkg files in QGIS, ArcGIS, or any GIS software!

Product Compatible and additional computed target framework versions.
.NET net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.1.1 129 9/4/2025
1.1.0 125 9/4/2025
1.0.0 119 9/2/2025

New Fluent API