OsmSharp Core Save

The core functionality of OsmSharp.

Project README

OsmSharp

PrereleaseVisit 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.

Install

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

Usage

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)
  {
    Console.WriteLine(element.ToString());
  }
}

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.Initialize();
	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
		});
	target.Flush();
	target.Close();
}

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);
   target.RegisterSource(filtered);
   target.Pull();
}

Licensing

The OsmSharp project is licensed under the MIT license.

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

Open Source Agenda is not affiliated with "OsmSharp Core" Project. README Source: OsmSharp/core
Stars
307
Open Issues
24
Last Commit
1 year ago
Repository

Open Source Agenda Badge

Open Source Agenda Rating