Пример #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++;
        }
Пример #2
0
        private void AddTag(OsmTag tag)
        {
            var key = $"{tag.Key} ### {tag.Value}";

            if (!tagValuesStat.TryGetValue(key, out var count))
            {
                count = 0;
            }

            count++;
            tagValuesStat[key] = count;
        }
Пример #3
0
        private static IReadOnlyList <OsmTag> DecodeTags(long[] keys, long[] values, string[] strings)
        {
            if ((keys == null || keys.Length == 0) && (values == null || values.Length == 0))
            {
                return(Array.Empty <OsmTag>());
            }

            if (strings == null && (keys != null && keys.Any() || values != null && values.Any()))
            {
                throw new InvalidOperationException("Can't decode tags! Strings are missing.");
            }


            if (values == null)
            {
                throw new InvalidOperationException("Can't decode tags. Values are missing.");
            }

            if (keys == null)
            {
                throw new InvalidOperationException("Can't decode tags. keys are missing.");
            }

            var results = new OsmTag[keys.Length];

            for (var i = 0; i < results.Length; i++)
            {
                var key   = strings[keys[i]];
                var value = strings[values[i]];

                results[i] = new OsmTag
                {
                    Key   = key,
                    Value = value
                };
            }

            return(results);
        }