OsmSharp's core enables you to work directly with OSM-data in .NET/Mono. 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.
PM> Install-Package OsmSharp -IncludePrerelease
There's also a package to use NTS together with OsmSharp to convert OSM-data to features/geometries.
PM> Install-Package OsmSharp.Geo -IncludePrerelease
WARNING: All this documentation applies to v5! Install the prerelease version.
This readme contains some basic examples, for more documentation and samples check the wiki.
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 OsmSharp.Osm.PBF.Streams;
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 OsmSharp.Collections.Tags;
// using OsmSharp.Osm;
// using OsmSharp.Osm.PBF.Streams;
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:
// using OsmSharp.Math.Geo;
// using OsmSharp.Osm.PBF.Streams;
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
var target = new PBFOsmStreamTarget(
new FileInfo(@"/path/to/filterede.osm.pbf").Open(FileMode.Create, FileAccess.ReadWrite));
target.RegisterSource(filter);
target.Pull();
The OsmSharp project is licensed under the MIT license.