Ticket #799: CrossingWays.diff

File CrossingWays.diff, 3.1 KB (added by rrankin, 18 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            }