Esempio n. 1
0
        // private static final byte ZOOM_NAME = (byte) 16;

        /// <summary>
        /// Constructs a new TDNode from a given osmosis node entity. Checks the validity of the entity.
        /// </summary>
        /// <param name="node">
        ///            the osmosis entity </param>
        /// <param name="preferredLanguages">
        ///            the preferred language(s) or null if no preference </param>
        /// <returns> a new TDNode </returns>
        public static TDNode fromNode(Node node, IList <string> preferredLanguages)
        {
            SpecialTagExtractionResult ster = OSMUtils.extractSpecialFields(node, preferredLanguages);

            short[] knownWayTags = OSMUtils.extractKnownPOITags(node);

            return(new TDNode(node.Id, LatLongUtils.degreesToMicrodegrees(node.Latitude), LatLongUtils.degreesToMicrodegrees(node.Longitude), ster.Elevation, ster.Layer, ster.Housenumber, ster.Name, knownWayTags));
        }
Esempio n. 2
0
        /// <summary>
        /// Creates a new TDWay from an osmosis way entity using the given NodeResolver.
        /// </summary>
        /// <param name="way">
        ///            the way </param>
        /// <param name="resolver">
        ///            the resolver </param>
        /// <param name="preferredLanguages">
        ///            the preferred language(s) or null if no preference </param>
        /// <returns> a new TDWay if it is valid, null otherwise </returns>
        public static TDWay fromWay(Way way, NodeResolver resolver, IList <string> preferredLanguages)
        {
            if (way == null)
            {
                return(null);
            }

            SpecialTagExtractionResult ster = OSMUtils.extractSpecialFields(way, preferredLanguages);

            short[] knownWayTags = OSMUtils.extractKnownWayTags(way);

            // only ways with at least 2 way nodes are valid ways
            if (way.WayNodes.size() >= 2)
            {
                bool validWay = true;
                // retrieve way nodes from data store
                TDNode[] waynodes = new TDNode[way.WayNodes.size()];
                int      i        = 0;
                foreach (WayNode waynode in way.WayNodes)
                {
                    // TODO adjust interface to support a method getWayNodes()
                    waynodes[i] = resolver.getNode(waynode.NodeId);
                    if (waynodes[i] == null)
                    {
                        validWay = false;
                        LOGGER.finer("unknown way node: " + waynode.NodeId + " in way " + way.Id);
                    }
                    i++;
                }

                // for a valid way all way nodes must be existent in the input data
                if (validWay)
                {
                    // mark the way as polygon if the first and the last way node are the same
                    // and if the way has at least 4 way nodes
                    sbyte shape = LINE;
                    if (waynodes[0].Id == waynodes[waynodes.Length - 1].Id)
                    {
                        if (waynodes.Length >= GeoUtils.MIN_NODES_POLYGON)
                        {
                            if (OSMUtils.isArea(way))
                            {
                                shape = SIMPLE_POLYGON;
                            }
                        }
                        else
                        {
                            LOGGER.finer("Found closed polygon with fewer than 4 way nodes. Way-id: " + way.Id);
                            return(null);
                        }
                    }

                    return(new TDWay(way.Id, ster.Layer, ster.Name, ster.Housenumber, ster.Ref, knownWayTags, shape, waynodes));
                }
            }

            return(null);
        }
Esempio n. 3
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()));
        }