示例#1
0
        public void OSMTagConstructorSetsKeyAndValue()
        {
            string key = "test-key";
            string value = "test-value";

            OSMTag target = new OSMTag(key, value);

            Assert.Equal(key, target.Key);
            Assert.Equal(value, target.Value);
        }
        public void OSMTagsCollectionAddAddsOSMTag()
        {
            OSMTagsCollection target = new OSMTagsCollection();
            OSMTag toAdd = new OSMTag("test-key", "test-value");

            Assert.Equal(0, target.Count);

            target.Add(toAdd);
            Assert.Equal(1, target.Count);
        }
        public void OSMTagsCollectionAddThrowsExceprionIfTagWithTheSameKeyIsAlreadyPresent()
        {
            OSMTagsCollection target = new OSMTagsCollection();
            string key = "test-key";
            OSMTag toAdd = new OSMTag(key, "test-value");
            target.Add(toAdd);

            OSMTag anotherTag = new OSMTag(key, "some-value");

            Assert.Throws<ArgumentException>(delegate { target.Add(anotherTag); });
        }
示例#4
0
        public void OSMTagEqualsComparesKeyAndValue()
        {
            OSMTag target = new OSMTag("test-key", "test-value");
            OSMTag equalsTarget = new OSMTag("test-key", "test-value");

            Assert.True(target.Equals(equalsTarget));

            OSMTag differentKeyTarget = new OSMTag("different-key", "test-value");
            Assert.False(target.Equals(differentKeyTarget));

            OSMTag differentValueTarget = new OSMTag("test-key", "different-value");
            Assert.False(target.Equals(differentValueTarget));
        }
示例#5
0
        /// <summary>
        /// Compares the current OSMTag object with the specified object for equivalence.
        /// </summary>
        /// <param name="obj">The object to test for equivalence with the current OSMTag object.</param>
        /// <returns>true if the objects are equal, otherwise returns false.</returns>
        public override bool Equals(object obj)
        {
            if (obj == null)
            {
                return(false);
            }

            if (obj is OSMTag)
            {
                OSMTag other = (OSMTag)obj;

                return(_key.Equals(other._key) && _value.Equals(other._value));
            }
            else
            {
                return(base.Equals(obj));
            }
        }
示例#6
0
        /// <summary>
        /// Splits ways at road crossings, check for oneway roads and save results in OSMDB
        /// </summary>
        /// <returns>OSMDB object with road segments and used nodes</returns>
        public OSMDB BuildRoutableOSM()
        {
            OSMDB result = new OSMDB();
            int counter = -1;

            foreach (OSMRoad route in _storage.Ways) {
                OSMWay segment = new OSMWay(counter--);
                OSMTag wayIDTag = new OSMTag("way-id", route.ID.ToString());
                OSMTag speedTag = new OSMTag("speed", route.Speed.ToString());

                string wayAccessibility = route.IsAccessible() ? "yes" : "no";
                OSMTag wayAccessibilityTag = new OSMTag("accessible", wayAccessibility);

                string wayAccessibilityReverse = route.IsAccessibleReverse() ? "yes" : "no";
                OSMTag wayAccessibilityReverseTag = new OSMTag("accessible-reverse", wayAccessibilityReverse);

                for (int i = 0; i < route.Nodes.Count; i++) {
                    segment.Nodes.Add(route.Nodes[i]);

                    if ((UsedNodes[route.Nodes[i]].Count > 1) && (i > 0) && (i < (route.Nodes.Count - 1))) {
                        segment.Tags.Add(wayIDTag);
                        segment.Tags.Add(speedTag);
                        segment.Tags.Add(wayAccessibilityTag);
                        segment.Tags.Add(wayAccessibilityReverseTag);

                        result.Ways.Add(segment);

                        segment = new OSMWay(counter--);
                        segment.Nodes.Add(route.Nodes[i]);
                    }
                }

                segment.Tags.Add(wayIDTag);
                segment.Tags.Add(speedTag);
                segment.Tags.Add(wayAccessibilityTag);
                segment.Tags.Add(wayAccessibilityReverseTag);
                result.Ways.Add(segment);
            }

            foreach (OSMNode node in _storage.Nodes) {
                OSMNode newNode = new OSMNode(node.ID, node.Latitude, node.Longitude);

                // preserve junction and highway tags on nodes
                if (node.Tags.ContainsTag("junction")) {
                    newNode.Tags.Add(node.Tags["junction"]);
                }
                if (node.Tags.ContainsTag("highway")) {
                    newNode.Tags.Add(node.Tags["highway"]);
                }

                if (_usedNodes[node.ID].Count > 1) {
                    newNode.Tags.Add(new OSMTag("crossroad", "yes"));
                }

                result.Nodes.Add(newNode);
            }

            return result;
        }
