private osmWay AddBuilding(ushort buildingId, Building data)
        {
            int     width  = data.Width;
            int     length = data.Length;
            Vector3 a      = new Vector3(Mathf.Cos(data.m_angle), 0f, Mathf.Sin(data.m_angle)) * 8f;
            Vector3 a2     = new Vector3(a.z, 0f, -a.x);


            var tags = new List <osmWayTag>();

            string amenity = "";

            mapping.GetTags(buildingId, data, tags, ref amenity);

            wayCount += 1;
            if (tags.Count == 0)
            {
                return(null);
            }

            this.middle        += data.m_position;
            this.buildingCount += 1;

            osmWayND[] nd        = new osmWayND[5];
            var        firstNode = AddNode(data.m_position - (float)width * 0.5f * a - (float)length * 0.5f * a2);

            nd[0] = new osmWayND {
                @ref = firstNode
            };
            nd[1] = new osmWayND {
                @ref = AddNode(data.m_position + (float)width * 0.5f * a - (float)length * 0.5f * a2)
            };
            nd[2] = new osmWayND {
                @ref = AddNode(data.m_position + (float)width * 0.5f * a + (float)length * 0.5f * a2)
            };
            nd[3] = new osmWayND {
                @ref = AddNode(data.m_position - (float)width * 0.5f * a + (float)length * 0.5f * a2)
            };
            nd[4] = new osmWayND {
                @ref = firstNode
            };

            if (amenity != "")
            {
                var ammenityTag = new Dictionary <string, string>();
                ammenityTag.Add("amenity", amenity);
                AddNode(data.m_position, ammenityTag);
            }
            return(new osmWay {
                changeset = 50000000, id = (uint)wayCount, timestamp = DateTime.Now, user = "******", version = 1, nd = nd, tag = tags.ToArray()
            });
        }