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); }
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); }
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]); }
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); }
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); }
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); }
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); }
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(); }
/// <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); }
/// <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)); }
/// <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); }
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); }
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); }); }
/// <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); }