Ticket #774: OverlappingWays.diff

File OverlappingWays.diff, 2.1 KB (added by rrankin@…, 4 years ago)

svn diff file

  • OverlappingWays.java

     
    22 
    33import static org.openstreetmap.josm.tools.I18n.tr; 
    44 
    5 import java.util.List; 
    6 import java.util.ArrayList; 
     5import java.util.*; 
    76 
    87import org.openstreetmap.josm.data.coor.LatLon; 
    98import org.openstreetmap.josm.data.osm.OsmPrimitive; 
     
    4746        @Override 
    4847        public void endTest()  
    4948        { 
     49                Map<List<Way>, List<WaySegment>> ways_seen =  
     50                        new HashMap<List<Way>, List<WaySegment>>(500); 
     51 
    5052                for (List<WaySegment> duplicated : nodePairs.values()) 
    5153                { 
     54                        int highway = 0; 
     55                        int railway = 0; 
     56 
    5257                        if (duplicated.size() > 1) 
    5358                        { 
    5459                                List<OsmPrimitive> prims = new ArrayList<OsmPrimitive>(); 
    55                                 for (WaySegment ws : duplicated) prims.add(ws.way); 
    56                                 errors.add(new TestError(this, Severity.OTHER, 
    57                                         tr("Overlapping ways"), prims, duplicated)); 
     60                                List<Way> current_ways = new ArrayList<Way>(); 
     61                                List<WaySegment> highlight; 
     62 
     63                                for (WaySegment ws : duplicated)  
     64                                { 
     65                                        if (ws.way.get("highway") != null) 
     66                                                highway++; 
     67                                        else if (ws.way.get("railway") != null) 
     68                                                railway++; 
     69 
     70                                        prims.add(ws.way); 
     71                                        current_ways.add(ws.way); 
     72                                } 
     73                                /* These ways not seen before  
     74                                 * If two or more of the overlapping ways are 
     75                                 * highways or railways mark a seperate error    
     76                                */ 
     77                                if ((highlight = ways_seen.get(current_ways)) == null) 
     78                                { 
     79                                    String errortype = "Overlapping ways"; 
     80 
     81                                     if (highway >1)  
     82                                        errortype = "Overlapping highways"; 
     83                                     else if (railway >1)  
     84                                        errortype = "Overlapping railways"; 
     85 
     86                                     errors.add(new TestError(this, Severity.OTHER, 
     87                                        tr(errortype), prims, duplicated)); 
     88                                     ways_seen.put(current_ways, duplicated); 
     89                                } 
     90                                else    /* way seen, mark highlight layer only */ 
     91                                { 
     92                                        for (WaySegment ws : duplicated)  
     93                                            highlight.add(ws); 
     94                                } 
    5895                        } 
    5996                } 
    6097                nodePairs = null;