public void TestAddNode() { Node testNode =new Node(); testNode.Id = -1; testNode.Latitude = 0; testNode.Longitude = 0; var source = new MemoryDataSource(); source.AddNode(testNode); // test if the node is actually there. Assert.AreEqual(testNode, source.GetNode(-1)); // test if the node was not remove after getting it. Assert.AreEqual(testNode, source.GetNodes(new List<long>() { -1 })[0]); // test if the node is in the list of nodes. Assert.AreEqual(testNode, new List<Node>(source.GetNodes())[0]); // test if the node will be retrieved using a list of ids. var ids = new List<long>(); ids.Add(-1); IList<Node> nodes = source.GetNodes(ids); Assert.IsNotNull(nodes); Assert.AreEqual(1, nodes.Count); Assert.AreEqual(testNode, nodes[0]); }
/// <summary> /// /// </summary> /// <param name="node"></param> public override void AddNode(Node node) { if (node == null) throw new ArgumentNullException("node"); if (node.Id == null) throw new Exception("node.Id is null"); this.Store(node); }
/// <summary> /// Creates a new node. /// </summary> /// <param name="id"></param> /// <param name="latitude"></param> /// <param name="longitude"></param> /// <returns></returns> public static Node Create(long id, double latitude, double longitude) { Node node = new Node(); node.Id = id; node.Latitude = latitude; node.Longitude = longitude; return node; }
public override void AddNode(Node node) { if (!node.Id.HasValue) return; MaxStringLength(node.UserName, ref NodeUsr); if (node.Tags == null) return; foreach (Tag tag in node.Tags) { MaxStringLength(tag.Key, ref NodeTagsKey); MaxStringLength(tag.Value, ref NodeTagsValue); } }
public void TestWayAreaIsYesArea() { var node1 = new Node(); node1.Id = 1; node1.Latitude = 0; node1.Longitude = 0; var node2 = new Node(); node2.Id = 2; node2.Latitude = 1; node2.Longitude = 0; var node3 = new Node(); node3.Id = 3; node3.Latitude = 0; node3.Longitude = 1; var way = new Way(); way.Id = 1; way.Nodes = new List<long>(); way.Nodes.Add(1); way.Nodes.Add(2); way.Nodes.Add(3); way.Nodes.Add(1); way.Tags = new TagsCollection(); way.Tags.Add("area", "yes"); var source = new List<OsmGeo>(); source.Add(node1); source.Add(node2); source.Add(node3); source.Add(way); // create source stream. var sourceStream = new OsmSharp.Osm.Streams.Complete.OsmSimpleCompleteStreamSource(source.ToOsmStreamSource()); // create features source. var featuresSourceStream = new OsmFeatureStreamSource(sourceStream); // pull stream. var features = new List<Feature>(featuresSourceStream); Assert.IsNotNull(features); Assert.AreEqual(1, features.Count); var feature = features[0]; Assert.IsInstanceOf<LineairRing>(feature.Geometry); Assert.IsTrue(feature.Attributes.ContainsKeyValue("area", "yes")); }
/// <summary> /// Compares the two complete objects. /// </summary> public static void CompareComplete(Node expected, Node actual) { if (expected == null) { // ok, if the value is also null. Assert.IsNull(actual); } else { // check and compare the value. Assert.IsNotNull(actual); Assert.AreEqual(expected.Id, actual.Id); Assert.AreEqual(expected.ChangeSetId, actual.ChangeSetId); Assert.AreEqual(expected.Coordinate, actual.Coordinate); Assert.AreEqual(expected.TimeStamp, actual.TimeStamp); Assert.AreEqual(expected.UserName, actual.UserName); Assert.AreEqual(expected.UserId, actual.UserId); Assert.AreEqual(expected.Version, actual.Version); Assert.AreEqual(expected.Visible, actual.Visible); } }
public void TestEmptyCSS() { // create 'test' objects. Node node1 = new Node(); node1.Id = 1; node1.Latitude = 1; node1.Longitude = 1; Node node2 = new Node(); node2.Id = 2; node2.Latitude = 2; node2.Longitude = 2; Way way = new Way(); way.Id = 1; way.Nodes = new List<long>(); way.Nodes.Add(1); way.Nodes.Add(2); // create the datasource. MemoryDataSource dataSource = new MemoryDataSource(); dataSource.AddNode(node1); dataSource.AddNode(node2); dataSource.AddWay(way); // create the projection and scene objects. var mercator = new WebMercator(); Scene2D scene = new Scene2D(new OsmSharp.Math.Geo.Projections.WebMercator(), 16); // create the interpreter. MapCSSInterpreter interpreter = new MapCSSInterpreter(string.Empty, new MapCSSDictionaryImageSource()); interpreter.Translate(scene, mercator, dataSource, node1); interpreter.Translate(scene, mercator, dataSource, node2); interpreter.Translate(scene, mercator, dataSource, way); // test the scene contents. Assert.AreEqual(0, scene.Count); Assert.AreEqual(SimpleColor.FromKnownColor(KnownColor.Black).Value, scene.BackColor); }
public void TestWayAreaIsYes() { Node node1 = new Node(); node1.Id = 1; node1.Latitude = 0; node1.Longitude = 0; Node node2 = new Node(); node2.Id = 2; node2.Latitude = 1; node2.Longitude = 0; Node node3 = new Node(); node3.Id = 3; node3.Latitude = 0; node3.Longitude = 1; Way way = new Way(); way.Id = 1; way.Nodes = new List<long>(); way.Nodes.Add(1); way.Nodes.Add(2); way.Nodes.Add(3); way.Nodes.Add(1); way.Tags = new TagsCollection(); way.Tags.Add("area", "yes"); var source = new List<OsmGeo>(); source.Add(node1); source.Add(node2); source.Add(node3); source.Add(way); // the use of natural=water implies an area-type. var interpreter = new SimpleFeatureInterpreter(); var completeStreamSource = new OsmSimpleCompleteStreamSource(source.ToOsmStreamSource()); // use the stream to interpret. var features = new List<Feature>(new FeatureInterpreterStreamSource(completeStreamSource, interpreter)); Assert.AreEqual(1, features.Count); }
private OsmSharp.Osm.Node Convertv6XmlNode(node xml_node) { OsmSharp.Osm.Node node = new OsmSharp.Osm.Node(); node.Id = new long?(xml_node.id); node.Latitude = new double?(xml_node.lat); node.Longitude = new double?(xml_node.lon); if (xml_node.tag != null) { node.Tags = (TagsCollectionBase) new TagsCollection(); foreach (tag tag in xml_node.tag) { node.Tags.Add(tag.k, tag.v); } } node.ChangeSetId = new long?(xml_node.changeset); node.TimeStamp = new DateTime?(xml_node.timestamp); node.UserName = xml_node.user; node.UserId = new long?(xml_node.uid); node.Version = new ulong?(xml_node.version); node.Visible = new bool?(xml_node.visible); return(node); }
/// <summary> /// Adds a node. /// </summary> /// <param name="node"></param> private void AddNode(Node node) { if (_nodes.ContainsKey(node.Id)) { throw new InvalidOperationException("Cannot add an object that already exists in this source!" + Environment.NewLine + "If there is a modification use a changeset!"); } else { _nodes.Add(node.Id, node); } }
/// <summary> /// Returns the way(s) for the given node. /// </summary> /// <param name="node"></param> /// <returns></returns> public IList<Way> GetWaysFor(Node node) { if (_ways_per_node.ContainsKey(node.Id)) { return this.GetWays(_ways_per_node[node.Id]); } return null; }
/// <summary> /// Converts an Xml node to an Osm domain model node. /// </summary> /// <returns></returns> public static node ConvertTo(this OsmSharp.Osm.Node node) { var xmlNode = new node(); // set the changeset. if (node.ChangeSetId.HasValue) { xmlNode.changeset = node.ChangeSetId.Value; xmlNode.changesetSpecified = true; } // set the id. if (node.Id.HasValue) { xmlNode.id = node.Id.Value; xmlNode.idSpecified = true; } if (node.Tags != null) { xmlNode.tag = new tag[node.Tags.Count]; int idx = 0; foreach (var tag in node.Tags) { var t = new tag(); t.k = tag.Key; t.v = tag.Value; xmlNode.tag[idx] = t; idx++; } } // set the timestamp. if (node.TimeStamp.HasValue) { xmlNode.timestamp = node.TimeStamp.Value; xmlNode.timestampSpecified = true; } // set the user data. if (node.UserId.HasValue) { xmlNode.uid = node.UserId.Value; xmlNode.uidSpecified = true; } xmlNode.user = xmlNode.user; // set the version. if (node.Version.HasValue) { xmlNode.version = (ulong)node.Version.Value; xmlNode.versionSpecified = true; } // set the visible. if (node.Visible.HasValue) { xmlNode.visible = node.Visible.Value; xmlNode.visibleSpecified = true; } // set the node-specific properties. if (node.Latitude.HasValue) { xmlNode.lat = node.Latitude.Value; xmlNode.latSpecified = true; } if (node.Longitude.HasValue) { xmlNode.lon = node.Longitude.Value; xmlNode.lonSpecified = true; } return(xmlNode); }
public void APITestRelationCreateGet() { // intialize the connection. var apiInstance = new APIConnection("http://api06.dev.openstreetmap.org/", "osmsharp", "osmsharp"); // open a changeset. long changesetId = apiInstance.ChangeSetOpen("Simple Relation Creation Test"); // initialize the relation. var relation = new Relation(); relation.Tags = new TagsCollection(); relation.Tags.Add("type", "testrelation"); relation.Members = new List<RelationMember>(); relation.Visible = true; // initialize the nodes. var node = new Node(); node.Latitude = -0.494497; node.Longitude = -24.119325; node.Tags = new TagsCollection(); node.Tags.Add("type", "testnode1"); node.Visible = true; node = apiInstance.NodeCreate(node); relation.Members.Add(new RelationMember() { MemberId = node.Id.Value, MemberRole = "some_nodes_role", MemberType = OsmGeoType.Node }); node = new Node(); node.Latitude = -0.494497 + 0.0001f; node.Longitude = -24.119325 + 0.0001f; node.Tags = new TagsCollection(); node.Tags.Add("type", "testnode2"); node.Visible = true; node = apiInstance.NodeCreate(node); relation.Members.Add(new RelationMember() { MemberId = node.Id.Value, MemberRole = "some_nodes_role", MemberType = OsmGeoType.Node }); // save the relation. relation = apiInstance.RelationCreate(relation); // close the changeset. apiInstance.ChangeSetClose(); // check if the id now has a value. Assert.IsTrue(relation.Id.HasValue); // get the new relation id. long relationId = relation.Id.Value; // get the relation from the api. Relation relationAPI = apiInstance.RelationGet(relation.Id.Value); Assert.AreEqual(relationId, relationAPI.Id.Value); Assert.AreEqual(relation.Tags.Count, relationAPI.Tags.Count); Assert.AreEqual(relation.Visible, relationAPI.Visible); Assert.IsTrue(relationAPI.ChangeSetId.HasValue); Assert.AreEqual(changesetId, relationAPI.ChangeSetId.Value); Assert.AreEqual(relation.Members[0].MemberId, relationAPI.Members[0].MemberId); Assert.AreEqual(relation.Members[0].MemberRole, relationAPI.Members[0].MemberRole); Assert.AreEqual(relation.Members[0].MemberType, relationAPI.Members[0].MemberType); Assert.AreEqual(relation.Members[1].MemberId, relationAPI.Members[1].MemberId); Assert.AreEqual(relation.Members[1].MemberRole, relationAPI.Members[1].MemberRole); Assert.AreEqual(relation.Members[1].MemberType, relationAPI.Members[1].MemberType); }
public void TestCanvasJOSMSettingsCSS() { // create CSS. string css = "canvas { " + "background-color: white; " + "default-points: true; " + // adds default points for every node (color: black, size: 2). "default-lines: true; " + // adds default lines for every way (color: red, width: 1). "} "; // create 'test' objects. Node node1 = new Node(); node1.Id = 1; node1.Latitude = 1; node1.Longitude = 1; Node node2 = new Node(); node2.Id = 2; node2.Latitude = 2; node2.Longitude = 2; Way way = new Way(); way.Id = 1; way.Nodes = new List<long>(); way.Nodes.Add(1); way.Nodes.Add(2); // create the datasource. MemoryDataSource dataSource = new MemoryDataSource(); dataSource.AddNode(node1); dataSource.AddNode(node2); dataSource.AddWay(way); // create the projection and scene objects. var mercator = new WebMercator(); Scene2D scene = new Scene2D(new OsmSharp.Math.Geo.Projections.WebMercator(), 16); // create the interpreter. MapCSSInterpreter interpreter = new MapCSSInterpreter(css, new MapCSSDictionaryImageSource()); interpreter.Translate(scene, mercator, dataSource, node1); interpreter.Translate(scene, mercator, dataSource, node2); interpreter.Translate(scene, mercator, dataSource, way); // test the scene contents. Assert.AreEqual(3, scene.Count); Assert.AreEqual(SimpleColor.FromKnownColor(KnownColor.White).Value, scene.BackColor); // test the scene point 1. Primitive2D primitive = scene.Get(0); Assert.IsNotNull(primitive); Assert.IsInstanceOf<Primitive2D>(primitive); Point2D pointObject = primitive as Point2D; Assert.AreEqual(2, pointObject.Size); Assert.AreEqual(SimpleColor.FromKnownColor(KnownColor.Black).Value, pointObject.Color); Assert.AreEqual(mercator.LongitudeToX(1), pointObject.X); Assert.AreEqual(mercator.LatitudeToY(1), pointObject.Y); // test the scene point 2. primitive = scene.Get(1); Assert.IsNotNull(primitive); Assert.IsInstanceOf<Point2D>(primitive); pointObject = primitive as Point2D; Assert.AreEqual(2, pointObject.Size); Assert.AreEqual(SimpleColor.FromKnownColor(KnownColor.Black).Value, pointObject.Color); Assert.AreEqual(mercator.LongitudeToX(2), pointObject.X); Assert.AreEqual(mercator.LatitudeToY(2), pointObject.Y); // test the scene line 2. primitive = scene.Get(2); Assert.IsNotNull(primitive); Assert.IsInstanceOf<Line2D>(primitive); Line2D line = primitive as Line2D; Assert.AreEqual(1, line.Width); Assert.AreEqual(SimpleColor.FromKnownColor(KnownColor.Red).Value, line.Color); Assert.IsNotNull(line.X); Assert.IsNotNull(line.Y); Assert.AreEqual(2, line.X.Length); Assert.AreEqual(2, line.Y.Length); Assert.AreEqual(mercator.LongitudeToX(1), line.X[0]); Assert.AreEqual(mercator.LatitudeToY(1), line.Y[0]); Assert.AreEqual(mercator.LongitudeToX(2), line.X[1]); Assert.AreEqual(mercator.LatitudeToY(2), line.Y[1]); }
/// <summary> /// Compares a found node to an expected node. /// </summary> /// <param name="expected"></param> /// <param name="found"></param> private void CompareNodes(Node expected, Node found) { Assert.IsNotNull(expected); Assert.IsNotNull(found); Assert.AreEqual(expected.Id, found.Id); Assert.AreEqual(expected.ChangeSetId, found.ChangeSetId); Assert.AreEqual((float)expected.Latitude, (float)found.Latitude); Assert.AreEqual((float)expected.Longitude, (float)found.Longitude); Assert.AreEqual(expected.TimeStamp, found.TimeStamp); Assert.AreEqual(expected.Type, found.Type); Assert.AreEqual(expected.UserId, found.UserId); Assert.AreEqual(expected.UserName, found.UserName); Assert.AreEqual(expected.Version, found.Version); Assert.AreEqual(expected.Visible, found.Visible); this.CompareTags(expected.Tags, found.Tags); }
public void TestWayNaturalIsWaterArea() { Node node1 = new Node(); node1.Id = 1; node1.Latitude = 0; node1.Longitude = 0; Node node2 = new Node(); node2.Id = 2; node2.Latitude = 1; node2.Longitude = 0; Node node3 = new Node(); node3.Id = 3; node3.Latitude = 0; node3.Longitude = 1; Way way = new Way(); way.Id = 1; way.Nodes = new List<long>(); way.Nodes.Add(1); way.Nodes.Add(2); way.Nodes.Add(3); way.Nodes.Add(1); way.Tags = new SimpleTagsCollection(); way.Tags.Add("natural", "water"); MemoryDataSource source = new MemoryDataSource(); source.AddNode(node1); source.AddNode(node2); source.AddNode(node3); source.AddWay(way); // the use of natural=water implies an area-type. GeometryInterpreter interpreter = new SimpleGeometryInterpreter(); GeometryCollection geometries = interpreter.Interpret(way, source); Assert.IsNotNull(geometries); Assert.AreEqual(1, geometries.Count); Geometry geometry = geometries[0]; Assert.IsInstanceOf<LineairRing>(geometry); Assert.IsTrue(geometry.Attributes.ContainsKeyValue("natural", "water")); }
public void APITestNodeCreateGetDelete() { // intialize the connection. var apiInstance = new APIConnection("http://api06.dev.openstreetmap.org/", "osmsharp", "osmsharp"); // open a changeset. apiInstance.ChangeSetOpen("Simple Node Creation Test"); // initialize the node. var node = new Node(); node.Latitude = -0.494497; node.Longitude = -24.119325; node.Tags = new TagsCollection(); node.Tags.Add("type", "testnode"); node.Visible = true; // save the node. node = apiInstance.NodeCreate(node); // close the changeset. apiInstance.ChangeSetClose(); // check if the id now has a value. Assert.IsTrue(node.Id.HasValue); // get the new node id. long nodeId = node.Id.Value; // get the node again: a node can only be deleted using the correct changesetid and version. node = apiInstance.NodeGet(node.Id.Value); // open new changeset. apiInstance.ChangeSetOpen("Simple Node Delete Test"); // get the node. apiInstance.NodeDelete(node); // close the current changeset. apiInstance.ChangeSetClose(); // get the node. Node apiNode = apiInstance.NodeGet(node.Id.Value); Assert.IsNull(apiNode); }
public void APITestWayCreateGetUpdate() { // intialize the connection. var apiInstance = new APIConnection("http://api06.dev.openstreetmap.org/", "osmsharp", "osmsharp"); // open a changeset. apiInstance.ChangeSetOpen("Simple Way Creation Test"); // initialize the way. var way = new Way(); way.Tags = new TagsCollection(); way.Tags.Add("type", "testway"); way.Nodes = new List<long>(); way.Visible = true; // initialize the nodes. var node = new Node(); node.Latitude = -0.494497; node.Longitude = -24.119325; node.Tags = new TagsCollection(); node.Tags.Add("type", "testnode1"); node.Visible = true; node = apiInstance.NodeCreate(node); way.Nodes.Add(node.Id.Value); node = new Node(); node.Latitude = -0.494497 + 0.0001f; node.Longitude = -24.119325 + 0.0001f; node.Tags = new TagsCollection(); node.Tags.Add("type", "testnode2"); node.Visible = true; node = apiInstance.NodeCreate(node); way.Nodes.Add(node.Id.Value); // save the way. way = apiInstance.WayCreate(way); // close the changeset. apiInstance.ChangeSetClose(); // check if the id now has a value. Assert.IsTrue(way.Id.HasValue); // get the new way id. long wayId = way.Id.Value; // open new changeset. apiInstance.ChangeSetOpen("Simple Way Update Test"); // get the way. Way apiWay = apiInstance.WayGet(way.Id.Value); apiWay.Tags.Add("another_tag", "test adding a tag!"); apiInstance.WayUpdate(apiWay); // close the current changeset. apiInstance.ChangeSetClose(); // get the api way. apiWay = apiInstance.WayGet(way.Id.Value); Assert.AreEqual(2, apiWay.Tags.Count); Assert.IsTrue(apiWay.Tags.ContainsKey("another_tag")); Assert.AreEqual("test adding a tag!", apiWay.Tags["another_tag"]); }
public void APITestWayCreateGetDelete() { // intialize the connection. var apiInstance = new APIConnection("http://api06.dev.openstreetmap.org/", "osmsharp", "osmsharp"); // open a changeset. apiInstance.ChangeSetOpen("Simple Way Creation Test"); // initialize the way. var way = new Way(); way.Tags = new TagsCollection(); way.Tags.Add("type", "testway"); way.Nodes = new List<long>(); way.Visible = true; // initialize the nodes. var node = new Node(); node.Latitude = -0.494497; node.Longitude = -24.119325; node.Tags = new TagsCollection(); node.Tags.Add("type", "testnode1"); node.Visible = true; node = apiInstance.NodeCreate(node); way.Nodes.Add(node.Id.Value); node = new Node(); node.Latitude = -0.494497 + 0.0001f; node.Longitude = -24.119325 + 0.0001f; node.Tags = new TagsCollection(); node.Tags.Add("type", "testnode2"); node.Visible = true; node = apiInstance.NodeCreate(node); way.Nodes.Add(node.Id.Value); // save the way. way = apiInstance.WayCreate(way); // close the changeset. apiInstance.ChangeSetClose(); // check if the id now has a value. Assert.IsTrue(way.Id.HasValue); // get the new way id. long wayId = way.Id.Value; // get the way again: a way can only be deleted using the correct changesetid and version. way = apiInstance.WayGet(way.Id.Value); // open new changeset. apiInstance.ChangeSetOpen("Simple Way Delete Test"); // get the way. apiInstance.WayDelete(way); // close the current changeset. apiInstance.ChangeSetClose(); // get the way. Way apiWay = apiInstance.WayGet(way.Id.Value); Assert.IsNull(apiWay); }
public void APITestWayCreateGet() { // intialize the connection. var apiInstance = new APIConnection("http://api06.dev.openstreetmap.org/", "osmsharp", "osmsharp"); // open a changeset. long changesetId = apiInstance.ChangeSetOpen("Simple Way Creation Test"); // initialize the way. var way = new Way(); way.Tags = new TagsCollection(); way.Tags.Add("type", "testway"); way.Nodes = new List<long>(); way.Visible = true; // initialize the nodes. var node = new Node(); node.Latitude = -0.494497; node.Longitude = -24.119325; node.Tags = new TagsCollection(); node.Tags.Add("type", "testnode1"); node.Visible = true; node = apiInstance.NodeCreate(node); way.Nodes.Add(node.Id.Value); node = new Node(); node.Latitude = -0.494497 + 0.0001f; node.Longitude = -24.119325 + 0.0001f; node.Tags = new TagsCollection(); node.Tags.Add("type", "testnode2"); node.Visible = true; node = apiInstance.NodeCreate(node); way.Nodes.Add(node.Id.Value); // save the way. way = apiInstance.WayCreate(way); // close the changeset. apiInstance.ChangeSetClose(); // check if the id now has a value. Assert.IsTrue(way.Id.HasValue); // get the new way id. long wayId = way.Id.Value; // get the way from the api. Way wayAPI = apiInstance.WayGet(way.Id.Value); Assert.AreEqual(wayId, wayAPI.Id.Value); Assert.AreEqual(way.Tags.Count, wayAPI.Tags.Count); Assert.AreEqual(way.Visible, wayAPI.Visible); Assert.IsTrue(wayAPI.ChangeSetId.HasValue); Assert.AreEqual(changesetId, wayAPI.ChangeSetId.Value); Assert.AreEqual(way.Nodes[0], wayAPI.Nodes[0]); Assert.AreEqual(way.Nodes[1], wayAPI.Nodes[1]); }
public void APITestRelationCreateGetUpdate() { // intialize the connection. var apiInstance = new APIConnection("http://api06.dev.openstreetmap.org/", "osmsharp", "osmsharp"); // open a changeset. apiInstance.ChangeSetOpen("Simple Relation Creation Test"); // initialize the relation. var relation = new Relation(); relation.Tags = new TagsCollection(); relation.Tags.Add("type", "testrelation"); relation.Members = new List<RelationMember>(); relation.Visible = true; // initialize the nodes. var node = new Node(); node.Latitude = -0.494497; node.Longitude = -24.119325; node.Tags = new TagsCollection(); node.Tags.Add("type", "testnode1"); node.Visible = true; node = apiInstance.NodeCreate(node); relation.Members.Add(new RelationMember() { MemberId = node.Id.Value, MemberRole = "some_nodes_role", MemberType = OsmGeoType.Node }); node = new Node(); node.Latitude = -0.494497 + 0.0001f; node.Longitude = -24.119325 + 0.0001f; node.Tags = new TagsCollection(); node.Tags.Add("type", "testnode2"); node.Visible = true; node = apiInstance.NodeCreate(node); relation.Members.Add(new RelationMember() { MemberId = node.Id.Value, MemberRole = "some_nodes_role", MemberType = OsmGeoType.Node }); // save the relation. relation = apiInstance.RelationCreate(relation); // close the changeset. apiInstance.ChangeSetClose(); // check if the id now has a value. Assert.IsTrue(relation.Id.HasValue); // get the new relation id. long relationId = relation.Id.Value; // open new changeset. apiInstance.ChangeSetOpen("Simple Relation Update Test"); // get the relation. Relation apiRelation = apiInstance.RelationGet(relation.Id.Value); apiRelation.Tags.Add("another_tag", "test adding a tag!"); apiInstance.RelationUpdate(apiRelation); // close the current changeset. apiInstance.ChangeSetClose(); // get the api relation. apiRelation = apiInstance.RelationGet(relation.Id.Value); Assert.AreEqual(2, apiRelation.Tags.Count); Assert.IsTrue(apiRelation.Tags.ContainsKey("another_tag")); Assert.AreEqual("test adding a tag!", apiRelation.Tags["another_tag"]); }
public void APITestRelationCreateGetDelete() { // intialize the connection. var apiInstance = new APIConnection("http://api06.dev.openstreetmap.org/", "osmsharp", "osmsharp"); // open a changeset. apiInstance.ChangeSetOpen("Simple Relation Creation Test"); // initialize the relation. var relation = new Relation(); relation.Tags = new TagsCollection(); relation.Tags.Add("type", "testrelation"); relation.Members = new List<RelationMember>(); relation.Visible = true; // initialize the nodes. var node = new Node(); node.Latitude = -0.494497; node.Longitude = -24.119325; node.Tags = new TagsCollection(); node.Tags.Add("type", "testnode1"); node.Visible = true; node = apiInstance.NodeCreate(node); relation.Members.Add(new RelationMember() { MemberId = node.Id.Value, MemberRole = "some_nodes_role", MemberType = OsmGeoType.Node }); node = new Node(); node.Latitude = -0.494497 + 0.0001f; node.Longitude = -24.119325 + 0.0001f; node.Tags = new TagsCollection(); node.Tags.Add("type", "testnode2"); node.Visible = true; node = apiInstance.NodeCreate(node); relation.Members.Add(new RelationMember() { MemberId = node.Id.Value, MemberRole = "some_nodes_role", MemberType = OsmGeoType.Node }); // save the relation. relation = apiInstance.RelationCreate(relation); // close the changeset. apiInstance.ChangeSetClose(); // check if the id now has a value. Assert.IsTrue(relation.Id.HasValue); // get the new relation id. long relationId = relation.Id.Value; // get the relation again: a relation can only be deleted using the correct changesetid and version. relation = apiInstance.RelationGet(relation.Id.Value); // open new changeset. apiInstance.ChangeSetOpen("Simple Relation Delete Test"); // get the relation. apiInstance.RelationDelete(relation); // close the current changeset. apiInstance.ChangeSetClose(); // get the relation. Relation apiRelation = apiInstance.RelationGet(relation.Id.Value); Assert.IsNull(apiRelation); }
/// <summary> /// Compares a found node to an expected node. /// </summary> public static void CompareSimple(Node expected, Node actual) { Assert.IsNotNull(expected); Assert.IsNotNull(actual); Assert.AreEqual(expected.Id, actual.Id); Assert.AreEqual(expected.ChangeSetId, actual.ChangeSetId); Assert.AreEqual((float)expected.Latitude, (float)actual.Latitude); Assert.AreEqual((float)expected.Longitude, (float)actual.Longitude); Assert.AreEqual(expected.TimeStamp, actual.TimeStamp); Assert.AreEqual(expected.Type, actual.Type); Assert.AreEqual(expected.UserId, actual.UserId); Assert.AreEqual(expected.UserName, actual.UserName); Assert.AreEqual(expected.Version, actual.Version); Assert.AreEqual(expected.Visible, actual.Visible); ComparisonHelpers.CompareTags(expected.Tags, actual.Tags); }
///// <summary> ///// Converts an domain model changeset to and Xml changeset. ///// </summary> ///// <param name="changeset"></param> ///// <returns></returns> //public static changeset ConvertTo(this ChangeSet changeset) //{ // throw new NotImplementedException(); //} ///// <summary> ///// Converts a domain model relation to an Xml relation. ///// </summary> ///// <param name="dom_obj"></param> ///// <returns></returns> //public static relation ConvertTo(this SimpleRelation dom_obj) //{ // relation xml_obj = new relation(); // // set the changeset. // if (dom_obj.ChangeSetId.HasValue) // { // xml_obj.changeset = dom_obj.ChangeSetId.Value; // xml_obj.changesetSpecified = true; // } // // set the id. // if (dom_obj.Id.HasValue) // { // xml_obj.id = dom_obj.Id.Value; // xml_obj.idSpecified = true; // } // else // { // xml_obj.idSpecified = false; // } // if (dom_obj.Tags != null) // { // xml_obj.tag = new tag[dom_obj.Tags.Count]; // int idx = 0; // foreach (var tag in dom_obj.Tags) // { // tag t = new tag(); // t.k = tag.Key; // t.v = tag.Value; // xml_obj.tag[idx] = t; // idx++; // } // } // // set the timestamp. // if (dom_obj.TimeStamp.HasValue) // { // xml_obj.timestamp = dom_obj.TimeStamp.Value; // xml_obj.timestampSpecified = true; // } // // set the user data. // if (dom_obj.UserId.HasValue) // { // xml_obj.uid = dom_obj.UserId.Value; // xml_obj.uidSpecified = true; // } // xml_obj.user = xml_obj.user; // // set the version. // if (dom_obj.Version.HasValue) // { // xml_obj.version = (ulong)dom_obj.Version.Value; // xml_obj.versionSpecified = true; // } // // set the visible. // if (dom_obj.Visible.HasValue) // { // xml_obj.visible = dom_obj.Visible.Value; // xml_obj.visibleSpecified = true; // } // else // { // xml_obj.visibleSpecified = false; // } // // set the way-specific properties. // xml_obj.member = new member[dom_obj.Members.Count]; // for (int idx = 0; idx < dom_obj.Members.Count; idx++) // { // RelationMember dom_member = dom_obj.Members[idx]; // member m = new member(); // switch(dom_member.Member.Type) // { // case OsmType.Node: // m.type = memberType.node; // m.typeSpecified = true; // break; // case OsmType.Relation: // m.type = memberType.relation; // m.typeSpecified = true; // break; // case OsmType.Way: // m.type = memberType.way; // m.typeSpecified = true; // break; // } // m.@ref = dom_member.Member.Id; // m.refSpecified = true; // m.role = dom_member.Role; // xml_obj.member[idx] = m; // } // return xml_obj; //} ///// <summary> ///// Converts a domain model way to an Xml way. ///// </summary> ///// <param name="dom_obj"></param> ///// <returns></returns> //public static way ConvertTo(this Way dom_obj) //{ // way xml_obj = new way(); // // set the changeset. // if (dom_obj.ChangeSetId.HasValue) // { // xml_obj.changeset = dom_obj.ChangeSetId.Value; // xml_obj.changesetSpecified = true; // } // // set the id. // xml_obj.id = dom_obj.Id; // xml_obj.idSpecified = true; // if (dom_obj.Tags != null) // { // xml_obj.tag = new tag[dom_obj.Tags.Count]; // int idx = 0; // foreach (var tag in dom_obj.Tags) // { // tag t = new tag(); // t.k = tag.Key; // t.v = tag.Value; // xml_obj.tag[idx] = t; // idx++; // } // } // // set the timestamp. // if (dom_obj.TimeStamp.HasValue) // { // xml_obj.timestamp = dom_obj.TimeStamp.Value; // xml_obj.timestampSpecified = true; // } // // set the user data. // if (dom_obj.UserId.HasValue) // { // xml_obj.uid = dom_obj.UserId.Value; // xml_obj.uidSpecified = true; // } // xml_obj.user = xml_obj.user; // // set the version. // if (dom_obj.Version.HasValue) // { // xml_obj.version = (ulong)dom_obj.Version.Value; // xml_obj.versionSpecified = true; // } // // set the visible. // xml_obj.visible = dom_obj.Visible; // xml_obj.visibleSpecified = true; // // set the way-specific properties. // xml_obj.nd = new nd[dom_obj.Nodes.Count]; // for(int idx = 0;idx < dom_obj.Nodes.Count;idx++) // { // nd n = new nd(); // n.@ref = dom_obj.Nodes[idx].Id; // n.refSpecified = true; // xml_obj.nd[idx] = n; // } // return xml_obj; //} ///// <summary> ///// Converts an Xml node to an Osm domain model node. ///// </summary> ///// <param name="dom_obj"></param> ///// <returns></returns> //public static node ConvertTo(this Node dom_obj) //{ // node xml_obj = new node(); // // set the changeset. // if(dom_obj.ChangeSetId.HasValue) // { // xml_obj.changeset = dom_obj.ChangeSetId.Value; // xml_obj.changesetSpecified = true; // } // // set the id. // xml_obj.id = dom_obj.Id; // xml_obj.idSpecified = true; // if (dom_obj.Tags != null) // { // xml_obj.tag = new tag[dom_obj.Tags.Count]; // int idx = 0; // foreach (var tag in dom_obj.Tags) // { // tag t = new tag(); // t.k = tag.Key; // t.v = tag.Value; // xml_obj.tag[idx] = t; // idx++; // } // } // // set the timestamp. // if (dom_obj.TimeStamp.HasValue) // { // xml_obj.timestamp = dom_obj.TimeStamp.Value; // xml_obj.timestampSpecified = true; // } // // set the user data. // if (dom_obj.UserId.HasValue) // { // xml_obj.uid = dom_obj.UserId.Value; // xml_obj.uidSpecified = true; // } // xml_obj.user = xml_obj.user; // // set the version. // if (dom_obj.Version.HasValue) // { // xml_obj.version = (ulong)dom_obj.Version.Value; // xml_obj.versionSpecified = true; // } // // set the visible. // xml_obj.visible = dom_obj.Visible; // xml_obj.visibleSpecified = true; // // set the node-specific properties. // xml_obj.lat = dom_obj.Coordinate.Latitude; // xml_obj.latSpecified = true; // xml_obj.lon = dom_obj.Coordinate.Longitude; // xml_obj.lonSpecified = true; // return xml_obj; //} /// <summary> /// Converts an Xml node to an Osm domain model node. /// </summary> /// <param name="dom_obj"></param> /// <returns></returns> public static node ConvertTo(this OsmSharp.Osm.Node dom_obj) { node xml_obj = new node(); // set the changeset. if (dom_obj.ChangeSetId.HasValue) { xml_obj.changeset = dom_obj.ChangeSetId.Value; xml_obj.changesetSpecified = true; } // set the id. if (dom_obj.Id.HasValue) { xml_obj.id = dom_obj.Id.Value; xml_obj.idSpecified = true; } if (dom_obj.Tags != null) { xml_obj.tag = new tag[dom_obj.Tags.Count]; int idx = 0; foreach (var tag in dom_obj.Tags) { tag t = new tag(); t.k = tag.Key; t.v = tag.Value; xml_obj.tag[idx] = t; idx++; } } // set the timestamp. if (dom_obj.TimeStamp.HasValue) { xml_obj.timestamp = dom_obj.TimeStamp.Value; xml_obj.timestampSpecified = true; } // set the user data. if (dom_obj.UserId.HasValue) { xml_obj.uid = dom_obj.UserId.Value; xml_obj.uidSpecified = true; } xml_obj.user = xml_obj.user; // set the version. if (dom_obj.Version.HasValue) { xml_obj.version = (ulong)dom_obj.Version.Value; xml_obj.versionSpecified = true; } // set the visible. xml_obj.visible = dom_obj.Visible.Value; xml_obj.visibleSpecified = true; // set the node-specific properties. xml_obj.lat = dom_obj.Latitude.Value; xml_obj.latSpecified = true; xml_obj.lon = dom_obj.Longitude.Value; xml_obj.lonSpecified = true; return(xml_obj); }
private void Delete(Node node) { OracleCommand command; command = this.CreateCommand("delete from node_tags where node_id = :node_id"); command.Parameters.Add(new OracleParameter("node_id", node.Id.Value)); command.ExecuteNonQuery(); command.Dispose(); command = this.CreateCommand("delete from node where id = :id"); command.Parameters.Add(new OracleParameter("id", node.Id.Value)); command.ExecuteNonQuery(); command.Dispose(); }
/// <summary> /// Tests read/writing a node. /// </summary> protected void TestNodeReadWrite() { this.NotifyEmptyExpected(); // empty test database. // create a test-node. Node node = new Node(); node.Id = 1; node.Latitude = 51.0; node.Longitude = 4.0; // create a target, add the node, create a source and verify node in db. var target = this.CreateDataStreamTarget(); target.Initialize(); target.AddNode(node); target.Flush(); target.Close(); var dataSource = this.CreateDataSource(); Node foundNode = dataSource.GetNode(1); this.CompareNodes(node, foundNode); this.NotifyEmptyExpected(); // empty test database. // create a test-node. node = new Node(); node.Id = 1; node.Latitude = 51.0; node.Longitude = 4.0; node.UserName = "******"; // create a target, add the node, create a source and verify node in db. target = this.CreateDataStreamTarget(); target.Initialize(); target.AddNode(node); target.Flush(); target.Close(); dataSource = this.CreateDataSource(); foundNode = dataSource.GetNode(1); this.CompareNodes(node, foundNode); this.NotifyEmptyExpected(); // empty test database. // create a test-node. node = new Node(); node.Id = 1; node.Latitude = 51.0; node.Longitude = 4.0; node.UserName = "******"; node.UserId = 10; // create a target, add the node, create a source and verify node in db. target = this.CreateDataStreamTarget(); target.Initialize(); target.AddNode(node); target.Flush(); target.Close(); dataSource = this.CreateDataSource(); foundNode = dataSource.GetNode(1); this.CompareNodes(node, foundNode); this.NotifyEmptyExpected(); // empty test database. // create a test-node. node = new Node(); node.Id = 1; node.Latitude = 51.0; node.Longitude = 4.0; node.UserName = "******"; node.UserId = 10; node.Version = 1; // create a target, add the node, create a source and verify node in db. target = this.CreateDataStreamTarget(); target.Initialize(); target.AddNode(node); target.Flush(); target.Close(); dataSource = this.CreateDataSource(); foundNode = dataSource.GetNode(1); this.CompareNodes(node, foundNode); this.NotifyEmptyExpected(); // empty test database. // create a test-node. node = new Node(); node.Id = 1; node.Latitude = 51.0; node.Longitude = 4.0; node.UserName = "******"; node.UserId = 10; node.Version = 1; node.Visible = true; // create a target, add the node, create a source and verify node in db. target = this.CreateDataStreamTarget(); target.Initialize(); target.AddNode(node); target.Flush(); target.Close(); dataSource = this.CreateDataSource(); foundNode = dataSource.GetNode(1); this.CompareNodes(node, foundNode); this.NotifyEmptyExpected(); // empty test database. // create a test-node. node = new Node(); node.Id = 1; node.Latitude = 51.0; node.Longitude = 4.0; node.UserName = "******"; node.UserId = 10; node.Version = 1; node.Visible = true; node.TimeStamp = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second); // create a target, add the node, create a source and verify node in db. target = this.CreateDataStreamTarget(); target.Initialize(); target.AddNode(node); target.Flush(); target.Close(); dataSource = this.CreateDataSource(); foundNode = dataSource.GetNode(1); this.CompareNodes(node, foundNode); this.NotifyEmptyExpected(); // empty test database. // create a test-node. node = new Node(); node.Id = 1; node.Latitude = 51.0; node.Longitude = 4.0; node.UserName = "******"; node.UserId = 10; node.Version = 1; node.Visible = true; node.TimeStamp = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second); node.Tags = new SimpleTagsCollection(); node.Tags.Add("tag", "value"); // create a target, add the node, create a source and verify node in db. target = this.CreateDataStreamTarget(); target.Initialize(); target.AddNode(node); target.Flush(); target.Close(); dataSource = this.CreateDataSource(); foundNode = dataSource.GetNode(1); this.CompareNodes(node, foundNode); }
/// <summary> /// Modifies the given node. /// </summary> /// <param name="node"></param> private void Modify(Node node) { OracleCommand command; string sql = string.Empty; DateTime? timestamp = node.TimeStamp; if (timestamp.HasValue) { sql = "update node set latitude = :latitude, longitude = :longitude, changeset_id = :changeset_id, visible=:visible, timestamp=to_date('{0}','YYYY/MM/DD HH24:MI'), tile=:tile, version=:version, usr=:usr, usr_id=:usr_id where id=:id"; sql = string.Format(sql,timestamp.Value.ToString("yyyy/MM/dd HH:mm")); } else { sql = "update node set latitude = :latitude, longitude = :longitude, changeset_id = :changeset_id, visible=:visible, timestamp=null, tile=:tile, version=:version where id=:id"; } command = this.CreateCommand(sql); // format data and create parameters. int? latitude = (int)(node.Latitude * 10000000); // latitude should always contain a value. command.Parameters.Add("latitude",latitude.ConvertToDBValue<int>()); int? longitude = (int)(node.Longitude * 10000000); // longitude should always containt a value. command.Parameters.Add("longitude",longitude.ConvertToDBValue<int>()); long? changeset_id = node.ChangeSetId; command.Parameters.Add("changeset_id",changeset_id.ConvertToDBValue<long>()); bool? visible = node.Visible; int visible_int = 1; if (!visible.HasValue || !visible.Value) { visible_int = 0; } command.Parameters.Add("visible", visible_int); // calculate the tile the node belongs to. long tile = TileCalculations.xy2tile(TileCalculations.lon2x(node.Longitude.Value), TileCalculations.lat2y(node.Latitude.Value)); command.Parameters.Add("tile", tile); long? version = (long)node.Version; command.Parameters.Add("version",version.ConvertToDBValue<long>()); command.Parameters.Add("usr", node.UserName); command.Parameters.Add("usr_id", node.UserId); long? id = node.Id; command.Parameters.Add("id", id.ConvertToDBValue<long>()); // execute the update command. command.ExecuteNonQuery(); command.Dispose(); if (this.Exists("node",id.Value)) { // modify the node tags. this.ModifyTags(node.Id.Value, node.Tags, "node_tags", "node_id"); } // raise the modified event. this.RaiseChange(ChangeType.Modify, OsmGeoType.Node, node.Id.Value); }
/// <summary> /// Returns all the ways for a given node. /// </summary> /// <param name="node"></param> /// <returns></returns> public override IList<Way> GetWaysFor(Node node) { return this.GetWaysFor(node.Id.Value); }
/// <summary> /// Returns true if this way contains the given node. /// </summary> /// <param name="node"></param> /// <returns></returns> public bool HasNode(Node node) { return this.Nodes.Contains(node); }
/// <summary> /// Creates a new node. /// </summary> /// <param name="id"></param> /// <param name="tags"></param> /// <param name="latitude"></param> /// <param name="longitude"></param> /// <returns></returns> public static Node Create(long id, TagsCollection tags, double latitude, double longitude) { Node node = new Node(); node.Id = id; node.Latitude = latitude; node.Longitude = longitude; node.Tags = tags; return node; }
public void APITestNodeCreateGetUpdate() { // intialize the connection. var apiInstance = new APIConnection("http://api06.dev.openstreetmap.org/", "osmsharp", "osmsharp"); // open a changeset. apiInstance.ChangeSetOpen("Simple Node Creation Test"); // initialize the node. var node = new Node(); node.Latitude = -0.494497; node.Longitude = -24.119325; node.Tags = new TagsCollection(); node.Tags.Add("type", "testnode"); node.Visible = true; // save the node. node = apiInstance.NodeCreate(node); // close the changeset. apiInstance.ChangeSetClose(); // check if the id now has a value. Assert.IsTrue(node.Id.HasValue); // get the new node id. long nodeId = node.Id.Value; // open new changeset. apiInstance.ChangeSetOpen("Simple Node Update Test"); // get the node. Node apiNode = apiInstance.NodeGet(node.Id.Value); apiNode.Tags.Add("another_tag", "test adding a tag!"); apiInstance.NodeUpdate(apiNode); // close the current changeset. apiInstance.ChangeSetClose(); // get the api node. apiNode = apiInstance.NodeGet(node.Id.Value); Assert.AreEqual(2, apiNode.Tags.Count); Assert.IsTrue(apiNode.Tags.ContainsKey("another_tag")); Assert.AreEqual("test adding a tag!", apiNode.Tags["another_tag"]); }
private bool DoMoveNextNode() { if (_node_reader == null) { SQLiteCommand node_command = new SQLiteCommand("select * from node left join node_tags on node_tags.node_id = node.id order by node.id"); node_command.Connection = _connection; _node_reader = node_command.ExecuteReader(); if (!_node_reader.Read()) _node_reader.Close(); } // read next node. if (!_node_reader.IsClosed) { // load/parse data. Node node = new Node(); node.Id = _node_reader.GetInt64(0); node.Latitude = _node_reader.GetInt64(1) / 10000000.0; node.Longitude = _node_reader.GetInt64(2) / 10000000.0; node.ChangeSetId = _node_reader.GetInt64(3); node.TimeStamp = _node_reader.GetDateTime(5); node.Version = (ulong)_node_reader.GetInt64(7); node.Visible = _node_reader.GetInt64(4) == 1; //node.UserName = _node_reader.GetString(8); //node.UserId = _node_reader.IsDBNull(9) ? -1 : _node_reader.GetInt64(9); //Has tags? if (!_node_reader.IsDBNull(10)) { //if (node.Tags == null) //node.Tags = new Dictionary<string, string>(); long currentnode = node.Id.Value; while (currentnode == node.Id.Value) { //string key = _node_reader.GetString(11); //string value = _node_reader.GetString(12); //node.Tags.Add(key, value); if (!_node_reader.Read()) { _node_reader.Close(); break; } currentnode = _node_reader.GetInt64(0); } } else if (!_node_reader.Read()) _node_reader.Close(); // set the current variable! _current = node; return true; } _node_reader.Close(); _node_reader.Dispose(); _node_reader = null; _current_type = OsmGeoType.Way; return false; }
private void Create(Node node) { OracleCommand command; command = this.CreateCommand("insert into node (id,latitude,longitude,changeset_id,visible,timestamp,tile,version,usr,usr_id) values (:id,:latitude,:longitude,:changeset_id,:visible,:timestamp,:tile,:version,:usr,:usr_id)"); // format data and create parameters. long? id = node.Id; command.Parameters.Add(new OracleParameter("id", id.ConvertToDBValue<long>())); int? latitude = (int)(node.Latitude * 10000000); // latitude should always contain a value. command.Parameters.Add(new OracleParameter("latitude", latitude.ConvertToDBValue<int>())); int? longitude = (int)(node.Longitude * 10000000); // longitude should always containt a value. command.Parameters.Add(new OracleParameter("longitude", longitude.ConvertToDBValue<int>())); long? changeset_id = node.ChangeSetId; command.Parameters.Add(new OracleParameter("changeset_id", changeset_id.ConvertToDBValue<long>())); bool? visible = node.Visible; int visible_int = 1; if (!visible.HasValue) { visible_int = 1; } command.Parameters.Add(new OracleParameter("visible", visible_int)); DateTime? timestamp = node.TimeStamp; command.Parameters.Add(new OracleParameter("ts", timestamp.ConvertToDBValue<DateTime>())); // calculate the tile the node belongs to. long tile = TileCalculations.xy2tile(TileCalculations.lon2x(node.Longitude.Value), TileCalculations.lat2y(node.Latitude.Value)); command.Parameters.Add(new OracleParameter("tile", tile)); long? version = (long)node.Version; command.Parameters.Add(new OracleParameter("version", version.ConvertToDBValue<long>())); command.Parameters.Add("usr", node.UserName); command.Parameters.Add("usr_id", node.UserId); command.ExecuteNonQuery(); command.Dispose(); // insert tags. this.CreateTags(node.Id.Value, node.Tags, "node_tags", "node_id"); }