コード例 #1
0
        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);
            }
        }
コード例 #2
0
ファイル: EasyChangeset.cs プロジェクト: pietervdvn/OsmBot
        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}");
                    }
                }
            }
        }
コード例 #3
0
        /// <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();
                }
            };
        }
コード例 #4
0
        /// <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();
        }
コード例 #5
0
 /// <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();
     }
 }
コード例 #6
0
 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();
         }
 }
コード例 #7
0
        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);
            }
        }
コード例 #8
0
        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"));
        }
コード例 #9
0
        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();
            }
        }
コード例 #10
0
        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);
            }
        }
コード例 #11
0
        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();
                }
        }