/// <summary> /// Creates a new TDRelation from an osmosis entity using the given WayResolver. /// </summary> /// <param name="relation"> /// the relation </param> /// <param name="resolver"> /// the resolver </param> /// <param name="preferredLanguages"> /// the preferred(s) language or null if no preference </param> /// <returns> a new TDRelation if all members are valid and the relation is of a known type, null otherwise </returns> public static TDRelation fromRelation(Relation relation, WayResolver resolver, IList <string> preferredLanguages) { if (relation == null) { return(null); } if (relation.Members.Empty) { return(null); } SpecialTagExtractionResult ster = OSMUtils.extractSpecialFields(relation, preferredLanguages); short[] knownWayTags = OSMUtils.extractKnownWayTags(relation); // special tags // TODO what about the layer of relations? // TODO exclude boundaries if (!knownRelationType(ster.Type)) { return(null); } IList <RelationMember> members = relation.Members; IList <TDWay> wayMembers = new List <TDWay>(); foreach (RelationMember relationMember in members) { if (relationMember.MemberType != EntityType.Way) { continue; } TDWay member = resolver.getWay(relationMember.MemberId); if (member == null) { LOGGER.finest("relation is missing a member, rel-id: " + relation.Id + " member id: " + relationMember.MemberId); continue; } wayMembers.Add(member); } if (wayMembers.Count == 0) { LOGGER.finest("relation has no valid members: " + relation.Id); return(null); } return(new TDRelation(relation.Id, ster.Layer, ster.Name, ster.Housenumber, ster.Ref, knownWayTags, wayMembers.ToArray())); }
public override bool Equals(object obj) { if (this == obj) { return(true); } if (obj == null) { return(false); } if (this.GetType() != obj.GetType()) { return(false); } TDWay other = (TDWay)obj; if (this.id != other.id) { return(false); } return(true); }
/// <summary> /// Add a way to the tile. /// </summary> /// <param name="way"> /// the way </param> public abstract void addWay(TDWay way);