Пример #1
0
        public void PolygonConstructorAcceptsCollectionOfOSMWaysEvenIfTheyAreRevesed()
        {
            OSMDB db = new OSMDB();

            OSMNode p1 = new OSMNode(1, 10, 15);
            OSMNode p2 = new OSMNode(2, 0, 15);
            OSMNode p3 = new OSMNode(3, 0, 0);
            OSMNode p4 = new OSMNode(4, 10, 0);

            OSMWay way1 = new OSMWay(10);
            OSMWay way2 = new OSMWay(11);

            db.Nodes.Add(p1);
            db.Nodes.Add(p2);
            db.Nodes.Add(p3);
            db.Nodes.Add(p4);

            way1.Nodes.Add(p1.ID);
            way1.Nodes.Add(p2.ID);
            way1.Nodes.Add(p3.ID);

            way2.Nodes.Add(p1.ID);
            way2.Nodes.Add(p4.ID);
            way2.Nodes.Add(p3.ID);

            Polygon<OSMNode> target = new Polygon<OSMNode>();
            target.AddWays(new OSMWay[] { way1, way2 }, db);

            Assert.Equal(4, target.VerticesCount);
            CompareVerticesLists(new IPointGeo[] { p1, p2, p3, p4 }, target.Vertices);
        }
Пример #2
0
        public void ExtensionsPolygonAddWaysAcceptsCollectionOfOSMWays()
        {
            OSMDB db = new OSMDB();

            OSMNode p1 = new OSMNode(1, 10, 15);
            OSMNode p2 = new OSMNode(2, 0, 15);
            OSMNode p3 = new OSMNode(3, 0, 0);

            OSMWay way1 = new OSMWay(10);
            OSMWay way2 = new OSMWay(11);

            db.Nodes.Add(p1);
            db.Nodes.Add(p2);
            db.Nodes.Add(p3);

            way1.Nodes.Add(p1.ID);
            way1.Nodes.Add(p2.ID);
            way1.Nodes.Add(p3.ID);

            way2.Nodes.Add(p3.ID);
            way2.Nodes.Add(p1.ID);

            Polygon<OSMNode> target = new Polygon<OSMNode>();
            target.AddWays(new OSMWay[] {way1, way2}, db);

            Assert.Equal(3, target.VerticesCount);
            CompareVerticesLists(new IPointGeo[] { p3, p2, p1 }, target.Vertices);
        }
Пример #3
0
        public void OSMDatabaseNodesAcceptsAndReturnsNodes()
        {
            OSMDB target = new OSMDB();
            OSMNode node = new OSMNode(1254, 1.0, 2.0);

            target.Nodes.Add(node);

            Assert.Same(node, target.Nodes[node.ID]);
        }
Пример #4
0
        public void OSMNodeImplementsIPointGeo()
        {
            int id = 1374;
            IPointGeo target = new OSMNode(id, 12.9, 13.9);

            Assert.Equal(12.9, target.Latitude);
            Assert.Equal(13.9, target.Longitude);
            Assert.Equal(0, target.Elevation);
        }
        public void OSMObjectCollectionAddingDuplicateItemsThrowsException()
        {
            OSMObjectCollection<OSMNode> target = new OSMObjectCollection<OSMNode>();
            OSMNode node = new OSMNode(1254, 1.0, 2.0);
            OSMNode nodeDuplicate = new OSMNode(1254, 3.0, 4.0);

            target.Add(node);

            Assert.Throws<ArgumentException>(delegate { target.Add(nodeDuplicate); });
        }
        public void OSMObjectCollectionAddAddObjectIntoCollection()
        {
            OSMObjectCollection<OSMNode> target = new OSMObjectCollection<OSMNode>();
            OSMNode node = new OSMNode(1254, 1.0, 2.0);

            target.Add(node);

            //If the internal storage isn't initialized, an exception is thrown
            Assert.Equal(1, target.Count);
        }
Пример #7
0
        public void OSMNodeLongitudePropertyGetsAndReturnsCorrectValues()
        {
            int id = 1374;
            OSMNode target = new OSMNode(id, 0, 0);
            double expected = 12.9;

            target.Longitude = expected;

            Assert.Equal(expected, target.Longitude);
        }
Пример #8
0
        public void OSMNodeConstructorSetsAllProperties()
        {
            int id = 1374;
            double latitude = 23.4;
            double longitude = 12.9;

            OSMNode target = new OSMNode(id, latitude, longitude);

            Assert.Equal(id, target.ID);
            Assert.Equal(latitude, target.Latitude);
            Assert.Equal(longitude, target.Longitude);
        }
        public void OSMObjectCollectionImplementIEnumerable()
        {
            OSMObjectCollection<OSMNode> target = new OSMObjectCollection<OSMNode>();
            OSMNode node_1 = new OSMNode(1254, 1.0, 2.0);
            OSMNode node_2 = new OSMNode(1255, 3.0, 4.0);

            target.Add(node_1);
            target.Add(node_2);

            int counter = 0;
            foreach (OSMNode node in target) {
                counter++;
            }

            Assert.Equal(2, target.Count);
        }
