コード例 #1
0
ファイル: O5MWriter.cs プロジェクト: ringostarr80/O5M.NET
        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);
                    }
                }
            }
        }
コード例 #2
0
ファイル: O5MWriter.cs プロジェクト: ringostarr80/O5M.NET
        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);
                }
            }
        }
コード例 #3
0
ファイル: O5MWriter.cs プロジェクト: ringostarr80/O5M.NET
 /// <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);
     }
 }
コード例 #4
0
ファイル: O5MWriter.cs プロジェクト: ringostarr80/O5M.NET
 /// <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);
     }
 }