示例#1
0
        /// <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()));
        }
示例#2
0
        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);
        }
示例#3
0
 /// <summary>
 /// Add a way to the tile.
 /// </summary>
 /// <param name="way">
 ///            the way </param>
 public abstract void addWay(TDWay way);