public void Add(OsmRelation relation, int typeId, IReadOnlyList <RelationItemInfo> itemInfos, BoundingRect rect)
        {
            if (relation == null)
            {
                throw new ArgumentNullException(nameof(relation));
            }
            if (itemInfos == null)
            {
                throw new ArgumentNullException(nameof(itemInfos));
            }
            if (rect == null)
            {
                throw new ArgumentNullException(nameof(rect));
            }

            startPositions.Add(new RelationLocation
            {
                Id     = relation.Id,
                Offset = stream.Position
            });

            idWriter.WriteIncrementOnly((ulong)relation.Id);
            writer.Write7BitEncodedInt((ulong)typeId);

            rect.WriteTo(writer);

            writer.Write7BitEncodedInt((ulong)relation.Items.Count);

            memberIdWriter.Reset();
            memberMidLatWriter.Reset();
            memberMidLonWriter.Reset();

            for (var index = 0; index < relation.Items.Count; index++)
            {
                var member = relation.Items[index];
                writer.Write((byte)member.MemberType);
                memberIdWriter.WriteZigZag(member.Id);
                writer.Write7BitEncodedInt(GetRoleId(member.Role));

                var info = itemInfos[index];
                memberMidLatWriter.WriteZigZag(info.MidLat);
                memberMidLonWriter.WriteZigZag(info.MidLon);
            }
        }
Esempio n. 2
0
        private void WriteWayData(SWay way)
        {
            idWriter.WriteIncrementOnly((ulong)way.Id);

            var nodes = way.Nodes;

            waysWriter.Write7BitEncodedInt((ulong)nodes.Count);

            nodeIdWriter.Reset();
            latWriter.Reset();
            lonWriter.Reset();

            foreach (var node in nodes)
            {
                nodeIdWriter.WriteZigZag(node.Id);
                latWriter.WriteZigZag(node.Lat);
                lonWriter.WriteZigZag(node.Lon);
            }
        }