예제 #1
0
        protected override Node CreateNode(Track track, Segment segment, Osm.Node node, int x, int y)
        {
            Node n = new Node(track, segment, node)
            {
                MapX = x,
                MapY = y
            };

            if (!segment.Name.Equals(segment.Ref))
            {
                n.Name = $"{segment.Name} ({segment.Ref})";
            }

            n.Prefab = "Highway";

            if (segment.Lanes == 2)
            {
                n.Prefab = "Rural Highway";
            }

            if (segment.IsTunnel)
            {
                n.Prefab += " Tunnel";
            }

            if (segment.IsBridge)
            {
                n.Prefab += " Bridge";
            }

            return(n);
        }
예제 #2
0
        public override int Build()
        {
            Tracks.Clear();

            Track track = new Track(++trackId, Tracktype.Airline);

            Node node;

            Osm.Segment segment = new Osm.Segment();
            segment.Tags.Add("ref", "North/South connection");

            Osm.Node osmNode;

            segment.Id = 1;

            // make a track with segment size of 96 meter. (180 segments North/South)
            for (int y = -MapSize / 2; y <= MapSize / 2; y += 96)
            {
                osmNode     = new Osm.Node();
                osmNode.Lat = GeoTools.DistanceToLat(lat, y);
                osmNode.Lon = lon;

                node = CreateNode(track, segment, osmNode, 0, y);

                track.Nodes.Add(node);
            }

            Tracks.Add(track);

            return(0);
        }
예제 #3
0
 /// <summary>
 /// Adds a node.
 /// </summary>
 public override void AddNode(Osm.Node node)
 {
     _currentEntities.Add(node);
     if (_currentEntities.Count > 8000)
     {
         this.FlushBlock();
     }
 }
예제 #4
0
        public Node(Track track, Osm.Segment segment, Osm.Node node)
        {
            Track   = track;
            Segment = segment;
            OsmNode = node;

            Name = Segment.Name;
        }
예제 #5
0
 protected override Node CreateNode(Track track, Segment segment, Osm.Node node, int x, int y)
 {
     return(new Node(track, segment, node)
     {
         MapX = x,
         MapY = y,
         Elevation = -10,
         Width = 60
     });
 }
예제 #6
0
 protected override Node CreateNode(Track track, Segment segment, Osm.Node node, int x, int y)
 {
     return(new Node(track, segment, node)
     {
         MapX = x,
         MapY = y,
         Elevation = 1100,
         Prefab = "Airplane Path"
     });
 }
예제 #7
0
        /// <summary>
        /// Encodes an OsmSharp-node into a PBF-node.
        /// </summary>
        /// <returns></returns>
        public static OsmSharp.Osm.PBF.Node EncodeNode(PrimitiveBlock block, Dictionary <string, int> reverseStringTable,
                                                       OsmSharp.Osm.PBF.Node pbfNode, Osm.Node node)
        {
            pbfNode.id           = node.Id.Value;
            pbfNode.info         = new Info();
            pbfNode.info.version = 0;
            if (node.ChangeSetId.HasValue)
            {
                pbfNode.info.changeset = node.ChangeSetId.Value;
            }
            else
            {
                pbfNode.info.changeset = 0;
            }
            if (node.TimeStamp.HasValue)
            {
                pbfNode.info.timestamp = Encoder.EncodeTimestamp(node.TimeStamp.Value, block.date_granularity);
            }
            else
            {
                pbfNode.info.timestamp = 0;
            }
            if (node.UserId.HasValue)
            {
                pbfNode.info.uid = (int)node.UserId.Value;
            }
            else
            {
                pbfNode.info.uid = 0;
            }
            pbfNode.info.user_sid = Encoder.EncodeString(block, reverseStringTable, node.UserName);
            if (node.Version.HasValue)
            {
                pbfNode.info.version = (int)node.Version.Value;
            }
            else
            {
                pbfNode.info.version = 0;
            }
            pbfNode.lat = Encoder.EncodeLatLon(node.Latitude.Value, block.lat_offset, block.granularity);
            pbfNode.lon = Encoder.EncodeLatLon(node.Longitude.Value, block.lon_offset, block.granularity);

            if (node.Tags != null)
            {
                foreach (var tag in node.Tags)
                {
                    pbfNode.keys.Add((uint)Encoder.EncodeString(block, reverseStringTable, tag.Key));
                    pbfNode.vals.Add((uint)Encoder.EncodeString(block, reverseStringTable, tag.Value));
                }
            }
            else
            {
                pbfNode.keys.Clear();
                pbfNode.vals.Clear();
            }
            return(pbfNode);
        }
예제 #8
0
        /// <summary>
        /// Encodes an OsmSharp-node into a PBF-node.
        /// </summary>
        /// <returns></returns>
        public static OsmSharp.Osm.PBF.Node EncodeNode(PrimitiveBlock block, Dictionary <string, int> reverseStringTable, Osm.Node node)
        {
            var pbfNode = new OsmSharp.Osm.PBF.Node();

            Encoder.EncodeNode(block, reverseStringTable, pbfNode, node);
            return(pbfNode);
        }
예제 #9
0
 protected abstract Node CreateNode(Track track, Segment segment, Osm.Node node, int x, int y);