Code Quality Rank: L1
Programming language: C#
License: GNU General Public License v3.0 or later
Tags: GIS     Xamarin     osm     openstreetmap     routing     rendering     mapping    
Latest version: v1.3

OsmSharp alternatives and similar packages

Based on the "Gis" category.
Alternatively, view OsmSharp alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of OsmSharp or a related project?

Add another 'Gis' Package



Build statusVisit our website MIT licensed

  • OsmSharp: NuGet Badge NuGet Badge
  • OsmSharp.Geo: NuGet Badge NuGet Badge

OsmSharp enables you to work directly with OpenStreetMap (OSM) data in .NET. Most important features are:

  • Read/Write OSM-XML.
  • Read/Write OSM-PBF.
  • Streamed architecture, minimal memory footprint.
  • Convert a stream of native OSM objects to 'complete' OSM objects: Ways with all their actual nodes, Relations with all members instantiated.
  • Convert OSM objects to geometries.

Documentation & Samples

Check the documentation website for documentation and sample code. Don't hesitate to ask questions using an issue or request more documentation on any topic you need.

There are 5 sample projects in the samples folder:

  • Sample.CompleteStream: Convert Ways and Relation into objects with nodes and members instantiated.
  • Sample.Filter: Filter data from an OSM file using LINQ.
  • Sample.GeoFilter: Filter data using a bounding box or polygon.
  • Sample.GeometryStream: Extract all power lines from an OSM file, convert them to linestring features and write to GeoJSON.
  • Sample.GeometryStream.Shape: Extract all power lines from an OSM file, convert them to linestring features and write to a shapefile.


PM> Install-Package OsmSharp

There's also a package to use NTS together with OsmSharp to convert OSM-data to features/geometries.

PM> Install-Package OsmSharp.Geo


A really good way to get started is to have a look at the samples but we collected a few code-snippets for you here anyway:

A common usecase is to stream and filter OSM data. To read from an OSM file and enumerate all objects just open the file as a stream source and use foreach.

Read data from an OSM-PBF file:

using(var fileStream = new FileInfo(@"/path/to/some/osmfile.osm.pbf").OpenRead())
  var source = new PBFOsmStreamSource(fileStream);
  foreach (var element in source)

Write data to an OSM-PBF file:

using(var fileStream = new FileInfo(@"/path/to/my/osmfile.osm.pbf").OpenRead())
    var target = new PBFOsmStreamTarget(fileStream);
    target.AddNode(new Node()
            Id = 1,
            ChangeSetId = 1,
            Latitude = 0,
            Longitude = 0,
            Tags = new TagsCollection(
                Tag.Create("key", "value")),
            TimeStamp = DateTime.Now,
            UserId = 1424,
            UserName = "you",
            Version = 1,
            Visible = true

Filter an area and extract a smaller region:

var source = new PBFOsmStreamSource(
    new FileInfo(@"/path/to/file.osm.pbf").OpenRead());

var filtered = source.FilterBox(6.238002777099609f, 49.72076145492323f, 
    6.272850036621093f, 49.69928180928878f); // left, top, right, bottom

using (var stream = new FileInfo(@"/path/to/filterede.osm.pbf").Open(FileMode.Create, FileAccess.ReadWrite))
   var target = new PBFOsmStreamTarget(stream);


The OsmSharp project is licensed under the MIT license.

This project includes some code from SharpZipLib, also MIT licensed.

*Note that all licence references and agreements mentioned in the OsmSharp README section above are relevant to that project's source code only.