Ejemplo n.º 1
0
        private void AddTag(OsmTag tag, RelationMemberTypes type, long id)
        {
            var valueId = 0UL;

            var reference = new Reference(type, (ulong)id);

            if (!values.TryGetValue(tag.Value, out var valueInfo))
            {
                valueId         = ++lastId;
                valueInfo.Id    = valueId;
                valueInfo.Value = tag.Value;
                valueInfo.Refs  = new List <Reference> {
                    reference
                };

                values.Add(tag.Value, valueInfo);

                dataSize += (ulong)tag.Value.Length * 8 + 512;
            }
            else
            {
                valueId = valueInfo.Id;
                valueInfo.Refs.Add(reference);
            }

            dataSize += 24;

            if (!keys.TryGetValue(tag.Key, out var keyInfo))
            {
                keyInfo.Id     = ++lastId;
                keyInfo.Key    = tag.Key;
                keyInfo.Values = new Dictionary <ulong, List <Reference> > {
                    { valueId, new List <Reference> {
                          reference
                      } }
                };
                keys.Add(tag.Key, keyInfo);
                dataSize += (ulong)tag.Key.Length * 8 + 1024;
            }
            else
            {
                if (keyInfo.Values.TryGetValue(valueId, out var valueRefs))
                {
                    valueRefs.Add(reference);
                }
                else
                {
                    keyInfo.Values.Add(valueId, new List <Reference> {
                        reference
                    });
                    dataSize += 128;
                }
            }

            dataSize += 24;
            valuesCount++;
        }
Ejemplo n.º 2
0
 public Reference(RelationMemberTypes type, ulong id)
 {
     RefId = (id << 2) | (ulong)type;
 }