Пример #1
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);
        }
Пример #2
0
        public static Way EncodeWay(PrimitiveBlock block, Dictionary <string, int> reverseStringTable, OsmSharp.Osm.Way way)
        {
            Way way1 = new Way();

            way1.id   = way.Id.Value;
            way1.info = new Info();
            long?nullable;

            if (way.ChangeSetId.HasValue)
            {
                Info info = way1.info;
                nullable = way.ChangeSetId;
                long num = nullable.Value;
                info.changeset = num;
            }
            if (way.TimeStamp.HasValue)
            {
                way1.info.timestamp = Encoder.EncodeTimestamp(way.TimeStamp.Value, (long)block.date_granularity);
            }
            nullable = way.UserId;
            if (nullable.HasValue)
            {
                Info info = way1.info;
                nullable = way.UserId;
                int num = (int)nullable.Value;
                info.uid = num;
            }
            way1.info.user_sid = Encoder.EncodeString(block, reverseStringTable, way.UserName);
            way1.info.version  = 0;
            if (way.Version.HasValue)
            {
                way1.info.version = (int)way.Version.Value;
            }
            if (way.Tags != null)
            {
                foreach (Tag tag in way.Tags)
                {
                    way1.keys.Add((uint)Encoder.EncodeString(block, reverseStringTable, tag.Key));
                    way1.vals.Add((uint)Encoder.EncodeString(block, reverseStringTable, tag.Value));
                }
            }
            if (way.Nodes != null && way.Nodes.Count > 0)
            {
                way1.refs.Add(way.Nodes[0]);
                for (int index = 1; index < way.Nodes.Count; ++index)
                {
                    way1.refs.Add(way.Nodes[index] - way.Nodes[index - 1]);
                }
            }
            return(way1);
        }
Пример #3
0
        public static Node EncodeNode(PrimitiveBlock block, Dictionary <string, int> reverseStringTable, Node pbfNode, OsmSharp.Osm.Node node)
        {
            pbfNode.id             = node.Id.Value;
            pbfNode.info           = new Info();
            pbfNode.info.version   = 0;
            pbfNode.info.changeset = !node.ChangeSetId.HasValue ? 0L : node.ChangeSetId.Value;
            DateTime?timeStamp = node.TimeStamp;

            if (timeStamp.HasValue)
            {
                Info info = pbfNode.info;
                timeStamp = node.TimeStamp;
                int num = Encoder.EncodeTimestamp(timeStamp.Value, (long)block.date_granularity);
                info.timestamp = num;
            }
            else
            {
                pbfNode.info.timestamp = 0;
            }
            long?userId = node.UserId;

            if (userId.HasValue)
            {
                Info info = pbfNode.info;
                userId = node.UserId;
                int num = (int)userId.Value;
                info.uid = num;
            }
            else
            {
                pbfNode.info.uid = 0;
            }
            pbfNode.info.user_sid = Encoder.EncodeString(block, reverseStringTable, node.UserName);
            pbfNode.info.version  = !node.Version.HasValue ? 0 : (int)node.Version.Value;
            pbfNode.lat           = Encoder.EncodeLatLon(node.Latitude.Value, block.lat_offset, (long)block.granularity);
            pbfNode.lon           = Encoder.EncodeLatLon(node.Longitude.Value, block.lon_offset, (long)block.granularity);
            if (node.Tags != null)
            {
                foreach (Tag 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);
        }
Пример #4
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);
        }
