Ticket #799: CrossingWays.diff

File CrossingWays.diff, 3.1 KB (added by rrankin, 4 years ago)

svn diff file

  • CrossingWays.java

     
    2222        Map<Point2D,List<ExtendedSegment>> cellSegments; 
    2323    /** The already detected errors */ 
    2424        HashSet<WaySegment> errorSegments; 
     25        /** The already detected ways in error */ 
     26        Map<List<Way>, List<WaySegment>> ways_seen; 
     27 
    2528         
    2629        /** 
    2730         * Constructor 
     
    3841        { 
    3942                cellSegments = new HashMap<Point2D,List<ExtendedSegment>>(1000); 
    4043        errorSegments = new HashSet<WaySegment>(); 
     44                ways_seen = new HashMap<List<Way>, List<WaySegment>>(50); 
     45 
    4146        } 
    4247 
    4348        @Override 
     
    4550        { 
    4651                cellSegments = null; 
    4752                errorSegments = null; 
     53                ways_seen = null; 
    4854        } 
    4955 
    5056        @Override 
     
    5763        boolean isCoastline1 = coastline1 != null && (coastline1.equals("water") || coastline1.equals("coastline")); 
    5864        String railway1 = w.get("railway");  
    5965        boolean isSubway1 = railway1 != null && railway1.equals("subway"); 
    60         if( w.get("highway") == null && w.get("waterway") == null && !isSubway1 && !isCoastline1)  
     66        if( w.get("highway") == null && w.get("waterway") == null && (railway1 == null || isSubway1) && !isCoastline1)  
    6167                return; 
    6268         
    6369        String layer1 = w.get("layer"); 
     
    7177            { 
    7278                    for( ExtendedSegment es2 : segments) 
    7379                    { 
    74                                         if (errorSegments.contains(ws) && errorSegments.contains(es2.ws)) 
     80                        List<Way> prims; 
     81                        List<WaySegment> highlight; 
     82 
     83                        if (errorSegments.contains(ws) && errorSegments.contains(es2.ws)) 
    7584                                continue; 
    7685                         
    7786                        String layer2 = es2.layer; 
    7887                        String railway2 = es2.railway; 
    7988                        String coastline2 = es2.coastline; 
    80                                         if (layer1 == null ? layer2 != null : !layer1.equals(layer2)) 
     89                        if (layer1 == null ? layer2 != null : !layer1.equals(layer2)) 
    8190                                continue; 
    8291                         
    8392                        if( !es1.intersects(es2) ) continue; 
    84                             if( isSubway1 && "subway".equals(railway2)) continue; 
     93                        if( isSubway1 && "subway".equals(railway2)) continue; 
    8594                             
    8695                            boolean isCoastline2 = coastline2 != null && (coastline2.equals("water") || coastline2.equals("coastline")); 
    8796                        if( isCoastline1 != isCoastline2 ) continue; 
    8897                         
    89                     errors.add(new TestError(this, Severity.WARNING, tr("Crossing ways"), 
    90                                                 Arrays.asList(es1.ws.way, es2.ws.way), 
    91                                                 Arrays.asList(es1.ws, es2.ws))); 
     98                        prims = Arrays.asList(es1.ws.way, es2.ws.way); 
     99                        if ((highlight = ways_seen.get(prims)) == null) 
     100                        { 
     101 
     102                            highlight = new ArrayList<WaySegment>(); 
     103                            highlight.add(es1.ws); 
     104                            highlight.add(es2.ws); 
     105 
     106                            errors.add(new TestError(this, Severity.WARNING, tr("Crossing ways"), 
     107                                                prims, 
     108                                                highlight )); 
     109                            ways_seen.put(prims, highlight); 
     110                        } 
     111                        else 
     112                        { 
     113                            highlight.add(es1.ws); 
     114                            highlight.add(es2.ws); 
     115                        } 
    92116                    } 
    93117                    segments.add(es1); 
    94118            }