コード例 #1
0
ファイル: OsmStreamExtensions.cs プロジェクト: OsmSharp/core
        /// <summary>
        /// Merges all the given sources.
        /// </summary>
        /// <param name="sources">The sources.</param>
        /// <param name="resolutionType">The resolution type.</param>
        /// <returns>A merged stream.</returns>
        public static OsmStreamSource Merge(this IEnumerable <IEnumerable <OsmGeo> > sources,
                                            ConflictResolutionType resolutionType = ConflictResolutionType.FirstStream)
        {
            OsmStreamSource previous = null;

            foreach (var source in sources)
            {
                var osmSource = new OsmEnumerableStreamSource(source);

                if (previous == null)
                {
                    previous = osmSource;
                }
                else
                {
                    var next = new OsmStreamFilterMerge(resolutionType);
                    next.RegisterSource(previous);
                    next.RegisterSource(osmSource);

                    previous = next;
                }
            }

            return(previous);
        }
コード例 #2
0
        public void TestMergeWays()
        {
            var stream1 = new OsmGeo[]
            {
                new Way()
                {
                    Id = 1
                }
            };
            var stream2 = new OsmGeo[]
            {
                new Way()
                {
                    Id = 2
                }
            };

            var merge = new OsmStreamFilterMerge();

            merge.RegisterSource(stream1);
            merge.RegisterSource(stream2);

            var result = new List <OsmGeo>(merge);

            Assert.AreEqual(2, result.Count);
            Assert.AreEqual(1, result[0].Id);
            Assert.AreEqual(2, result[1].Id);
        }
コード例 #3
0
        public void TestMergeOneEmpty()
        {
            var stream1 = new OsmGeo[0];
            var stream2 = new OsmGeo[]
            {
                new Node()
                {
                    Id = 1
                },
                new Way()
                {
                    Id = 1
                },
                new Relation()
                {
                    Id = 1
                }
            };

            var merge = new OsmStreamFilterMerge();

            merge.RegisterSource(stream1);
            merge.RegisterSource(stream2);

            var result = new List <OsmGeo>(merge);

            Assert.AreEqual(3, result.Count);
            Assert.AreEqual(1, result[0].Id);
            Assert.AreEqual(OsmGeoType.Node, result[0].Type);
            Assert.AreEqual(1, result[1].Id);
            Assert.AreEqual(OsmGeoType.Way, result[1].Type);
            Assert.AreEqual(1, result[2].Id);
            Assert.AreEqual(OsmGeoType.Relation, result[2].Type);
        }
コード例 #4
0
        public void TestMergeNotSorted()
        {
            var stream1 = new OsmGeo[]
            {
                new Node()
                {
                    Id = 1
                }
            };
            var stream2 = new OsmGeo[]
            {
                new Node()
                {
                    Id = 4
                },
                new Node()
                {
                    Id = 2
                }
            };

            var merge = new OsmStreamFilterMerge();

            merge.RegisterSource(stream1);
            merge.RegisterSource(stream2);

            Assert.Catch <Streams.Exceptions.StreamNotSortedException>(() =>
            {
                merge.ToList();
            });
        }
コード例 #5
0
ファイル: OsmStreamExtensions.cs プロジェクト: OsmSharp/core
        /// <summary>
        /// Merges a stream with the given other stream.
        /// </summary>
        public static OsmStreamSource Merge(this IEnumerable <OsmGeo> source, ConflictResolutionType resolutionType, OsmStreamSource other)
        {
            var merged = new OsmStreamFilterMerge(resolutionType);

            merged.RegisterSource(source);
            merged.RegisterSource(other);
            return(merged);
        }
コード例 #6
0
        /// <summary>
        /// Merges the given sources into this source.
        /// </summary>
        public static OsmStreamSource Merge(this IEnumerable <OsmGeo> source, ConflictResolutionType resolutionType, params IEnumerable <OsmGeo>[] sources)
        {
            var merge = new OsmStreamFilterMerge(resolutionType);

            for (var i = 0; i < sources.Length; i++)
            {
                merge.RegisterSource(sources[i]);
            }
            return(merge);
        }
コード例 #7
0
ファイル: OsmStreamExtensions.cs プロジェクト: OsmSharp/core
        /// <summary>
        /// Merges the given sources into this source.
        /// </summary>
        public static OsmStreamSource Merge(this IEnumerable <OsmGeo> source, ConflictResolutionType resolutionType, params OsmStreamSource[] sources)
        {
            if (sources.Length == 0)
            {
                return(new OsmEnumerableStreamSource(source));
            }

            var merged = new OsmStreamFilterMerge(resolutionType);

            merged.RegisterSource(source);
            merged.RegisterSource(sources[0]);
            for (var s = 1; s < sources.Length; s++)
            {
                var next = new OsmStreamFilterMerge(resolutionType);
                next.RegisterSource(merged);
                next.RegisterSource(sources[s]);

                merged = next;
            }

            return(merged);
        }
コード例 #8
0
        public void TestMergeConflict()
        {
            var stream1 = new OsmGeo[]
            {
                new Node()
                {
                    Id      = 1,
                    Version = 1
                },
                new Way()
                {
                    Id      = 1,
                    Version = 1
                },
                new Relation()
                {
                    Id      = 1,
                    Version = 1
                }
            };
            var stream2 = new OsmGeo[]
            {
                new Node()
                {
                    Id = 1
                },
                new Node()
                {
                    Id = 2
                },
                new Way()
                {
                    Id = 1
                },
                new Way()
                {
                    Id = 2
                },
                new Relation()
                {
                    Id = 1
                },
                new Relation()
                {
                    Id = 2
                }
            };

            var merge = new OsmStreamFilterMerge();

            merge.RegisterSource(stream1);
            merge.RegisterSource(stream2);

            var result = new List <OsmGeo>(merge);

            Assert.AreEqual(6, result.Count);

            Assert.AreEqual(1, result[0].Id);
            Assert.AreEqual(1, result[0].Version);
            Assert.AreEqual(OsmGeoType.Node, result[0].Type);
            Assert.AreEqual(2, result[1].Id);
            Assert.AreEqual(OsmGeoType.Node, result[1].Type);

            Assert.AreEqual(1, result[2].Id);
            Assert.AreEqual(1, result[2].Version);
            Assert.AreEqual(OsmGeoType.Way, result[2].Type);
            Assert.AreEqual(2, result[3].Id);
            Assert.AreEqual(OsmGeoType.Way, result[3].Type);

            Assert.AreEqual(1, result[4].Id);
            Assert.AreEqual(1, result[4].Version);
            Assert.AreEqual(OsmGeoType.Relation, result[4].Type);
            Assert.AreEqual(2, result[5].Id);
            Assert.AreEqual(OsmGeoType.Relation, result[5].Type);
        }