private void WriteTags(IOSMElement element, List <byte> bytes) { if (element.Tags.Count == 0) { return; } foreach (string tagKey in element.Tags) { var tagKeyBytes = Encoding.UTF8.GetBytes(tagKey); var tagValueBytes = Encoding.UTF8.GetBytes(element.Tags[tagKey]); var elementPosition = this._storedStringPairs.GetElementPosition(tagKeyBytes, tagValueBytes); if (elementPosition != -1) { var positionBytes = VarintBitConverter.GetVarintBytes((uint)elementPosition); bytes.AddRange(positionBytes); } else { var stringPair = new KeyValuePair <byte[], byte[]>(tagKeyBytes, tagValueBytes); bytes.Add(0x00); bytes.AddRange(tagKeyBytes); bytes.Add(0x00); bytes.AddRange(tagValueBytes); bytes.Add(0x00); if (stringPair.Key.Length + stringPair.Value.Length <= 250) { this._storedStringPairs.Insert(0, stringPair); } } } }
private void WriteVersionData(IOSMElement element, List <byte> bytes) { if (element.Version == 0) { bytes.Add(0x00); return; } var versionBytes = VarintBitConverter.GetVarintBytes(element.Version); bytes.AddRange(versionBytes); var timestamp = (long)element.Timestamp.Subtract(UNIX_START).TotalSeconds; var timestampDiff = timestamp - this._lastTimestamp; var timestampBytes = VarintBitConverter.GetVarintBytes(timestampDiff); this._lastTimestamp = timestamp; bytes.AddRange(timestampBytes); if (timestamp == 0) { return; } var changesetDiff = (long)element.Changeset - this._lastChangeset; var changesetBytes = VarintBitConverter.GetVarintBytes(changesetDiff); this._lastChangeset = (long)element.Changeset; bytes.AddRange(changesetBytes); var uidBytes = VarintBitConverter.GetVarintBytes(element.UserId); if (element.UserId == 0) { uidBytes = new byte[0]; } var userBytes = Encoding.UTF8.GetBytes(element.UserName); var elementPosition = this._storedStringPairs.GetElementPosition(uidBytes, userBytes); if (elementPosition != -1) { var positionBytes = VarintBitConverter.GetVarintBytes((uint)elementPosition); bytes.AddRange(positionBytes); } else { bytes.Add(0x00); bytes.AddRange(uidBytes); bytes.Add(0x00); bytes.AddRange(userBytes); bytes.Add(0x00); var uidUserPair = new KeyValuePair <byte[], byte[]>(uidBytes, userBytes); if (uidUserPair.Key.Length + uidUserPair.Value.Length <= 250) { this._storedStringPairs.Insert(0, uidUserPair); } } }
/// <summary> /// Writes the element. /// </summary> /// <param name="element">Element.</param> public void WriteElement(IOSMElement element) { if (element is OSMNode) { this.WriteNode((OSMNode)element); } else if (element is OSMWay) { this.WriteWay((OSMWay)element); } else if (element is OSMRelation) { this.WriteRelation((OSMRelation)element); } }
/// <summary> /// Writes the element. /// </summary> /// <param name="element">Element.</param> /// <param name="writtenData">Written data.</param> public void WriteElement(IOSMElement element, out byte[] writtenData) { writtenData = null; if (element is OSMNode) { this.WriteNode((OSMNode)element, out writtenData); } else if (element is OSMWay) { this.WriteWay((OSMWay)element, out writtenData); } else if (element is OSMRelation) { this.WriteRelation((OSMRelation)element, out writtenData); } }