OsmSharp uses a streaming model to handle OSM-data. The OSM-database is growing every day and an architecture that can handle larges amounts of data is no luxury.
The basic types that are used in the streaming model are:
- OsmStreamSource: Abstract representation of a source of an OSM data stream. There are several implementations available, the most important ones being:
- XmlOsmStreamSource: Reads OSM-XML files.
- PBFOsmStreamSource: Reads OSM-PBF files.
- OsmStreamFilter: Abstract representation of a filter, also a source, that can be used to filter a stream. Implementations are OsmStreamFilterBoundingBox and OsmStreamFilterTags.
- OsmStreamTarget: Abstract representation of a target for an OSM data stream. There are several implementations available, the most important ones being:
- XmlOsmStreamTarget: Writes OSM-XML files.
- PBFOsmStreamTarget: Writes OSM-PBF files.
All sources and filters are also IEnumerable
using (var fileStream = File.OpenRead("path/to/file.osm.pbf"))
// create source stream.
var source = new PBFOsmStreamSource(fileStream);
// filter all powerlines and keep all nodes.
var filtered = from osmGeo in source
where osmGeo.Type == OsmSharp.OsmGeoType.Node ||
(osmGeo.Type == OsmSharp.OsmGeoType.Way && osmGeo.Tags != null && osmGeo.Tags.Contains("power", "line"))
// convert to complete stream.
// WARNING: nodes that are partof powerlines will be kept in-memory.
// it's important to filter only the objects you need **before**
// you convert to a complete stream otherwise all objects will
// be kept in-memory.
var complete = filtered.ToComplete();