public void TestWriteWithBounds() { var source = new OsmGeo[] { new Node() { Id = 1, Latitude = 1.0f, Longitude = 1.1f }, new Node() { Id = 2, Latitude = 2.0f, Longitude = 2.1f }, new Node() { Id = 3, Latitude = 3.0f, Longitude = 3.1f }, new Way() { Id = 1, Nodes = new long[] { 1, 2, 3 } }, new Relation() { Id = 1, Members = new RelationMember[] { new RelationMember(1, string.Empty, OsmGeoType.Node) } } }; using (var memoryStream = new MemoryStream()) { var target = new XmlOsmStreamTarget(memoryStream); target.ExtraRootAttributes.Add(new Tuple <string, string>("upload", "never")); target.Bounds = new API.Bounds() { MinLatitude = 1.0f, MaxLatitude = 3.0f, MinLongitude = 1.1f, MaxLongitude = 3.1f }; target.RegisterSource(source); target.Pull(); memoryStream.Seek(0, SeekOrigin.Begin); var result = (new StreamReader(memoryStream)).ReadToEnd(); Assert.AreEqual("<?xml version=\"1.0\" encoding=\"UTF-8\"?><osm version=\"0.6\" generator=\"OsmSharp\" upload=\"never\"><bounds minlat=\"1\" minlon=\"1.1\" maxlat=\"3\" maxlon=\"3.1\" /><node id=\"1\" lat=\"1\" lon=\"1.10000002384186\" /><node id=\"2\" lat=\"2\" lon=\"2.09999990463257\" /><node id=\"3\" lat=\"3\" lon=\"3.09999990463257\" /><way id=\"1\"><nd ref=\"1\" /><nd ref=\"2\" /><nd ref=\"3\" /></way><relation id=\"1\"><member type=\"node\" ref=\"1\" role=\"\" /></relation></osm>", result); } }
public void WriteOsmTo(string path) { using (var outStream = File.OpenWrite(path)) { var outstream = new XmlOsmStreamTarget(outStream); foreach (var m in modifiedComplete) { switch (m) { case CompleteWay w: foreach (var n in w.Nodes) { outstream.AddNode(n); } outstream.AddWay((Way)w.ToSimple()); break; case Node n: modified.Add(n); break; case CompleteRelation r: throw new Exception($"Unknown type: {r}"); } } } }
/// <summary> /// Bootstraps this service. /// </summary> public static void Start(string dataPath) { Bootstrapper.DataPath = dataPath; Bootstrapper.GetData = (stream, box, file) => { var fullFilePath = Path.Combine(dataPath, file); if (!File.Exists(fullFilePath)) { throw new FileNotFoundException(); } using (var inputStream = File.Open(fullFilePath, FileMode.Open, FileAccess.Read, FileShare.Read)) { OsmStreamSource source; if (fullFilePath.EndsWith("osm")) { source = new XmlOsmStreamSource(inputStream); } else if (fullFilePath.EndsWith("osm.pbf")) { source = new PBFOsmStreamSource(inputStream); } else { throw new NotSupportedException("File need to be an OSM-XML or OSM-PBF file."); } var filtered = source.FilterBox(box.Left, box.Top, box.Right, box.Bottom, true); var target = new XmlOsmStreamTarget(stream); target.RegisterSource(filtered); target.Pull(); } }; }
/// <summary> /// Stores an osmGeo object to disk. /// </summary> /// <param name="osmGeo"></param> private void Store(OsmGeo osmGeo) { XmlOsmStreamTarget target = new XmlOsmStreamTarget(this.StoreFileName(osmGeo)); target.RegisterSource(new OsmGeo[] { osmGeo }.ToOsmStreamSource()); target.Pull(); target.Flush(); }
/// <summary> /// Stores an osmGeo object to disk. /// </summary> /// <param name="osmGeo"></param> private void Store(OsmGeo osmGeo) { using (var targetFile = new FileInfo(this.StoreFileName(osmGeo)).OpenWrite()) { var target = new XmlOsmStreamTarget(targetFile); target.RegisterSource(new OsmGeo[] { osmGeo }.ToOsmStreamSource()); target.Pull(); target.Flush(); } }
static void Main(string[] args) { using (var sourceStream = File.OpenRead(args[0])) using (var targetStream = File.Open(args[1], FileMode.Create)) { var sourceBinary = new BinaryOsmStreamSource(sourceStream); var targetXml = new XmlOsmStreamTarget(targetStream); targetXml.RegisterSource(sourceBinary); targetXml.Pull(); } }
public void TestWrite() { var source = new OsmGeo[] { new Node() { Id = 1, Latitude = 1.0f, Longitude = 1.1f }, new Node() { Id = 2, Latitude = 2.0f, Longitude = 2.1f }, new Node() { Id = 3, Latitude = 3.0f, Longitude = 3.1f }, new Way() { Id = 1, Nodes = new long[] { 1, 2, 3 } }, new Relation() { Id = 1, Members = new RelationMember[] { new RelationMember(1, string.Empty, OsmGeoType.Node) } } }; using (var memoryStream = new MemoryStream()) { var target = new XmlOsmStreamTarget(memoryStream); target.RegisterSource(source); target.Pull(); memoryStream.Seek(0, SeekOrigin.Begin); var result = (new StreamReader(memoryStream)).ReadToEnd(); Assert.AreEqual("<?xml version=\"1.0\" encoding=\"UTF-8\"?><osm version=\"0.6\" generator=\"OsmSharp\"><node id=\"1\" lat=\"1\" lon=\"1.1\" /><node id=\"2\" lat=\"2\" lon=\"2.1\" /><node id=\"3\" lat=\"3\" lon=\"3.1\" /><way id=\"1\"><nd ref=\"1\" /><nd ref=\"2\" /><nd ref=\"3\" /></way><relation id=\"1\"><member type=\"node\" ref=\"1\" role=\"\" /></relation></osm>", result); } }
public IActionResult Get(int x, int y, int z, string file) { var completeFilePath = Path.Combine(Startup.DataFolder, file); var fileInfo = new FileInfo(completeFilePath); if (!fileInfo.Exists) { return(new NotFoundResult()); } var resultStream = new MemoryStream(); using (var stream = fileInfo.OpenRead()) { OsmStreamSource source; if (fileInfo.Name.EndsWith(".osm.pbf")) { source = new PBFOsmStreamSource(stream); } else if (fileInfo.Name.EndsWith(".osm")) { source = new XmlOsmStreamSource(stream); } else { return(new NotFoundResult()); } // parse the zoom, x and y. var tile = new Tile(x, y, z); tile = tile.InvertY(); var filter = source.FilterBox(tile.Left, tile.Top, tile.Right, tile.Bottom, true); var target = new XmlOsmStreamTarget(resultStream); target.ExtraRootAttributes.Add(new System.Tuple <string, string>("upload", "never")); target.Bounds = new OsmSharp.API.Bounds() { MaxLatitude = tile.Top, MaxLongitude = tile.Right, MinLatitude = tile.Bottom, MinLongitude = tile.Left }; target.RegisterSource(filter); target.Pull(); resultStream.Seek(0, SeekOrigin.Begin); } return(new FileStreamResult(resultStream, "text/xml")); }
static void ReadXmlStream() { string fileName = @"D:\username\Documents\Visual Studio 2017\Projects\OsmTilePrerenderer\OsmTilePrerenderer\Data\monaco-latest.osm.pbf"; using (System.IO.FileStream fileStream = System.IO.File.OpenRead(fileName)) { var target = new XmlOsmStreamTarget(fileStream); // var filtered = target.FilterSpatial(polygon, true); // target.RegisterSource(filtered); target.Pull(); } }
public void TestWriteRelation() { var source = new OsmGeo[] { new Relation() { Id = 1 } }; using (var memoryStream = new MemoryStream()) { var target = new XmlOsmStreamTarget(memoryStream); target.RegisterSource(source); target.Pull(); memoryStream.Seek(0, SeekOrigin.Begin); var result = (new StreamReader(memoryStream)).ReadToEnd(); Assert.AreEqual("<?xml version=\"1.0\" encoding=\"UTF-8\"?><osm version=\"0.6\" generator=\"OsmSharp\"><relation id=\"1\" /></osm>", result); } }
static void Main(string[] args) { Staging.ToFile("ftp://ftp.osmsharp.com/data/OSM/planet/europe/luxembourg-latest.osm.pbf", "luxembourg-latest.osm.pbf"); var polygon = Staging.LoadPolygon(); using (var fileStreamSource = File.OpenRead("luxembourg-latest.osm.pbf")) using (var fileStreamTarget = File.Open("polygon_complete.osm", FileMode.Create)) { // create source stream. var source = new PBFOsmStreamSource(fileStreamSource); // OPTION1: filter by keeping everything inside the given polygon. var filtered = source.FilterSpatial(polygon, true); // OPTION2: filter by bounding box. // var filtered = source.FilterBox(6.238002777099609f, 49.72076145492323f, 6.272850036621093f, 49.69928180928878f); // write to output xml var target = new XmlOsmStreamTarget(fileStreamTarget); target.RegisterSource(filtered); target.Pull(); } }