Ejemplo n.º 1
0
        /// <summary>
        /// Encodes an OsmSharp-way into a PBF-way.
        /// </summary>
        /// <returns></returns>
        public static OsmSharp.Osm.PBF.Way EncodeWay(PrimitiveBlock block, Dictionary<string, int> reverseStringTable, Osm.Way way)
        {
            var pbfWay = new OsmSharp.Osm.PBF.Way();
            pbfWay.id = way.Id.Value;
            pbfWay.info = new Info();
            if (way.ChangeSetId.HasValue) { pbfWay.info.changeset = way.ChangeSetId.Value; }
            if (way.TimeStamp.HasValue)
            {
                pbfWay.info.timestamp = Encoder.EncodeTimestamp(way.TimeStamp.Value, block.date_granularity);
            }
            if (way.UserId.HasValue) { pbfWay.info.uid = (int)way.UserId.Value; }
            pbfWay.info.user_sid = Encoder.EncodeString(block, reverseStringTable, way.UserName);
            pbfWay.info.version = 0;
            if (way.Version.HasValue) { pbfWay.info.version = (int)way.Version.Value; }

            if (way.Tags != null)
            {
                foreach (var tag in way.Tags)
                {
                    pbfWay.keys.Add((uint)Encoder.EncodeString(block, reverseStringTable, tag.Key));
                    pbfWay.vals.Add((uint)Encoder.EncodeString(block, reverseStringTable, tag.Value));
                }
            }

            if(way.Nodes != null &&
                way.Nodes.Count > 0)
            {
                pbfWay.refs.Add(way.Nodes[0]);
                for(var i = 1; i < way.Nodes.Count; i++)
                {
                    pbfWay.refs.Add(way.Nodes[i] - way.Nodes[i - 1]);
                }
            }
            return pbfWay;
        }