public static OsmNode ConvertTo(SimpleNode node) { OsmNode new_way = new OsmNode(); new_way.Id = node.Id.Value; new_way.Latitude = node.Latitude.Value; new_way.Longitude = node.Longitude.Value; new_way.Tags = PrimitiveExtensions.ConvertTo(node.Tags); return new_way; }
/// <summary> /// Adds a node to the target. /// </summary> /// <param name="node"></param> public override void AddNode(SimpleNode node) { if (_base_objects == null) { // the base object collection is null. throw new InvalidOperationException("No target collection set!"); } // add the node to the collection. _base_objects.Add(node); }
private void Delete(SimpleNode 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> /// Modifies the given node. /// </summary> /// <param name="node"></param> private void Modify(SimpleNode 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(SimpleChangeType.Modify, SimpleOsmGeoType.Node, node.Id.Value); }
/// <summary> /// Converts simple primitives. /// </summary> /// <param name="pbf_primitive"></param> /// <returns></returns> internal SimpleOsmGeo Convert(KeyValuePair<PrimitiveBlock, object> pbf_primitive) { if (pbf_primitive.Value == null || pbf_primitive.Key == null) { throw new ArgumentNullException("pbf_primitive"); } PrimitiveBlock block = pbf_primitive.Key; // get the block properties this object comes from. if (pbf_primitive.Value is Node) { Node node = (pbf_primitive.Value as Node); SimpleNode simple_node = new SimpleNode(); simple_node.ChangeSetId = node.info.changeset; simple_node.Id = node.id; simple_node.Latitude = .000000001 * ((double)block.lat_offset + ((double)block.granularity * (double)node.lat)); simple_node.Longitude = .000000001 * ((double)block.lon_offset + ((double)block.granularity * (double)node.lon)); simple_node.Tags = new Dictionary<string, string>(); for (int tag_idx = 0; tag_idx < node.keys.Count; tag_idx++) { string key = ASCIIEncoding.ASCII.GetString(block.stringtable.s[(int)node.keys[tag_idx]]); string value = ASCIIEncoding.ASCII.GetString(block.stringtable.s[(int)node.vals[tag_idx]]); if (!simple_node.Tags.ContainsKey(key)) { simple_node.Tags.Add(new KeyValuePair<string, string>(key, value)); } } simple_node.TimeStamp = OsmSharp.Tools.Utilities.FromUnixTime((long)node.info.timestamp * (long)block.date_granularity); simple_node.Visible = true; simple_node.Version = (uint)node.info.version; simple_node.UserId = node.info.uid; simple_node.UserName = ASCIIEncoding.ASCII.GetString(block.stringtable.s[node.info.user_sid]); simple_node.Version = (ulong)node.info.version; simple_node.Visible = true; return simple_node; } else if (pbf_primitive.Value is Way) { Way way = (pbf_primitive.Value as Way); SimpleWay simple_way = new SimpleWay(); simple_way.Id = way.id; simple_way.Nodes = new List<long>(way.refs.Count); long node_id = 0; for (int node_idx = 0; node_idx < way.refs.Count; node_idx++) { node_id = node_id + way.refs[node_idx]; simple_way.Nodes.Add(node_id); } simple_way.Tags = new Dictionary<string, string>(); for (int tag_idx = 0; tag_idx < way.keys.Count; tag_idx++) { string key = ASCIIEncoding.ASCII.GetString(block.stringtable.s[(int)way.keys[tag_idx]]); string value = ASCIIEncoding.ASCII.GetString(block.stringtable.s[(int)way.vals[tag_idx]]); if (!simple_way.Tags.ContainsKey(key)) { simple_way.Tags.Add(new KeyValuePair<string, string>(key, value)); } } if (way.info != null) { // add the metadata if any. simple_way.ChangeSetId = way.info.changeset; simple_way.TimeStamp = OsmSharp.Tools.Utilities.FromUnixTime((long)way.info.timestamp * (long)block.date_granularity); simple_way.UserId = way.info.uid; simple_way.UserName = ASCIIEncoding.ASCII.GetString(block.stringtable.s[way.info.user_sid]); simple_way.Version = (ulong)way.info.version; } simple_way.Visible = true; return simple_way; } else if (pbf_primitive.Value is Relation) { Relation relation = (pbf_primitive.Value as Relation); SimpleRelation simple_relation = new SimpleRelation(); simple_relation.Id = relation.id; simple_relation.Members = new List<SimpleRelationMember>(); long member_id = 0; for (int member_idx = 0; member_idx < relation.types.Count; member_idx++) { member_id = member_id + relation.memids[member_idx]; string role = ASCIIEncoding.ASCII.GetString( block.stringtable.s[relation.roles_sid[member_idx]]); SimpleRelationMember member = new SimpleRelationMember(); member.MemberId = member_id; member.MemberRole = role; switch(relation.types[member_idx]) { case Relation.MemberType.NODE: member.MemberType = SimpleRelationMemberType.Node; break; case Relation.MemberType.WAY: member.MemberType = SimpleRelationMemberType.Way; break; case Relation.MemberType.RELATION: member.MemberType = SimpleRelationMemberType.Relation; break; } simple_relation.Members.Add(member); } simple_relation.Tags = new Dictionary<string, string>(); for (int tag_idx = 0; tag_idx < relation.keys.Count; tag_idx++) { string key = ASCIIEncoding.ASCII.GetString(block.stringtable.s[(int)relation.keys[tag_idx]]); string value = ASCIIEncoding.ASCII.GetString(block.stringtable.s[(int)relation.vals[tag_idx]]); if (!simple_relation.Tags.ContainsKey(key)) { simple_relation.Tags.Add(new KeyValuePair<string, string>(key, value)); } } if (relation.info != null) { // read metadata if any. simple_relation.ChangeSetId = relation.info.changeset; simple_relation.TimeStamp = OsmSharp.Tools.Utilities.FromUnixTime((long)relation.info.timestamp * (long)block.date_granularity); simple_relation.UserId = relation.info.uid; simple_relation.UserName = ASCIIEncoding.ASCII.GetString(block.stringtable.s[relation.info.user_sid]); simple_relation.Version = (ulong)relation.info.version; } simple_relation.Visible = true; return simple_relation; } throw new Exception(string.Format("PBF primitive with type {0} not supported!", pbf_primitive.GetType().ToString())); }
private void Create(SimpleNode 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"); }
private bool MoveNextNode() { if (_nodeReader == 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; _nodeReader = node_command.ExecuteReader(); if (!_nodeReader.Read()) _nodeReader.Close(); } // read next node. if (!_nodeReader.IsClosed) { // load/parse data. SimpleNode node = new SimpleNode(); node.Id = _nodeReader.GetInt64(0); node.Latitude = _nodeReader.GetInt64(1)/10000000.0; node.Longitude = _nodeReader.GetInt64(2)/10000000.0; node.ChangeSetId = _nodeReader.GetInt64(3); node.TimeStamp = _nodeReader.GetDateTime(5); node.Version = (ulong) _nodeReader.GetInt64(7); node.Visible = _nodeReader.GetInt64(4) == 1; //node.UserName = _node_reader.GetString(8); //node.UserId = _node_reader.IsDBNull(9) ? -1 : _node_reader.GetInt64(9); //Has tags? if (!_nodeReader.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 (!_nodeReader.Read()) { _nodeReader.Close(); break; } currentnode = _nodeReader.GetInt64(0); } }else if (!_nodeReader.Read()) _nodeReader.Close(); // set the current variable! _current = node; return true; } _nodeReader.Close(); _nodeReader.Dispose(); _nodeReader = null; _currentType = SimpleOsmGeoType.Way; return false; }
public void init() { // initialize the connection. APIConnection api_instance = new APIConnection( "http://api06.dev.openstreetmap.org/", "osmsharp", "osmsharp"); // open a changeset. long changeset_id = api_instance.ChangeSetOpen("An example comment!"); // initialize the nodes. SimpleNode node1 = new SimpleNode(); node1.Latitude = -0.494497; node1.Longitude = -24.119325; node1.Tags = new Dictionary<string, string>(); node1.Tags.Add("type", "testnode1"); node1.Visible = true; node1 = api_instance.NodeCreate(node1); // create SimpleNode node2 = new SimpleNode(); node2.Latitude = -0.494497 + 0.0001f; node2.Longitude = -24.119325 + 0.0001f; node2.Tags = new Dictionary<string, string>(); node2.Tags.Add("type", "testnode2"); node2.Visible = true; node2 = api_instance.NodeCreate(node2); // create // initialize the way. SimpleWay way = new SimpleWay(); way.Tags = new Dictionary<string, string>(); way.Tags.Add("type", "testway"); way.Nodes = new List<long>(); way.Visible = true; way.Nodes.Add(node1.Id.Value); way.Nodes.Add(node2.Id.Value); way = api_instance.WayCreate(way); // create // initialize the relation. SimpleRelation relation = new SimpleRelation(); relation.Tags = new Dictionary<string, string>(); relation.Tags.Add("type", "testrelation"); relation.Members = new List<SimpleRelationMember>(); relation.Visible = true; relation.Members.Add(new SimpleRelationMember() { MemberId = node1.Id.Value, MemberRole = "some_nodes_role", MemberType = SimpleRelationMemberType.Node }); relation.Members.Add(new SimpleRelationMember() { MemberId = node2.Id.Value, MemberRole = "some_nodes_role", MemberType = SimpleRelationMemberType.Node }); relation.Members.Add(new SimpleRelationMember() { MemberId = way.Id.Value, MemberRole = "some_ways_role", MemberType = SimpleRelationMemberType.Way }); // save the relation. relation = api_instance.RelationCreate(relation); // close the changeset. api_instance.ChangeSetClose(); }
public void APITestNodeCreateGetUpdate() { // intialize the connection. APIConnection api_instance = new APIConnection("http://api06.dev.openstreetmap.org/", "osmsharp", "osmsharp"); // open a changeset. long changeset_id = api_instance.ChangeSetOpen("Simple Node Creation Test"); // initialize the node. SimpleNode node = new SimpleNode(); node.Latitude = -0.494497; node.Longitude = -24.119325; node.Tags = new Dictionary<string, string>(); node.Tags.Add("type", "testnode"); node.Visible = true; // save the node. node = api_instance.NodeCreate(node); // close the changeset. api_instance.ChangeSetClose(); // check if the id now has a value. Assert.IsTrue(node.Id.HasValue); // get the new node id. long node_id = node.Id.Value; // open new changeset. changeset_id = api_instance.ChangeSetOpen("Simple Node Update Test"); // get the node. SimpleNode api_node = api_instance.NodeGet(node.Id.Value); api_node.Tags.Add("another_tag", "test adding a tag!"); api_instance.NodeUpdate(api_node); // close the current changeset. api_instance.ChangeSetClose(); // get the api node. api_node = api_instance.NodeGet(node.Id.Value); Assert.AreEqual(2, api_node.Tags.Count); Assert.IsTrue(api_node.Tags.ContainsKey("another_tag")); Assert.AreEqual("test adding a tag!", api_node.Tags["another_tag"]); }
/// <summary> /// Adds a node. /// </summary> /// <param name="node"></param> public void AddNode(SimpleNode node) { _nodes[node.Id.Value] = node; }
public void APITestNodeCreateGet() { // intialize the connection. APIConnection api_instance = new APIConnection("http://api06.dev.openstreetmap.org/", "osmsharp", "osmsharp"); // open a changeset. long changeset_id = api_instance.ChangeSetOpen("Simple Node Creation Test"); // initialize the node. SimpleNode node = new SimpleNode(); node.Latitude = -0.494497; node.Longitude = -24.119325; node.Tags = new Dictionary<string, string>(); node.Tags.Add("type", "testnode"); node.Visible = true; // save the node. node = api_instance.NodeCreate(node); // close the changeset. api_instance.ChangeSetClose(); // check if the id now has a value. Assert.IsTrue(node.Id.HasValue); // get the new node id. long node_id = node.Id.Value; // get the node from the api. SimpleNode node_api = api_instance.NodeGet(node.Id.Value); Assert.AreEqual(node.Latitude, node_api.Latitude); Assert.AreEqual(node.Longitude, node_api.Longitude); Assert.AreEqual(node.Tags.Count, node_api.Tags.Count); Assert.AreEqual(node.Visible, node_api.Visible); Assert.IsTrue(node_api.ChangeSetId.HasValue); Assert.AreEqual(changeset_id, node_api.ChangeSetId.Value); }
public void APITestNodeCreateGetDelete() { // intialize the connection. APIConnection api_instance = new APIConnection("http://api06.dev.openstreetmap.org/", "osmsharp", "osmsharp"); // open a changeset. long changeset_id = api_instance.ChangeSetOpen("Simple Node Creation Test"); // initialize the node. SimpleNode node = new SimpleNode(); node.Latitude = -0.494497; node.Longitude = -24.119325; node.Tags = new Dictionary<string, string>(); node.Tags.Add("type", "testnode"); node.Visible = true; // save the node. node = api_instance.NodeCreate(node); // close the changeset. api_instance.ChangeSetClose(); // check if the id now has a value. Assert.IsTrue(node.Id.HasValue); // get the new node id. long node_id = node.Id.Value; // get the node again: a node can only be deleted using the correct changesetid and version. node = api_instance.NodeGet(node.Id.Value); // open new changeset. changeset_id = api_instance.ChangeSetOpen("Simple Node Delete Test"); // get the node. api_instance.NodeDelete(node); // close the current changeset. api_instance.ChangeSetClose(); // get the node. SimpleNode api_node = api_instance.NodeGet(node.Id.Value); Assert.IsNull(api_node); }
/// <summary> /// Converts an API v6 xml node to a SimpleNode object. /// </summary> /// <param name="xml_node"></param> /// <returns></returns> private SimpleNode Convertv6XmlNode(Osm.Xml.v0_6.node xml_node) { SimpleNode node = new SimpleNode(); node.Id = xml_node.id; node.Latitude = xml_node.lat; node.Longitude = xml_node.lon; if (xml_node.tag != null) { node.Tags = new Dictionary<string, string>(); foreach (Osm.Xml.v0_6.tag xml_tag in xml_node.tag) { node.Tags.Add(xml_tag.k, xml_tag.v); } } node.ChangeSetId = xml_node.changeset; node.TimeStamp = xml_node.timestamp; node.UserName = xml_node.user; node.UserId = xml_node.uid; node.Version = xml_node.version; node.Visible = xml_node.visible; return node; }
/// <summary> /// Modifies a the given node by adding it's modification to the current changeset. /// </summary> /// <param name="node"></param> public void NodeUpdate(SimpleNode node) { if (_current_changeset == null) { throw new InvalidOperationException("No open changeset found!"); } if (!node.Id.HasValue) { throw new ArgumentOutOfRangeException("Cannot update an object without an id!"); } // build a new node. node xml_node = node.ConvertTo(); xml_node.changeset = _current_changeset.id; xml_node.changesetSpecified = true; // encapsulate into an osm object. OsmSharp.Osm.Xml.v0_6.osm osm = new Osm.Xml.v0_6.osm(); osm.node = new Osm.Xml.v0_6.node[1]; osm.node[0] = xml_node; // serialize the changeset. XmlSerializer serializer = new XmlSerializer(typeof(OsmSharp.Osm.Xml.v0_6.osm)); MemoryStream mem_stream = new MemoryStream(); Stream stream = mem_stream; serializer.Serialize(stream, osm); stream.Flush(); mem_stream.Flush(); byte[] put_data = mem_stream.ToArray(); // do the api call. string response_string = this.DoApiCall(true, string.Format("api/0.6/node/{0}", node.Id.Value), Method.PUT, put_data); }
/// <summary> /// Creates a new node by adding it's creation to the current changeset. /// </summary> /// <param name="node"></param> public SimpleNode NodeCreate(SimpleNode node) { if (_current_changeset == null) { throw new InvalidOperationException("No open changeset found!"); } // build a new node. node xml_node = node.ConvertTo(); xml_node.changeset = _current_changeset.id; xml_node.changesetSpecified = true; // encapsulate into an osm object. OsmSharp.Osm.Xml.v0_6.osm osm = new Osm.Xml.v0_6.osm(); osm.node = new Osm.Xml.v0_6.node[1]; osm.node[0] = xml_node; // serialize the changeset. XmlSerializer serializer = new XmlSerializer(typeof(OsmSharp.Osm.Xml.v0_6.osm)); MemoryStream mem_stream = new MemoryStream(); Stream stream = mem_stream; serializer.Serialize(stream, osm); stream.Flush(); mem_stream.Flush(); byte[] put_data = mem_stream.ToArray(); // do the api call. string response_string = this.DoApiCall(true, "api/0.6/node/create", Method.PUT, put_data); // get the id-response. long id; if (!long.TryParse(response_string, out id)) { // invalid response! throw new APIException(string.Format("Invalid response when creating a new node: {0}", response_string)); } node.Id = id; return node; }
public override void AddNode(SimpleNode node) { DataRow node_row = _node_table.NewRow(); // format data and create parameters. long? id = node.Id; node_row["id"] = id.ConvertToDBValue<long>(); int? latitude = (int)(node.Latitude * 10000000); // latitude should always contain a value. node_row["latitude"] = latitude.ConvertToDBValue<int>(); int? longitude = (int)(node.Longitude * 10000000); // longitude should always containt a value. node_row["longitude"] = longitude.ConvertToDBValue<int>(); long? changeset_id = node.ChangeSetId; node_row["changeset_id"] = changeset_id.ConvertToDBValue<long>(); bool? visible = node.Visible; int visible_int = 1; if (!visible.HasValue || !visible.Value) { visible_int = 0; } node_row["visible"] = visible_int; DateTime? timestamp = node.TimeStamp; node_row["timestamp"] = timestamp.ConvertToDBValue<DateTime>(); ulong? version = node.Version; node_row["version"] = version.ConvertToDBValue<ulong>(); // calculate the tile the node belongs to. long tile = TileCalculations.xy2tile(TileCalculations.lon2x(node.Longitude.Value), TileCalculations.lat2y(node.Latitude.Value)); node_row["tile"] = tile; // set the usr node_row["usr"] = node.UserName.ToStringEmptyWhenNull(); node_row["usr_id"] = node.UserId.ConvertToDBValue<long>(); // add the node and it's tags. _node_table.Rows.Add(node_row); // tags. if (node.Tags != null) { foreach (KeyValuePair<string, string> tag in node.Tags) { string key = tag.Key; string value = tag.Value; DataRow tag_row = _node_tags_table.NewRow(); tag_row["node_id"] = id; tag_row["key"] = key.Truncate(100); tag_row["value"] = value.Truncate(500); if (_node_tags_table.Rows.Contains(new[] { id, tag_row["key"] })) continue; _node_tags_table.Rows.Add(tag_row); } } // bulk insert if needed. if (_node_table.Rows.Count >= _batch_nodes) { this.BulkCopy(_node_table, "node"); this.BulkCopy(_node_tags_table, "node_tags"); this.CreateNodeTables(); } }
internal static SimpleNode ConvertToSimple(Osm.Xml.v0_6.node nd) { SimpleNode node = new SimpleNode(); // set id if (nd.idSpecified) { node.Id = nd.id; } // set changeset. if (nd.changesetSpecified) { node.ChangeSetId = nd.changeset; } // set visible. if (nd.visibleSpecified) { node.Visible = nd.visible; } else { // if visible is not specified it is default true. node.Visible = true; } // set timestamp. if (nd.timestampSpecified) { node.TimeStamp = nd.timestamp; } // set latitude. if (nd.latSpecified) { node.Latitude = nd.lat; } // set longitude. if (nd.lonSpecified) { node.Longitude = nd.lon; } // set uid if (nd.uidSpecified) { node.UserId = nd.uid; } // set version if (nd.versionSpecified) { node.Version = nd.version; } // set user node.UserName = nd.user; // set tags. node.Tags = XmlSimpleConverter.ConvertToTags(nd.tag); return node; }
/// <summary> /// Updates a node. /// </summary> /// <param name="node"></param> public void UpdateNode(SimpleNode node) { _nodes[node.Id.Value] = node; }
/// <summary> /// Adds a node. /// </summary> /// <param name="node"></param> public override void AddNode(SimpleNode node) { }
public void APITestRelationCreateGetUpdate() { // intialize the connection. APIConnection api_instance = new APIConnection("http://api06.dev.openstreetmap.org/", "osmsharp", "osmsharp"); // open a changeset. long changeset_id = api_instance.ChangeSetOpen("Simple Relation Creation Test"); // initialize the relation. SimpleRelation relation = new SimpleRelation(); relation.Tags = new Dictionary<string, string>(); relation.Tags.Add("type", "testrelation"); relation.Members = new List<SimpleRelationMember>(); relation.Visible = true; // initialize the nodes. SimpleNode node = new SimpleNode(); node.Latitude = -0.494497; node.Longitude = -24.119325; node.Tags = new Dictionary<string, string>(); node.Tags.Add("type", "testnode1"); node.Visible = true; node = api_instance.NodeCreate(node); relation.Members.Add(new SimpleRelationMember() { MemberId = node.Id.Value, MemberRole = "some_nodes_role", MemberType = SimpleRelationMemberType.Node }); node = new SimpleNode(); node.Latitude = -0.494497 + 0.0001f; node.Longitude = -24.119325 + 0.0001f; node.Tags = new Dictionary<string, string>(); node.Tags.Add("type", "testnode2"); node.Visible = true; node = api_instance.NodeCreate(node); relation.Members.Add(new SimpleRelationMember() { MemberId = node.Id.Value, MemberRole = "some_nodes_role", MemberType = SimpleRelationMemberType.Node }); // save the relation. relation = api_instance.RelationCreate(relation); // close the changeset. api_instance.ChangeSetClose(); // check if the id now has a value. Assert.IsTrue(relation.Id.HasValue); // get the new relation id. long relation_id = relation.Id.Value; // open new changeset. changeset_id = api_instance.ChangeSetOpen("Simple Relation Update Test"); // get the relation. SimpleRelation api_relation = api_instance.RelationGet(relation.Id.Value); api_relation.Tags.Add("another_tag", "test adding a tag!"); api_instance.RelationUpdate(api_relation); // close the current changeset. api_instance.ChangeSetClose(); // get the api relation. api_relation = api_instance.RelationGet(relation.Id.Value); Assert.AreEqual(2, api_relation.Tags.Count); Assert.IsTrue(api_relation.Tags.ContainsKey("another_tag")); Assert.AreEqual("test adding a tag!", api_relation.Tags["another_tag"]); }
/// <summary> /// Adds a given node. /// </summary> /// <param name="simple_node"></param> public override void AddNode(SimpleNode simple_node) { Node node= OsmBaseFactory.CreateNodeFrom(_string_table, simple_node); if (node != null) { _nodes[node.Id] = node; _source.AddNode(node); } }
private bool MoveNextNode() { if (_node_reader == null) { OracleCommand node_command = new OracleCommand("select * from node order by id"); node_command.Connection = _connection; _node_reader = node_command.ExecuteReader(); if (!_node_reader.Read()) { _node_reader.Close(); } OracleCommand node_tag_command = new OracleCommand("select * from node_tags order by node_id"); node_tag_command.Connection = _connection; _node_tag_reader = node_tag_command.ExecuteReader(); if (!_node_tag_reader.Read()) { _node_tag_reader.Close(); } } // read next node. if (!_node_reader.IsClosed) { // load/parse data. long id = _node_reader.GetInt64(0); long latitude_int = _node_reader.GetInt64(1); long longitude_int = _node_reader.GetInt64(2); long changeset_id = _node_reader.GetInt64(3); bool visible = _node_reader.GetInt64(4) == 1; DateTime timestamp = _node_reader.GetDateTime(5); long tile = _node_reader.GetInt64(6); long version = _node_reader.GetInt64(7); string user = _node_reader.GetString(8); long uid = _node_reader.GetInt64(9); SimpleNode node = new SimpleNode(); node.Id = id; node.Latitude = latitude_int; node.Longitude = longitude_int; node.ChangeSetId = changeset_id; node.TimeStamp = timestamp; node.UserId = null; node.UserName = null; node.Version = (ulong)version; node.Visible = visible; node.UserName = user; node.UserId = uid; if (!_node_tag_reader.IsClosed) { long returned_id = _node_tag_reader.GetInt64(0); while (returned_id == node.Id.Value) { if (node.Tags == null) { node.Tags = new Dictionary<string, string>(); } string key = _node_tag_reader.GetString(1); string value = _node_tag_reader.GetString(2); node.Tags.Add(key, value); if (!_node_tag_reader.Read()) { _node_tag_reader.Close(); } returned_id = _node_tag_reader.GetInt64(0); } } // set the current variable! _current = node; // advance the reader(s). if (!_node_reader.Read()) { _node_reader.Close(); } if (!_node_tag_reader.IsClosed && !_node_tag_reader.Read()) { _node_tag_reader.Close(); } return true; } else { _node_reader.Close(); _node_reader.Dispose(); _node_reader = null; _node_tag_reader.Close(); _node_tag_reader.Dispose(); _node_tag_reader = null; _current_type = SimpleOsmGeoType.Way; return false; } }
public void APITestWayCreateGet() { // intialize the connection. APIConnection api_instance = new APIConnection("http://api06.dev.openstreetmap.org/", "osmsharp", "osmsharp"); // open a changeset. long changeset_id = api_instance.ChangeSetOpen("Simple Way Creation Test"); // initialize the way. SimpleWay way = new SimpleWay(); way.Tags = new Dictionary<string, string>(); way.Tags.Add("type", "testway"); way.Nodes = new List<long>(); way.Visible = true; // initialize the nodes. SimpleNode node = new SimpleNode(); node.Latitude = -0.494497; node.Longitude = -24.119325; node.Tags = new Dictionary<string, string>(); node.Tags.Add("type", "testnode1"); node.Visible = true; node = api_instance.NodeCreate(node); way.Nodes.Add(node.Id.Value); node = new SimpleNode(); node.Latitude = -0.494497 + 0.0001f; node.Longitude = -24.119325 + 0.0001f; node.Tags = new Dictionary<string, string>(); node.Tags.Add("type", "testnode2"); node.Visible = true; node = api_instance.NodeCreate(node); way.Nodes.Add(node.Id.Value); // save the way. way = api_instance.WayCreate(way); // close the changeset. api_instance.ChangeSetClose(); // check if the id now has a value. Assert.IsTrue(way.Id.HasValue); // get the new way id. long way_id = way.Id.Value; // get the way from the api. SimpleWay way_api = api_instance.WayGet(way.Id.Value); Assert.AreEqual(way_id, way_api.Id.Value); Assert.AreEqual(way.Tags.Count, way_api.Tags.Count); Assert.AreEqual(way.Visible, way_api.Visible); Assert.IsTrue(way_api.ChangeSetId.HasValue); Assert.AreEqual(changeset_id, way_api.ChangeSetId.Value); Assert.AreEqual(way.Nodes[0], way_api.Nodes[0]); Assert.AreEqual(way.Nodes[1], way_api.Nodes[1]); }
public void APITestWayCreateGetDelete() { // intialize the connection. APIConnection api_instance = new APIConnection("http://api06.dev.openstreetmap.org/", "osmsharp", "osmsharp"); // open a changeset. long changeset_id = api_instance.ChangeSetOpen("Simple Way Creation Test"); // initialize the way. SimpleWay way = new SimpleWay(); way.Tags = new Dictionary<string, string>(); way.Tags.Add("type", "testway"); way.Nodes = new List<long>(); way.Visible = true; // initialize the nodes. SimpleNode node = new SimpleNode(); node.Latitude = -0.494497; node.Longitude = -24.119325; node.Tags = new Dictionary<string, string>(); node.Tags.Add("type", "testnode1"); node.Visible = true; node = api_instance.NodeCreate(node); way.Nodes.Add(node.Id.Value); node = new SimpleNode(); node.Latitude = -0.494497 + 0.0001f; node.Longitude = -24.119325 + 0.0001f; node.Tags = new Dictionary<string, string>(); node.Tags.Add("type", "testnode2"); node.Visible = true; node = api_instance.NodeCreate(node); way.Nodes.Add(node.Id.Value); // save the way. way = api_instance.WayCreate(way); // close the changeset. api_instance.ChangeSetClose(); // check if the id now has a value. Assert.IsTrue(way.Id.HasValue); // get the new way id. long way_id = way.Id.Value; // get the way again: a way can only be deleted using the correct changesetid and version. way = api_instance.WayGet(way.Id.Value); // open new changeset. changeset_id = api_instance.ChangeSetOpen("Simple Way Delete Test"); // get the way. api_instance.WayDelete(way); // close the current changeset. api_instance.ChangeSetClose(); // get the way. SimpleWay api_way = api_instance.WayGet(way.Id.Value); Assert.IsNull(api_way); }
public void APITestWayCreateGetUpdate() { // intialize the connection. APIConnection api_instance = new APIConnection("http://api06.dev.openstreetmap.org/", "osmsharp", "osmsharp"); // open a changeset. long changeset_id = api_instance.ChangeSetOpen("Simple Way Creation Test"); // initialize the way. SimpleWay way = new SimpleWay(); way.Tags = new Dictionary<string, string>(); way.Tags.Add("type", "testway"); way.Nodes = new List<long>(); way.Visible = true; // initialize the nodes. SimpleNode node = new SimpleNode(); node.Latitude = -0.494497; node.Longitude = -24.119325; node.Tags = new Dictionary<string, string>(); node.Tags.Add("type", "testnode1"); node.Visible = true; node = api_instance.NodeCreate(node); way.Nodes.Add(node.Id.Value); node = new SimpleNode(); node.Latitude = -0.494497 + 0.0001f; node.Longitude = -24.119325 + 0.0001f; node.Tags = new Dictionary<string, string>(); node.Tags.Add("type", "testnode2"); node.Visible = true; node = api_instance.NodeCreate(node); way.Nodes.Add(node.Id.Value); // save the way. way = api_instance.WayCreate(way); // close the changeset. api_instance.ChangeSetClose(); // check if the id now has a value. Assert.IsTrue(way.Id.HasValue); // get the new way id. long way_id = way.Id.Value; // open new changeset. changeset_id = api_instance.ChangeSetOpen("Simple Way Update Test"); // get the way. SimpleWay api_way = api_instance.WayGet(way.Id.Value); api_way.Tags.Add("another_tag", "test adding a tag!"); api_instance.WayUpdate(api_way); // close the current changeset. api_instance.ChangeSetClose(); // get the api way. api_way = api_instance.WayGet(way.Id.Value); Assert.AreEqual(2, api_way.Tags.Count); Assert.IsTrue(api_way.Tags.ContainsKey("another_tag")); Assert.AreEqual("test adding a tag!", api_way.Tags["another_tag"]); }
/// <summary> /// Adds a node to the target. /// </summary> /// <param name="node"></param> public abstract void AddNode(SimpleNode node);
/// <summary> /// Adds a node to this database. /// </summary> /// <param name="node"></param> public override void AddNode(SimpleNode node) { _cached_nodes[node.Id.Value] = node; }