public void MapCoordinates(osmNode node) { Vector2 pos = Vector2.zero; GetPos(node.lon, node.lat, ref pos); }
public osm ExportData(string generator) { osm osmData = new osm(); osmData.Version = "0.6"; osmData.Upload = false; if (String.IsNullOrEmpty(generator)) { osmData.Generator = "OsmUtils"; } else { osmData.Generator = generator; } osmData.Node = new List <osmNode> (); osmData.Way = new List <osmWay> (); osmData.Relation = new List <osmRelation> (); foreach (OsmNode node in nodes.Values) { osmNode exportedNode = new osmNode(); exportedNode.Id = node.ObjectId; exportedNode.Lat = node.Latitude; exportedNode.Lon = node.Longitude; exportedNode.Timestamp = node.Timestamp.ToString("o", CultureInfo.InvariantCulture); exportedNode.User = node.User.Name; exportedNode.Uid = node.User.Id; exportedNode.Visible = node.Visible; exportedNode.Action = FormatOsmObjectAction(node.Action); exportedNode.Version = 1; exportedNode.Changeset = node.ChangesetId; // Do explicity set the Lat- / LonSpecified properties. // Otherwise the lat / lon XML attributes would not get written, if the node has // a latitude or longitude of exactly 0°. exportedNode.LatSpecified = true; exportedNode.LonSpecified = true; exportedNode.Tag = new List <tag> (); foreach (OsmTag tag in node.EnumerateTags()) { exportedNode.Tag.Add(new tag(tag.Key, tag.Value)); } osmData.Node.Add(exportedNode); } foreach (OsmWay way in ways.Values) { osmWay exportedWay = new osmWay(); exportedWay.Id = way.ObjectId; exportedWay.Timestamp = way.Timestamp.ToString("o", CultureInfo.InvariantCulture); exportedWay.User = way.User.Name; exportedWay.Uid = way.User.Id; exportedWay.Visible = way.Visible; exportedWay.Action = FormatOsmObjectAction(way.Action); exportedWay.Version = 1; exportedWay.Changeset = way.ChangesetId; exportedWay.Nd = new List <osmWayND> (); foreach (long nodeId in way.EnumerateNodesIds()) { osmWayND wayNode = new osmWayND(); wayNode.Ref = nodeId; exportedWay.Nd.Add(wayNode); } exportedWay.Tag = new List <tag> (); foreach (OsmTag tag in way.EnumerateTags()) { exportedWay.Tag.Add(new tag(tag.Key, tag.Value)); } osmData.Way.Add(exportedWay); } foreach (OsmRelation relation in relations.Values) { osmRelation exportedRelation = new osmRelation(); exportedRelation.Id = relation.ObjectId; exportedRelation.Timestamp = relation.Timestamp.ToString("o", CultureInfo.InvariantCulture); exportedRelation.User = relation.User.Name; exportedRelation.Uid = relation.User.Id; exportedRelation.Visible = relation.Visible; exportedRelation.Action = FormatOsmObjectAction(relation.Action); exportedRelation.Version = 1; exportedRelation.Changeset = relation.ChangesetId; exportedRelation.Member = new List <osmRelationMember> (); foreach (OsmRelationMember member in relation.EnumerateMembers()) { osmRelationMember exportedMember = new osmRelationMember(); exportedMember.Type = FormatOsmReferenceType(member.MemberReference.ReferenceType); exportedMember.Ref = member.MemberReference.ReferenceId; exportedMember.Role = member.Role; exportedRelation.Member.Add(exportedMember); } exportedRelation.Tag = new List <tag> (); foreach (OsmTag tag in relation.EnumerateTags()) { exportedRelation.Tag.Add(new tag(tag.Key, tag.Value)); } osmData.Relation.Add(exportedRelation); } return(osmData); }
public override void ProcessIsohypse(Isohypse isohypse, NextIdCallback nodeCallback, NextIdCallback wayCallback) { if (writer == null) { throw new InvalidOperationException("The Begin method must be called before calling ProcessIsohypse."); } if (isohypse == null) { throw new ArgumentNullException("isohypse"); } foreach (Polyline polyline in isohypse.Segments) { OsmUtils.OsmSchema.osmWay way = new osmWay(); settings.ContourMarker.MarkContour(way, isohypse); way.Id = wayCallback(); way.Nd = new List <osmWayND> (); way.Timestamp = DateTime.UtcNow.ToString("o", System.Globalization.CultureInfo.InvariantCulture); way.Version = 1; way.User = settings.UserName; way.Uid = settings.UserId; way.Changeset = settings.ChangesetId; long firstWayNodeId = 0; for (int i = 0; i < polyline.Vertices.Count; i++) { Point3 <double> point = polyline.Vertices[i]; OsmUtils.OsmSchema.osmNode node = new osmNode(); node.Id = nodeCallback(); node.Lat = point.Y + settings.LatitudeCorrection; node.Lon = point.X + settings.LongitudeCorrection; node.Timestamp = DateTime.UtcNow.ToString("o", System.Globalization.CultureInfo.InvariantCulture); node.Version = 1; node.User = settings.UserName; node.Uid = settings.UserId; node.Changeset = settings.ChangesetId; // Do explicity set the Lat- / LonSpecified properties. // Otherwise the lat / lon XML attributes would not get written, if the node has // a latitude or longitude of exactly 0°. node.LatSpecified = true; node.LonSpecified = true; if (i == 0) { firstWayNodeId = node.Id; } nodeSerializer.Serialize(writer, node, ns); way.Nd.Add(new osmWayND(node.Id, true)); // Split the way if the maximum node count per way is reached. if (way.Nd.Count == settings.MaxWayNodes && polyline.VerticesCount > settings.MaxWayNodes) { // Don't create a new way if already at the end of the *unclosed* polyline if (i == polyline.VerticesCount - 1 && !polyline.IsClosed) { continue; } // first, serialize old way waySerializer.Serialize(writer, way, ns); way = new osmWay(); way.Id = wayCallback(); way.Nd = new List <osmWayND> (); way.Timestamp = DateTime.UtcNow.ToString("o", System.Globalization.CultureInfo.InvariantCulture); way.Version = 1; way.User = settings.UserName; way.Uid = settings.UserId; way.Changeset = settings.ChangesetId; settings.ContourMarker.MarkContour(way, isohypse); way.Nd.Add(new osmWayND(node.Id, true)); } } // if the isohypse segment is closed, add the first node as the final node of the way if (polyline.IsClosed) { way.Nd.Add(new osmWayND(firstWayNodeId, true)); } waySerializer.Serialize(writer, way, ns); } }
void ParseXml(XmlDocument xmlDoc) { XmlNode mainNode = xmlDoc.SelectSingleNode("osm"); var nodes = mainNode.SelectNodes("node"); if (allNodes == null) { allNodes = new Dictionary<long, osmNode>(nodes.Count); } for (int i = 0; i < nodes.Count; i++) { var lat = nodes[i].Attributes["lat"].Value; var lon = nodes[i].Attributes["lon"].Value; var id = nodes[i].Attributes["id"].Value; var node = new osmNode {id = long.Parse(id), Latitude = double.Parse(lat), Longitude = double.Parse(lon)}; node.Position = GeoHelper.WorldToTilePos(node.Longitude, node.Latitude); if (!allNodes.ContainsKey(node.id)) { allNodes.Add(node.id, node); } } var ways = mainNode.SelectNodes("way"); if (allWays == null) { allWays = new Dictionary<long, osmWay>(ways.Count); } foreach (XmlNode way in ways) { long id = long.Parse(way.Attributes["id"].Value); var refNodes = way.SelectNodes("nd"); long[] refs = new long[0]; if (refNodes != null) { refs = new long[refNodes.Count]; for (int i = 0; i < refNodes.Count; i++) { refs[i] = long.Parse(refNodes[i].Attributes["ref"].Value); } } float minX = float.MaxValue; float minY = float.MaxValue; float maxX = float.MinValue; float maxY = float.MinValue; foreach (var reff in refs) { osmNode nd; if (allNodes.TryGetValue(reff, out nd)) { var p = nd.Position; if (p.X < minX) minX = p.X; if (p.Y < minY) minY = p.Y; if (p.X > maxX) maxX = p.X; if (p.Y > maxY) maxY = p.Y; } } var bbox = new BoundingBox(new Vector3(minX, minY, -1.0f), new Vector3(maxX, maxY, 1.0f)); osmWay osmWay = new osmWay { id = id, nodeRef = refs, BBox = bbox }; var tags = way.SelectNodes("tag"); if (tags != null) { foreach (XmlNode tag in tags) { var key = tag.Attributes["k"].Value; var val = tag.Attributes["v"].Value; if (key == "building" || key == "building:levels") { osmWay.isBuilding = true; } if (key == "highway") { osmWay.isHighway = true; } } } if (!allWays.ContainsKey(id)) { allWays.Add(id, osmWay); } } var relations = mainNode.SelectNodes("relation"); if (allRelations == null) { allRelations = new Dictionary<long, osmRelation>(); } foreach (XmlNode rel in relations) { long id = long.Parse(rel.Attributes["id"].Value); var refMembers = rel.SelectNodes("member"); var members = new RelationMember[0]; if (refMembers != null) { members = new RelationMember[refMembers.Count]; for (int i = 0; i < refMembers.Count; i++) { var rm = refMembers[i]; var type = rm.Attributes["type"].Value; MemberType mType = MemberType.Way; if (type == "node") mType = MemberType.Node; long refff = long.Parse(rm.Attributes["ref"].Value); MemberRole mRole = MemberRole.None; var role = rm.Attributes["role"].Value; if (role == "inner") mRole = MemberRole.Inner; if (role == "outer") mRole = MemberRole.Outer; members[i] = new RelationMember {Ref = refff, Role = mRole, Type = mType}; } } var refTags = rel.SelectNodes("tag"); Dictionary<string, string> tags = new Dictionary<string, string>(); if (refTags != null) { foreach (XmlNode tag in refTags) { var key = tag.Attributes["k"].Value; var val = tag.Attributes["v"].Value; tags.Add(key, val); } } if (!allRelations.ContainsKey(id)) { allRelations.Add(id, new osmRelation {Id = id, Members = members, Tags = tags}); } } }
public Node(osmNode dirtyNote) { Id = UInt64.Parse(dirtyNote.id); Latitude = Decimal.Parse(dirtyNote.lat); Longitude = Decimal.Parse(dirtyNote.lon); }
void ParseXml(XmlDocument xmlDoc) { XmlNode mainNode = xmlDoc.SelectSingleNode("osm"); var nodes = mainNode.SelectNodes("node"); if (allNodes == null) { allNodes = new Dictionary <long, osmNode>(nodes.Count); } for (int i = 0; i < nodes.Count; i++) { var lat = nodes[i].Attributes["lat"].Value; var lon = nodes[i].Attributes["lon"].Value; var id = nodes[i].Attributes["id"].Value; var node = new osmNode { id = long.Parse(id), Latitude = double.Parse(lat), Longitude = double.Parse(lon) }; node.Position = GeoHelper.WorldToTilePos(node.Longitude, node.Latitude); if (!allNodes.ContainsKey(node.id)) { allNodes.Add(node.id, node); } } var ways = mainNode.SelectNodes("way"); if (allWays == null) { allWays = new Dictionary <long, osmWay>(ways.Count); } foreach (XmlNode way in ways) { long id = long.Parse(way.Attributes["id"].Value); var refNodes = way.SelectNodes("nd"); long[] refs = new long[0]; if (refNodes != null) { refs = new long[refNodes.Count]; for (int i = 0; i < refNodes.Count; i++) { refs[i] = long.Parse(refNodes[i].Attributes["ref"].Value); } } float minX = float.MaxValue; float minY = float.MaxValue; float maxX = float.MinValue; float maxY = float.MinValue; foreach (var reff in refs) { osmNode nd; if (allNodes.TryGetValue(reff, out nd)) { var p = nd.Position; if (p.X < minX) { minX = p.X; } if (p.Y < minY) { minY = p.Y; } if (p.X > maxX) { maxX = p.X; } if (p.Y > maxY) { maxY = p.Y; } } } var bbox = new BoundingBox(new Vector3(minX, minY, -1.0f), new Vector3(maxX, maxY, 1.0f)); osmWay osmWay = new osmWay { id = id, nodeRef = refs, BBox = bbox }; var tags = way.SelectNodes("tag"); if (tags != null) { foreach (XmlNode tag in tags) { var key = tag.Attributes["k"].Value; var val = tag.Attributes["v"].Value; if (key == "building" || key == "building:levels") { osmWay.isBuilding = true; } if (key == "highway") { osmWay.isHighway = true; } } } if (!allWays.ContainsKey(id)) { allWays.Add(id, osmWay); } } var relations = mainNode.SelectNodes("relation"); if (allRelations == null) { allRelations = new Dictionary <long, osmRelation>(); } foreach (XmlNode rel in relations) { long id = long.Parse(rel.Attributes["id"].Value); var refMembers = rel.SelectNodes("member"); var members = new RelationMember[0]; if (refMembers != null) { members = new RelationMember[refMembers.Count]; for (int i = 0; i < refMembers.Count; i++) { var rm = refMembers[i]; var type = rm.Attributes["type"].Value; MemberType mType = MemberType.Way; if (type == "node") { mType = MemberType.Node; } long refff = long.Parse(rm.Attributes["ref"].Value); MemberRole mRole = MemberRole.None; var role = rm.Attributes["role"].Value; if (role == "inner") { mRole = MemberRole.Inner; } if (role == "outer") { mRole = MemberRole.Outer; } members[i] = new RelationMember { Ref = refff, Role = mRole, Type = mType }; } } var refTags = rel.SelectNodes("tag"); Dictionary <string, string> tags = new Dictionary <string, string>(); if (refTags != null) { foreach (XmlNode tag in refTags) { var key = tag.Attributes["k"].Value; var val = tag.Attributes["v"].Value; tags.Add(key, val); } } if (!allRelations.ContainsKey(id)) { allRelations.Add(id, new osmRelation { Id = id, Members = members, Tags = tags }); } } }