Changeset 1423 in josm for trunk/src/org


Ignore:
Timestamp:
2009-02-17T18:30:00+01:00 (15 years ago)
Author:
stoecker
Message:

fix #2177. added via ways to restrictions

Location:
trunk/src/org/openstreetmap/josm/data/osm
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/data/osm/Way.java

    r1400 r1423  
    147147        return nodes.size() >= 3 && lastNode() == firstNode();
    148148    }
    149    
     149
    150150    public Node lastNode() {
    151151        return nodes.get(nodes.size()-1);
    152152    }
    153    
     153
    154154    public Node firstNode() {
    155155        return nodes.get(0);
    156156    }
    157    
     157
    158158    public boolean isFirstLastNode(Node n) {
    159159        return n == firstNode() || n == lastNode();
  • trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java

    r1415 r1423  
    518518        Way fromWay = null;
    519519        Way toWay = null;
    520         Node via = null;
     520        OsmPrimitive via = null;
    521521
    522522        /* find the "from", "via" and "to" elements */
     
    557557                            toWay = w;
    558558                        }
     559                    } else if("via".equals(m.role)) {
     560                        if(via != null)
     561                            r.putError(tr("More than one \"via\" found."), true);
     562                        else
     563                            via = w;
    559564                    }
    560565                    else
     
    565570                    Node n = (Node) m.member;
    566571                    if("via".equals(m.role))
     572                    {
    567573                        if(via != null)
    568                             System.out.println("More than one \"via\" found.");
    569                         else {
     574                            r.putError(tr("More than one \"via\" found."), true);
     575                        else
    570576                            via = n;
    571                         }
     577                    }
    572578                    else
    573579                        r.putError(tr("Unknown role ''{0}''.", m.role), true);
     
    587593        }
    588594        if (via == null) {
    589             r.putError(tr("No \"via\" node found."), true);
     595            r.putError(tr("No \"via\" node or way found."), true);
    590596            return;
    591597        }
    592598
    593         /* check if "from" way starts or ends at via */
    594         if(fromWay.nodes.get(0) != via && fromWay.nodes.get(fromWay.nodes.size()-1) != via) {
    595             r.putError(tr("The \"from\" way doesn't start or end at a \"via\" node."), true);
    596             return;
    597         }
    598         /* check if "to" way starts or ends at via */
    599         /*if(toWay.nodes.get(0) != via && toWay.nodes.get(toWay.nodes.size()-1) != via) {
    600             r.putError(tr("to way doesn't start or end at a via node"), true);
    601             return;
    602         }*/
     599        Node viaNode;
     600        if(via instanceof Node)
     601        {
     602            viaNode = (Node) via;
     603            if(!fromWay.isFirstLastNode(viaNode)) {
     604                r.putError(tr("The \"from\" way doesn't start or end at a \"via\" node."), true);
     605                return;
     606            }
     607            if(!toWay.isFirstLastNode(viaNode))
     608                r.putError(tr("The \"to\" way doesn't start or end at a \"via\" node."), true);
     609        }
     610        else
     611        {
     612            Way viaWay = (Way) via;
     613            Node firstNode = viaWay.firstNode();
     614            Node lastNode = viaWay.lastNode();
     615            if(fromWay.isFirstLastNode(firstNode))
     616                viaNode = firstNode;
     617            else if(fromWay.isFirstLastNode(lastNode))
     618                viaNode = firstNode;
     619            else {
     620                r.putError(tr("The \"from\" way doesn't start or end at the \"via\" way."), true);
     621                return;
     622            }
     623            if(!toWay.isFirstLastNode(viaNode == firstNode ? lastNode : firstNode))
     624                r.putError(tr("The \"to\" way doesn't start or end at the \"via\" way."), true);
     625        }
    603626
    604627        /* find the "direct" nodes before the via node */
    605628        Node fromNode = null;
    606         try
    607         {
    608             if(fromWay.nodes.get(0) == via) {
    609                 //System.out.println("From way heading away from via");
    610                 fromNode = fromWay.nodes.get(1);
    611             } else {
    612                 //System.out.println("From way heading towards via");
    613                 fromNode = fromWay.nodes.get(fromWay.nodes.size()-2);
    614             }
    615         } catch (IndexOutOfBoundsException ioobe) {
    616             r.putError(tr("The \"{0}\" way must contain at least 2 nodes.", "from"), true);
    617         }
    618 
     629        if(fromWay.firstNode() == via) {
     630            //System.out.println("From way heading away from via");
     631            fromNode = fromWay.nodes.get(1);
     632        } else {
     633            //System.out.println("From way heading towards via");
     634            fromNode = fromWay.nodes.get(fromWay.nodes.size()-2);
     635        }
     636
     637        Point pFrom = nc.getPoint(fromNode.eastNorth);
     638        Point pVia = nc.getPoint(viaNode.eastNorth);
     639
     640        //if(restrictionDebug) {
    619641        /* find the "direct" node after the via node */
    620         Node toNode = null;
    621         try
    622         {
    623             if(toWay.nodes.get(0) == via) {
    624                 //if(restrictionDebug)
    625                 //    System.out.println("To way heading away from via");
    626                 toNode = toWay.nodes.get(1);
    627             } else {
    628                 //if(restrictionDebug)
    629                 //    System.out.println("To way heading towards via");
    630                 toNode = toWay.nodes.get(toWay.nodes.size()-2);
    631             }
    632         } catch (IndexOutOfBoundsException ioobe) {
    633             r.putError(tr("The \"{0}\" way must contain at least 2 nodes.", "to"), true);
    634         }
    635 
    636         Point pFrom = nc.getPoint(fromNode.eastNorth);
    637         Point pVia = nc.getPoint(via.eastNorth);
    638 
    639         //if(restrictionDebug) {
     642        //    Node toNode = null;
     643        //    if(toWay.firstNode() == via) {
     644        //      System.out.println("To way heading away from via");
     645        //        toNode = toWay.nodes.get(1);
     646        //    } else {
     647        //        System.out.println("To way heading towards via");
     648        //        toNode = toWay.nodes.get(toWay.nodes.size()-2);
     649        //    }
    640650        //    Point pTo = nc.getPoint(toNode.eastNorth);
    641651
     
    681691           90degrees away from the first segment of the "from" way)
    682692        */
    683         double distanceFromWay=8;
     693        double distanceFromWay=10;
    684694        double vx2 = 0;
    685695        double vy2 = 0;
Note: See TracChangeset for help on using the changeset viewer.