Пример #10
0
        public static void SaveCandidateIncomingConnections(CandidatePoint candidate, string filename)
        {
            int counter = -1;
            OSMDB result = new OSMDB();

            OSMNode osmCandidate = new OSMNode(counter--, candidate.MapPoint.Latitude, candidate.MapPoint.Longitude);
            osmCandidate.Tags.Add(new OSMTag("observation", candidate.ObservationProbability.ToString()));
            osmCandidate.Tags.Add(new OSMTag("time", candidate.Layer.TrackPoint.Time.ToString()));
            result.Nodes.Add(osmCandidate);
            foreach (var connection in candidate.IncomingConnections) {
                OSMNode from = new OSMNode(counter--, connection.From.MapPoint.Latitude, connection.From.MapPoint.Longitude);
                from.Tags.Add(new OSMTag("observation", connection.From.ObservationProbability.ToString()));
                from.Tags.Add(new OSMTag("time", connection.From.Layer.TrackPoint.Time.ToString()));
                result.Nodes.Add(from);

                OSMWay osmConnection = new OSMWay(counter--, new int[] { from.ID, osmCandidate.ID });
                osmConnection.Tags.Add(new OSMTag("transmission", connection.TransmissionProbability.ToString()));

                result.Ways.Add(osmConnection);
            }

            result.Save(filename);
        }
Пример #11
0
        private void ReadNode()
        {
            string attId = _xmlReader.GetAttribute("id");
            if (attId == null)
                throw new XmlException("Attribute 'id' is missing.");
            int nodeId = int.Parse(attId, System.Globalization.CultureInfo.InvariantCulture);

            string attLat = _xmlReader.GetAttribute("lat");
            if (attLat == null)
                throw new XmlException("Attribute 'lat' is missing.");
            double nodeLat = double.Parse(attLat, System.Globalization.CultureInfo.InvariantCulture);

            string attLon = _xmlReader.GetAttribute("lon");
            if (attLon == null)
                throw new XmlException("Attribute 'lon'is missing.");
            double nodeLon = double.Parse(attLon, System.Globalization.CultureInfo.InvariantCulture);

            OSMNode node = new OSMNode(nodeId, nodeLat, nodeLon);

            if (_xmlReader.IsEmptyElement == false) {
                _xmlReader.Read();

                while (_xmlReader.NodeType != XmlNodeType.EndElement) {
                    if (_xmlReader.NodeType == XmlNodeType.Element && _xmlReader.Name == "tag") {
                        node.Tags.Add(ReadTag());
                    }
                    else {
                        _xmlReader.Skip();
                    }
                }

            }

            OnNodeRead(node);
            _xmlReader.Skip();
        }
Пример #12
0
 /// <summary>
 /// Raises the NodeRead event
 /// </summary>
 /// <param name="node">The OSMNode read from the database</param>
 protected void OnNodeRead(OSMNode node)
 {
     OSMNodeReadHandler temp = NodeRead;
     if (temp != null) {
         temp(node);
     }
 }
        public void OSMObjectCollectionIntIndexerReturnsCorrectObjectByID()
        {
            OSMObjectCollection<OSMNode> target = new OSMObjectCollection<OSMNode>();
            OSMNode toAdd = new OSMNode(1254, 1.0, 2.0);

            target.Add(toAdd);

            Assert.Same(toAdd, target[toAdd.ID]);
        }
        public void OSMObjectCollectionIntIndexerThrowsExceptionIfIDIsNotPresent()
        {
            OSMObjectCollection<OSMNode> target = new OSMObjectCollection<OSMNode>();
            OSMNode toAdd = new OSMNode(1254, 1.0, 2.0);

            target.Add(toAdd);

            Assert.Throws<ArgumentException>(delegate { OSMNode result = target[1255]; });
        }
        public void OSMObjectCollectionRemoveCanRemoveObjectFromCollection()
        {
            OSMObjectCollection<OSMNode> target = new OSMObjectCollection<OSMNode>();
            OSMNode node = new OSMNode(1254, 1.0, 2.0);

            target.Add(node);

            Assert.True(target.Remove(node));
            Assert.Equal(0, target.Count);
        }
Пример #16
0
 /// <summary>
 /// Callback function for OSMXmlDataReader, checks whether node is used and adds the used node into DB
 /// </summary>
 /// <param name="node">The node read form the OSM file</param>
 void NodeRead(OSMNode node)
 {
     if (_usedNodes.ContainsKey(node.ID)) {
         _storage.Nodes.Add(node);
     }
 }
        public void OSMXmlDataWriterWriteTags()
        {
            MemoryStream ms = new MemoryStream();

            using (OSMXmlDataWriter target = new OSMXmlDataWriter(ms)) {
                OSMNode node = new OSMNode(1254, 12.4, 15.9);
                node.Tags.Add(new OSMTag("name", "test"));

                target.WriteNode(node);
            }

            ms.Seek(0, 0);
            XElement osmRoot = XDocument.Load(new StreamReader(ms)).Root;
            XElement tagElement = osmRoot.Element("node").Element("tag");

            Assert.NotNull(tagElement);
            Assert.Equal("name", tagElement.Attribute("k").Value);
            Assert.Equal("test", tagElement.Attribute("v").Value);
        }
        public void OSMXmlDataWriterWriteNodeCanWriteNodeToOutput()
        {
            MemoryStream ms = new MemoryStream();

            using (OSMXmlDataWriter target = new OSMXmlDataWriter(ms)) {
                OSMNode node = new OSMNode(1254, 12.4, 15.9);
                target.WriteNode(node);
            }

            ms.Seek(0, 0);
            XElement osmRoot = XDocument.Load(new StreamReader(ms)).Root;
            XElement nodeElement = osmRoot.Element("node");

            Assert.NotNull(nodeElement);
            Assert.Equal(12.4, Double.Parse(nodeElement.Attribute("lat").Value, System.Globalization.NumberFormatInfo.InvariantInfo));
            Assert.Equal(15.9, Double.Parse(nodeElement.Attribute("lon").Value, System.Globalization.NumberFormatInfo.InvariantInfo));
        }
