Changeset 23887 in osm for applications/editors


Ignore:
Timestamp:
2010-10-27T23:34:30+02:00 (15 years ago)
Author:
oliverw
Message:

Remember visited nodes and ways.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified applications/editors/josm/plugins/AddressEdit/src/org/openstreetmap/josm/plugins/addressEdit/AddressEditContainer.java

    r23884 r23887  
    6464        private List<AddressNode> incompleteAddresses = new ArrayList<AddressNode>(100);
    6565       
     66        private HashSet<Node> visitedNodes = new HashSet<Node>();
     67        private HashSet<Way> visitedWays = new HashSet<Way>();
    6668        private HashSet<String> tags = new HashSet<String>();
    6769       
     
    100102        }
    101103       
     104        private void markNodeAsVisited(Node n) {
     105                visitedNodes.add(n);
     106        }
     107       
     108        private boolean hasBeenVisited(Node n) {
     109                return visitedNodes.contains(n);
     110        }
     111       
     112        private void markWayAsVisited(Way w) {
     113                visitedWays.add(w);
     114        }
     115       
     116        private boolean hasBeenVisited(Way w) {
     117                return visitedWays.contains(w);
     118        }
     119       
    102120        /* (non-Javadoc)
    103121         * @see org.openstreetmap.josm.data.osm.visitor.Visitor#visit(org.openstreetmap.josm.data.osm.Node)
     
    105123        @Override
    106124        public void visit(Node n) {
     125                if (hasBeenVisited(n)) {
     126                        return;
     127                }
     128               
    107129                AddressNode aNode = NodeFactory.createNode(n);
    108130               
    109                 if (aNode == null) return;
    110                
    111                 if (!assignAddressToStreet(aNode)) {
    112                         // Assignment failed: Street is not known (yet) -> add to 'unresolved' list
    113                         unresolvedAddresses.add(aNode);
    114                 }
    115                
    116                 if (!aNode.isComplete()) {
    117                         incompleteAddresses.add(aNode);
    118                 }
     131                if (aNode != null) {
     132                        if (!assignAddressToStreet(aNode)) {
     133                                // Assignment failed: Street is not known (yet) -> add to 'unresolved' list
     134                                unresolvedAddresses.add(aNode);
     135                        }
     136
     137                        if (!aNode.isComplete()) {
     138                                incompleteAddresses.add(aNode);
     139                        }
     140                } else {
     141                        // check, if node is referred by a way
     142                        for (OsmPrimitive osm : n.getReferrers()) {
     143                                if (osm instanceof Way) {
     144                                        Way w = (Way) osm;
     145                                        if (!hasBeenVisited(w)) {
     146                                                createNodeFromWay(w);
     147                                        }
     148                                }
     149                        }
     150                       
     151                }
     152                markNodeAsVisited(n);
    119153        }
    120154       
     
    124158        @Override
    125159        public void visit(Way w) {
    126                 if (w.isIncomplete()) return;
    127                
     160                // This doesn't matter, we just need the street name
     161                //if (w.isIncomplete()) return;
     162               
     163                createNodeFromWay(w);
     164                /*
     165        for (Node n : w.getNodes()) {
     166           
     167        }*/
     168        }
     169
     170        private void createNodeFromWay(Way w) {
    128171                StreetSegmentNode newSegment = NodeFactory.createNodeFromWay(w);
    129172               
     
    149192                }
    150193               
     194                markWayAsVisited(w);
     195               
     196                // Look also into nodes for addresses (unlikely, but at least they
     197                // get marked as visited).
     198                for (Node n : w.getNodes()) {
     199                        visit(n);
     200                }
     201               
    151202                for (String key : w.keySet()) {
    152203                        if (!tags.contains(key)) {
     
    154205                        }
    155206                }
    156                 /*
    157         for (Node n : w.getNodes()) {
    158            
    159         }*/
    160207        }
    161208
     
    289336                unresolvedAddresses.clear();
    290337                incompleteAddresses.clear();
     338                visitedNodes.clear();
     339                visitedWays.clear();
    291340        }
    292341       
Note: See TracChangeset for help on using the changeset viewer.