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++; }
private void AddTag(OsmTag tag) { var key = $"{tag.Key} ### {tag.Value}"; if (!tagValuesStat.TryGetValue(key, out var count)) { count = 0; } count++; tagValuesStat[key] = count; }
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); }