Пример #5
0
        /// <summary>
        /// Encodes an OsmSharp-relation into a PBF-relation.
        /// </summary>
        /// <returns></returns>
        public static OsmSharp.Osm.PBF.Relation EncodeRelation(PrimitiveBlock block, Dictionary <string, int> reverseStringTable, Osm.Relation relation)
        {
            var pbfRelation = new OsmSharp.Osm.PBF.Relation();

            pbfRelation.id   = relation.Id.Value;
            pbfRelation.info = new Info();
            if (relation.ChangeSetId.HasValue)
            {
                pbfRelation.info.changeset = relation.ChangeSetId.Value;
            }
            if (relation.TimeStamp.HasValue)
            {
                pbfRelation.info.timestamp = Encoder.EncodeTimestamp(relation.TimeStamp.Value, block.date_granularity);
            }
            if (relation.UserId.HasValue)
            {
                pbfRelation.info.uid = (int)relation.UserId.Value;
            }
            pbfRelation.info.user_sid = Encoder.EncodeString(block, reverseStringTable, relation.UserName);
            pbfRelation.info.version  = 0;
            if (relation.Version.HasValue)
            {
                pbfRelation.info.version = (int)relation.Version.Value;
            }

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

            if (relation.Members != null &&
                relation.Members.Count > 0)
            {
                pbfRelation.memids.Add(relation.Members[0].MemberId.Value);
                pbfRelation.roles_sid.Add(Encoder.EncodeString(block, reverseStringTable, relation.Members[0].MemberRole));
                switch (relation.Members[0].MemberType.Value)
                {
                case OsmGeoType.Node:
                    pbfRelation.types.Add(Relation.MemberType.NODE);
                    break;

                case OsmGeoType.Way:
                    pbfRelation.types.Add(Relation.MemberType.WAY);
                    break;

                case OsmGeoType.Relation:
                    pbfRelation.types.Add(Relation.MemberType.RELATION);
                    break;
                }
                for (var i = 1; i < relation.Members.Count; i++)
                {
                    pbfRelation.memids.Add(relation.Members[i].MemberId.Value -
                                           relation.Members[i - 1].MemberId.Value);
                    pbfRelation.roles_sid.Add(Encoder.EncodeString(block, reverseStringTable, relation.Members[i].MemberRole));
                    switch (relation.Members[i].MemberType.Value)
                    {
                    case OsmGeoType.Node:
                        pbfRelation.types.Add(Relation.MemberType.NODE);
                        break;

                    case OsmGeoType.Way:
                        pbfRelation.types.Add(Relation.MemberType.WAY);
                        break;

                    case OsmGeoType.Relation:
                        pbfRelation.types.Add(Relation.MemberType.RELATION);
                        break;
                    }
                }
            }
            return(pbfRelation);
        }
Пример #6
0
        public static Relation EncodeRelation(PrimitiveBlock block, Dictionary <string, int> reverseStringTable, OsmSharp.Osm.Relation relation)
        {
            Relation relation1 = new Relation();

            relation1.id   = relation.Id.Value;
            relation1.info = new Info();
            long?nullable;

            if (relation.ChangeSetId.HasValue)
            {
                Info info = relation1.info;
                nullable = relation.ChangeSetId;
                long num = nullable.Value;
                info.changeset = num;
            }
            if (relation.TimeStamp.HasValue)
            {
                relation1.info.timestamp = Encoder.EncodeTimestamp(relation.TimeStamp.Value, (long)block.date_granularity);
            }
            nullable = relation.UserId;
            if (nullable.HasValue)
            {
                Info info = relation1.info;
                nullable = relation.UserId;
                int num = (int)nullable.Value;
                info.uid = num;
            }
            relation1.info.user_sid = Encoder.EncodeString(block, reverseStringTable, relation.UserName);
            relation1.info.version  = 0;
            if (relation.Version.HasValue)
            {
                relation1.info.version = (int)relation.Version.Value;
            }
            if (relation.Tags != null)
            {
                foreach (Tag tag in relation.Tags)
                {
                    relation1.keys.Add((uint)Encoder.EncodeString(block, reverseStringTable, tag.Key));
                    relation1.vals.Add((uint)Encoder.EncodeString(block, reverseStringTable, tag.Value));
                }
            }
            if (relation.Members != null && relation.Members.Count > 0)
            {
                List <long> memids1 = relation1.memids;
                nullable = relation.Members[0].MemberId;
                long num1 = nullable.Value;
                memids1.Add(num1);
                relation1.roles_sid.Add(Encoder.EncodeString(block, reverseStringTable, relation.Members[0].MemberRole));
                OsmGeoType?memberType = relation.Members[0].MemberType;
                switch (memberType.Value)
                {
                case OsmGeoType.Node:
                    relation1.types.Add(Relation.MemberType.NODE);
                    break;

                case OsmGeoType.Way:
                    relation1.types.Add(Relation.MemberType.WAY);
                    break;

                case OsmGeoType.Relation:
                    relation1.types.Add(Relation.MemberType.RELATION);
                    break;
                }
                for (int index = 1; index < relation.Members.Count; ++index)
                {
                    List <long> memids2 = relation1.memids;
                    nullable = relation.Members[index].MemberId;
                    long num2 = nullable.Value;
                    nullable = relation.Members[index - 1].MemberId;
                    long num3 = nullable.Value;
                    long num4 = num2 - num3;
                    memids2.Add(num4);
                    relation1.roles_sid.Add(Encoder.EncodeString(block, reverseStringTable, relation.Members[index].MemberRole));
                    memberType = relation.Members[index].MemberType;
                    switch (memberType.Value)
                    {
                    case OsmGeoType.Node:
                        relation1.types.Add(Relation.MemberType.NODE);
                        break;

                    case OsmGeoType.Way:
                        relation1.types.Add(Relation.MemberType.WAY);
                        break;

                    case OsmGeoType.Relation:
                        relation1.types.Add(Relation.MemberType.RELATION);
                        break;
                    }
                }
            }
            return(relation1);
        }