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() }); }