Пример #19
0
        /// <summary>
        /// Writes the specific OSMNode to the output
        /// </summary>
        /// <param name="node">The OSMNode to be written.</param>
        public void WriteNode(OSMNode node)
        {
            _xmlWriter.WriteStartElement("node");

            WriteOSMObjectAttributes(node);

            _xmlWriter.WriteAttributeString("lat", node.Latitude.ToString(System.Globalization.NumberFormatInfo.InvariantInfo));
            _xmlWriter.WriteAttributeString("lon", node.Longitude.ToString(System.Globalization.NumberFormatInfo.InvariantInfo));

            WriteOSMObjectTags(node);

            _xmlWriter.WriteEndElement();
        }
        public void OSMXmlDataWriterWriteOSMObjectAttributesWritesAllCommonAttributes()
        {
            MemoryStream ms = new MemoryStream();

            using (OSMXmlDataWriter target = new OSMXmlDataWriter(ms)) {
                OSMNode node = new OSMNode(1254, 12.4, 15.9);
                target.WriteNode(node);
            }

            ms.Seek(0, 0);
            XElement osmRoot = XDocument.Load(new StreamReader(ms)).Root;
            XElement nodeElement = osmRoot.Element("node");

            Assert.NotNull(nodeElement);
            Assert.Equal(1254, int.Parse(nodeElement.Attribute("id").Value, System.Globalization.NumberFormatInfo.InvariantInfo));
            Assert.Equal("true", nodeElement.Attribute("visible").Value);
        }
Пример #21
0
        public void PolygonConstructorThrowsExceptionIfInitializedWithSingleOpenWay()
        {
            OSMDB db = new OSMDB();

            OSMNode p1 = new OSMNode(1, 10, 15);
            OSMNode p2 = new OSMNode(2, 0, 15);
            OSMNode p3 = new OSMNode(3, 0, 0);

            OSMWay way1 = new OSMWay(10);

            db.Nodes.Add(p1);
            db.Nodes.Add(p2);
            db.Nodes.Add(p3);

            way1.Nodes.Add(p1.ID);
            way1.Nodes.Add(p2.ID);
            way1.Nodes.Add(p3.ID);

            Polygon<OSMNode> target = new Polygon<OSMNode>();
            Assert.Throws<ArgumentException>(delegate { target.AddWays(new OSMWay[] { way1 }, db); });
        }
 /// <summary>
 /// Saves the read OSMNode to the internal storage
 /// </summary>
 /// <param name="node">The OSMNode read</param>
 public void ProcessNode(OSMNode node)
 {
     _readNodes.Add(node);
 }
Пример #23
0
        public void PolygonConstructorThrowsExceptionIfWaysDontFormClosedPolygon()
        {
            OSMDB db = new OSMDB();

            OSMNode p1 = new OSMNode(1, 10, 15);
            OSMNode p2 = new OSMNode(2, 0, 15);
            OSMNode p3 = new OSMNode(3, 0, 0);
            OSMNode p4 = new OSMNode(4, 10, 0);

            OSMWay way1 = new OSMWay(10);
            OSMWay way2 = new OSMWay(11);

            db.Nodes.Add(p1);
            db.Nodes.Add(p2);
            db.Nodes.Add(p3);
            db.Nodes.Add(p4);

            way1.Nodes.Add(p1.ID);
            way1.Nodes.Add(p2.ID);
            way1.Nodes.Add(p3.ID);

            way2.Nodes.Add(p3.ID);
            way2.Nodes.Add(p4.ID);

            Polygon<OSMNode> target = new Polygon<OSMNode>();
            Assert.Throws<ArgumentException>(delegate { target.AddWays(new OSMWay[] { way1, way2 }, db); });
        }
Пример #24
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;
        }
        public void OSMObjectCollectionRemoveAllRemovesAllObjects()
        {
            OSMObjectCollection<OSMNode> target = new OSMObjectCollection<OSMNode>();
            OSMNode node_1 = new OSMNode(1254, 1.0, 2.0);
            OSMNode node_2 = new OSMNode(1255, 3.0, 4.0);

            target.Add(node_1);
            target.Add(node_2);

            target.RemoveAll();

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