Changeset 3698 in josm


Ignore:
Timestamp:
Dec 5, 2010 4:27:41 PM (2 years ago)
Author:
bastiK
Message:

fixed #5701 - validator: false error "unconnected coastline" reported before upload

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/data/validation/tests/Coastlines.java

    r3671 r3698  
    66import java.awt.geom.Area; 
    77import java.util.ArrayList; 
     8import java.util.Collection; 
    89import java.util.Collections; 
    910import java.util.LinkedList; 
     
    107108            } 
    108109 
     110            // To avoid false positives on upload (only modified primitives 
     111            // are visited), we have to check possible connection to ways 
     112            // that are not in the set of validated primitives. 
     113            if (headWays == 0) { 
     114                Collection<OsmPrimitive> refs = head.getReferrers(); 
     115                for (OsmPrimitive ref : refs) { 
     116                    if (ref != c1 && isCoastline(ref)) { 
     117                        // ref cannot be in <code>coastlines</code>, otherwise we would 
     118                        // have picked it up already 
     119                        headWays++; 
     120                        next = (Way) ref; 
     121 
     122                        if (head.equals(next.firstNode())) { 
     123                            headReversed = true; 
     124                        } else if (!head.equals(next.lastNode())) { 
     125                            headUnordered = true; 
     126                        } 
     127                    } 
     128                } 
     129            } 
     130            if (tailWays == 0) { 
     131                Collection<OsmPrimitive> refs = tail.getReferrers(); 
     132                for (OsmPrimitive ref : refs) { 
     133                    if (ref != c1 && isCoastline(ref)) { 
     134                        tailWays++; 
     135                        prev = (Way) ref; 
     136 
     137                        if (tail.equals(prev.lastNode())) { 
     138                            tailReversed = true; 
     139                        } else if (!tail.equals(prev.firstNode())) { 
     140                            tailUnordered = true; 
     141                        } 
     142                    } 
     143                } 
     144            } 
     145 
    109146            List<OsmPrimitive> primitives = new ArrayList<OsmPrimitive>(); 
    110147            primitives.add(c1); 
     
    130167 
    131168            boolean unordered = false; 
    132             boolean reversed = false; 
    133  
    134             if (headWays == 1 && headReversed && tailWays == 1 && tailReversed) { 
    135                 reversed = true; 
    136             } 
     169            boolean reversed = headWays == 1 && headReversed && tailWays == 1 && tailReversed; 
    137170 
    138171            if (headWays > 1 || tailWays > 1) { 
     
    177210            return; 
    178211 
    179         String natural = way.get("natural"); 
    180         if (natural == null || !natural.equals("coastline")) 
    181             return; 
    182  
    183         coastlines.add(way); 
     212        if (isCoastline(way)) { 
     213            coastlines.add(way); 
     214        } 
     215    } 
     216 
     217    private static boolean isCoastline(OsmPrimitive osm) { 
     218        return osm instanceof Way && "coastline".equals(osm.get("natural")); 
    184219    } 
    185220 
Note: See TracChangeset for help on using the changeset viewer.