示例#7
0
        public void OSMTagGetHashCodeComputeHashFromKeyAndValue()
        {
            string key = "test-key";
            string value = "test-value";
            int expectedHashCode = unchecked( key.GetHashCode()*83 + value.GetHashCode() );

            OSMTag target = new OSMTag(key, value);

            Assert.Equal(expectedHashCode, target.GetHashCode());
        }
示例#8
0
        public void OSMTagToStringReturnsCorrectStringRepresentationOfTheObject()
        {
            string key = "test-key";
            string value = "test-value";
            string stringRepresentation = "test-key = test-value";

            OSMTag target = new OSMTag(key, value);

            Assert.Equal(stringRepresentation, target.ToString());
        }
        public void OSMTagsCollectionImplementsIEnumerable()
        {
            OSMTagsCollection target = new OSMTagsCollection();
            OSMTag first = new OSMTag("test-key", "test-value");
            OSMTag second = new OSMTag("test-key-2", "another-test-value");
            target.Add(first);
            target.Add(second);

            int counter = 0;
            foreach (var tag in target) {
                counter++;
            }

            Assert.Equal(2, counter);
        }
        public void OSMTagsCollectionHasTagReturnsCorrectValues()
        {
            OSMTagsCollection target = new OSMTagsCollection();
            string key = "test-key";
            OSMTag toAdd = new OSMTag(key, "test-value");
            target.Add(toAdd);

            Assert.True(target.ContainsTag(key));
            Assert.False(target.ContainsTag("another-key"));
        }
        public void OSMTagsCollectionStringIndexerThrowsExceptionIfKeyIsNotPresent()
        {
            OSMTagsCollection target = new OSMTagsCollection();
            OSMTag toAdd = new OSMTag("test-key", "test-value");
            target.Add(toAdd);

            Assert.Throws<ArgumentException>(delegate { OSMTag tag = target["another-key"]; });
        }
        public void OSMTagsCollectionStringIndexerReturnsCorrectOSMTagByKey()
        {
            OSMTagsCollection target = new OSMTagsCollection();
            string key = "test-key";
            OSMTag toAdd = new OSMTag(key, "test-value");
            target.Add(toAdd);

            Assert.Same(toAdd, target[key]);
        }
        public void OSMTagsCollectionRemoveReturnsFalseWhenRemovingItemFromEmptyCollection()
        {
            OSMTagsCollection target = new OSMTagsCollection();
            OSMTag tag = new OSMTag("test-key", "test-value");

            Assert.False(target.Remove(tag));
        }
        public void OSMTagsCollectionRemoveCanRemoveTagFromCollection()
        {
            OSMTagsCollection target = new OSMTagsCollection();
            OSMTag tag = new OSMTag("test-key", "test-value");

            target.Add(tag);

            Assert.True(target.Remove(tag));
            Assert.Equal(0, target.Count);
        }
        public void OSMTagsCollectionRemoveAllRemovesAllTagsFromTheCollection()
        {
            OSMTagsCollection target = new OSMTagsCollection();
            OSMTag first = new OSMTag("test-key", "test-value");
            OSMTag second = new OSMTag("test-key-2", "another-test-value");
            target.Add(first);
            target.Add(second);

            target.RemoveAll();

            Assert.Equal(0, target.Count);
        }