Ticket #7314: get_relations_with_getAllNearest.patch

File get_relations_with_getAllNearest.patch, 1.8 KB (added by joshdoe, 14 years ago)

adds parent relations of nearest nodes and ways

  • src/org/openstreetmap/josm/gui/NavigatableComponent.java

     
    3535import org.openstreetmap.josm.data.osm.DataSet;
    3636import org.openstreetmap.josm.data.osm.Node;
    3737import org.openstreetmap.josm.data.osm.OsmPrimitive;
     38import org.openstreetmap.josm.data.osm.Relation;
    3839import org.openstreetmap.josm.data.osm.Way;
    3940import org.openstreetmap.josm.data.osm.WaySegment;
    4041import org.openstreetmap.josm.data.preferences.IntegerProperty;
     
    11101111        List<OsmPrimitive> nearestList = new ArrayList<OsmPrimitive>();
    11111112        Set<Way> wset = new HashSet<Way>();
    11121113
     1114        // add nearby ways
    11131115        for (List<WaySegment> wss : getNearestWaySegmentsImpl(p, predicate).values()) {
    11141116            for (WaySegment ws : wss) {
    11151117                if (wset.add(ws.way)) {
     
    11171119                }
    11181120            }
    11191121        }
     1122       
     1123        // add nearby nodes
    11201124        for (List<Node> nlist : getNearestNodesImpl(p, predicate).values()) {
    11211125            nearestList.addAll(nlist);
    11221126        }
     1127       
     1128        // add parent relations of nearby nodes and ways
     1129        Set<OsmPrimitive> parentRelations = new HashSet<OsmPrimitive>();
     1130        for (OsmPrimitive o : nearestList) {
     1131            for (OsmPrimitive r : o.getReferrers()) {
     1132                if (r instanceof Relation && predicate.evaluate(r)) {
     1133                    parentRelations.add(r);
     1134                }
     1135            }
     1136        }
     1137        nearestList.addAll(parentRelations);
     1138       
    11231139        if (ignore != null) {
    11241140            nearestList.removeAll(ignore);
    11251141        }