Changeset 27842 in osm for applications


Ignore:
Timestamp:
2012-02-17T19:56:48+01:00 (13 years ago)
Author:
roland
Message:

Added km-column to stoplist.

Location:
applications/editors/josm
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/public_transport/src/public_transport/RoutePatternAction.java

    r26582 r27842  
    286286    }
    287287
    288     public void addRow(Node node, String role) {
    289       insertRow(-1, node, role);
    290     }
    291 
    292     public void insertRow(int insPos, Node node, String role) {
    293       String[] buf = { "", "", "" };
     288    public void addRow(Node node, String role, double distance) {
     289      insertRow(-1, node, role, distance);
     290    }
     291
     292    public void insertRow(int insPos, Node node, String role, double distance) {
     293      String[] buf = { "", "", "", "" };
    294294      String curName = node.get("name");
    295295      if (curName != null)
     
    307307      }
    308308      buf[STOPLIST_ROLE_COLUMN] = role;
     309      buf[3] = Double.toString(((double)(int)(distance*40000/360.0*100))/100);
     310
    309311      if (insPos == -1)
    310312      {
     
    340342    public double length;
    341343    public double d1, d2, o1, o2;
    342 
    343     public SegmentMetric(double fromLat, double fromLon, double toLat, double toLon) {
     344    public double distance;
     345
     346    public SegmentMetric(double fromLat, double fromLon, double toLat, double toLon,
     347                         double distance) {
     348      this.distance = distance;
     349
    344350      aLat = fromLat;
    345351      aLon = fromLon;
     
    415421  private static JTextField tfSuggestStopsLimit = null;
    416422  private static Relation currentRoute = null;
     423  private static Vector< SegmentMetric > segmentMetrics = null;
    417424  private static Vector< RelationMember > markedWays = new Vector< RelationMember >();
    418425  private static Vector< RelationMember > markedNodes = new Vector< RelationMember >();
     
    863870      stoplistData.addColumn(tr("Ref"));
    864871      stoplistData.addColumn(tr("Role"));
     872      stoplistData.addColumn(tr("km"));
    865873      stoplistTable.setModel(stoplistData);
    866874      /*JScrollPane*/ tableSP = new JScrollPane(stoplistTable);
     
    12861294
    12871295      itineraryData.cleanupGaps();
     1296      segmentMetrics = fillSegmentMetrics();
    12881297      rebuildWays();
    12891298    }
     
    13001309
    13011310      itineraryData.cleanupGaps();
     1311      segmentMetrics = fillSegmentMetrics();
    13021312      rebuildWays();
    13031313    }
     
    13771387
    13781388      itineraryData.cleanupGaps();
     1389      segmentMetrics = fillSegmentMetrics();
    13791390      rebuildWays();
    13801391    }
     
    14441455
    14451456      itineraryData.cleanupGaps();
     1457      segmentMetrics = fillSegmentMetrics();
    14461458      rebuildWays();
    14471459    }
     
    15291541        if ((curMember.isNode()) && (mainDataSet.isSelected(curMember.getNode())))
    15301542        {
    1531           stoplistData.insertRow(insPos, curMember.getNode(), curMember.getRole());
     1543          StopReference sr = detectMinDistance
     1544              (curMember.getNode(), segmentMetrics, cbRight.isSelected(), cbLeft.isSelected());
     1545          double offset = segmentMetrics.elementAt((sr.index+1) / 2).distance;
     1546          if (sr.index % 2 == 0)
     1547            offset += sr.pos;
     1548          stoplistData.insertRow(insPos, curMember.getNode(), curMember.getRole(), offset);
    15321549          if (insPos >= 0)
    15331550            ++insPos;
     
    15451562        if (!(addedNodes.contains(curMember)))
    15461563        {
    1547           stoplistData.insertRow(insPos, curMember, "");
     1564          StopReference sr = detectMinDistance
     1565              (curMember, segmentMetrics, cbRight.isSelected(), cbLeft.isSelected());
     1566          double offset = segmentMetrics.elementAt((sr.index+1) / 2).distance;
     1567          if (sr.index % 2 == 0)
     1568            offset += sr.pos;
     1569          stoplistData.insertRow(insPos, curMember, "", offset);
    15481570          if (insPos >= 0)
    15491571            ++insPos;
     
    15801602      // Prepare Segments: The segments of all usable ways are arranged in a linear
    15811603      // list such that a coor can directly be checked concerning position and offset
    1582       Vector<SegmentMetric> segmentMetrics = new Vector<SegmentMetric>();
    1583       for (int i = 0; i < itineraryData.getRowCount(); ++i)
    1584       {
    1585         if (itineraryData.ways.elementAt(i) != null)
    1586         {
    1587           Way way = itineraryData.ways.elementAt(i);
    1588           if (!(way.isIncomplete()))
    1589           {
    1590             if ("backward".equals((String)(itineraryData.getValueAt(i, 1))))
    1591             {
    1592               for (int j = way.getNodesCount()-2; j >= 0; --j)
    1593               {
    1594             SegmentMetric sm = new SegmentMetric
    1595                 (way.getNode(j+1).getCoor().lat(), way.getNode(j+1).getCoor().lon(),
    1596                 way.getNode(j).getCoor().lat(), way.getNode(j).getCoor().lon());
    1597             segmentMetrics.add(sm);
    1598               }
    1599             }
    1600             else
    1601             {
    1602               for (int j = 0; j < way.getNodesCount()-1; ++j)
    1603               {
    1604             SegmentMetric sm = new SegmentMetric
    1605                 (way.getNode(j).getCoor().lat(), way.getNode(j).getCoor().lon(),
    1606                 way.getNode(j+1).getCoor().lat(), way.getNode(j+1).getCoor().lon());
    1607             segmentMetrics.add(sm);
    1608               }
    1609             }
    1610           }
    1611         }
    1612         else
    1613         {
    1614           segmentMetrics.add(null);
    1615         }
    1616       }
    1617 
    16181604      Vector< StopReference > srm = new Vector< StopReference >();
    16191605      int insPos = stoplistTable.getSelectedRow();
     
    16861672      for (int i = 0; i < srm.size(); ++i)
    16871673      {
    1688         stoplistData.insertRow(insPos, srm.elementAt(i).node, srm.elementAt(i).role);
     1674        StopReference sr = detectMinDistance
     1675            (srm.elementAt(i).node, segmentMetrics, cbRight.isSelected(), cbLeft.isSelected());
     1676        double offset = segmentMetrics.elementAt((sr.index+1) / 2).distance;
     1677        if (sr.index % 2 == 0)
     1678          offset += sr.pos;
     1679        stoplistData.insertRow(insPos, srm.elementAt(i).node, srm.elementAt(i).role, offset);
    16891680        if (insPos >= 0)
    16901681          ++insPos;
     
    16951686    else if ("routePattern.stoplistReflect".equals(event.getActionCommand()))
    16961687    {
    1697       Vector<RelationMember> itemsToReflect = new Vector<RelationMember>();
     1688      Vector< RelationMember > itemsToReflect = new Vector< RelationMember >();
     1689      Vector< Double > distancesToReflect = new Vector< Double >();
    16981690      int insPos = stoplistTable.getSelectedRow();
    16991691
     
    17061698            String role = (String)(stoplistData.getValueAt(i, STOPLIST_ROLE_COLUMN));
    17071699            RelationMember markedNode = new RelationMember
    1708             (role, stoplistData.nodes.elementAt(i));
     1700                (role, stoplistData.nodes.elementAt(i));
    17091701            itemsToReflect.addElement(markedNode);
    17101702
     
    17341726        if (curMember.isNode())
    17351727        {
    1736           stoplistData.insertRow(insPos, curMember.getNode(), curMember.getRole());
     1728          StopReference sr = detectMinDistance
     1729              (curMember.getNode(), segmentMetrics, cbRight.isSelected(), cbLeft.isSelected());
     1730          double offset = segmentMetrics.elementAt((sr.index+1) / 2).distance;
     1731          if (sr.index % 2 == 0)
     1732            offset += sr.pos;
     1733          stoplistData.insertRow(insPos, curMember.getNode(), curMember.getRole(), offset);
    17371734          if (insPos >= 0)
    17381735            ++insPos;
     
    17481745      // Prepare Segments: The segments of all usable ways are arranged in a linear
    17491746      // list such that a coor can directly be checked concerning position and offset
    1750       Vector<SegmentMetric> segmentMetrics = new Vector<SegmentMetric>();
    1751       for (int i = 0; i < itineraryData.getRowCount(); ++i)
    1752       {
    1753         if (itineraryData.ways.elementAt(i) != null)
    1754         {
    1755           Way way = itineraryData.ways.elementAt(i);
    1756           if (!(way.isIncomplete()))
    1757           {
    1758             if ("backward".equals((String)(itineraryData.getValueAt(i, 1))))
    1759             {
    1760               for (int j = way.getNodesCount()-2; j >= 0; --j)
    1761               {
    1762             SegmentMetric sm = new SegmentMetric
    1763                 (way.getNode(j+1).getCoor().lat(), way.getNode(j+1).getCoor().lon(),
    1764                 way.getNode(j).getCoor().lat(), way.getNode(j).getCoor().lon());
    1765             segmentMetrics.add(sm);
    1766               }
    1767             }
    1768             else
    1769             {
    1770               for (int j = 0; j < way.getNodesCount()-1; ++j)
    1771               {
    1772             SegmentMetric sm = new SegmentMetric
    1773                 (way.getNode(j).getCoor().lat(), way.getNode(j).getCoor().lon(),
    1774                 way.getNode(j+1).getCoor().lat(), way.getNode(j+1).getCoor().lon());
    1775             segmentMetrics.add(sm);
    1776               }
    1777             }
    1778           }
    1779         }
    1780         else
    1781         {
    1782           segmentMetrics.add(null);
    1783         }
    1784       }
    1785 
    17861747      Vector< StopReference > srm = new Vector< StopReference >();
    17871748      // Determine for each member its position on the itinerary: position means here the
     
    18481809      }
    18491810
    1850       /*for (int i = 0; i < stoplistData.getRowCount(); ++i)
    1851       {
    1852       }*/
    1853 
    18541811      Collections.sort(srm);
    18551812
     
    18571814      for (int i = 0; i < srm.size(); ++i)
    18581815      {
    1859         stoplistData.addRow(srm.elementAt(i).node, srm.elementAt(i).role);
     1816        StopReference sr = detectMinDistance
     1817            (srm.elementAt(i).node, segmentMetrics, cbRight.isSelected(), cbLeft.isSelected());
     1818        double offset = segmentMetrics.elementAt((sr.index+1) / 2).distance;
     1819        if (sr.index % 2 == 0)
     1820          offset += sr.pos;
     1821        stoplistData.addRow(srm.elementAt(i).node, srm.elementAt(i).role, offset);
    18601822      }
    18611823
     
    21422104    }
    21432105    itineraryData.cleanupGaps();
     2106    segmentMetrics = fillSegmentMetrics();
    21442107  }
    21452108
     
    21512114      if (curMember.isNode())
    21522115      {
    2153     stoplistData.insertRow(insPos, curMember.getNode(), curMember.getRole());
    2154     if (insPos >= 0)
    2155       ++insPos;
    2156       }
    2157     }
     2116        StopReference sr = detectMinDistance
     2117            (curMember.getNode(), segmentMetrics, cbRight.isSelected(), cbLeft.isSelected());
     2118        double offset = segmentMetrics.elementAt((sr.index+1) / 2).distance;
     2119        System.out.print(sr.index);
     2120        System.out.print(" ");
     2121        System.out.print(offset);
     2122        System.out.print(" ");
     2123        System.out.println(sr.pos);
     2124        if (sr.index % 2 == 0)
     2125          offset += sr.pos;
     2126        stoplistData.insertRow(insPos, curMember.getNode(), curMember.getRole(), offset);
     2127        if (insPos >= 0)
     2128          ++insPos;
     2129      }
     2130    }
     2131  }
     2132
     2133  private Vector< SegmentMetric > fillSegmentMetrics()
     2134  {
     2135    Vector< SegmentMetric > segmentMetrics = new Vector< SegmentMetric >();
     2136    double distance = 0;
     2137    for (int i = 0; i < itineraryData.getRowCount(); ++i)
     2138    {
     2139      if (itineraryData.ways.elementAt(i) != null)
     2140      {
     2141        Way way = itineraryData.ways.elementAt(i);
     2142        if (!(way.isIncomplete()))
     2143        {
     2144          if ("backward".equals((String)(itineraryData.getValueAt(i, 1))))
     2145          {
     2146            for (int j = way.getNodesCount()-2; j >= 0; --j)
     2147            {
     2148              SegmentMetric sm = new SegmentMetric
     2149                  (way.getNode(j+1).getCoor().lat(), way.getNode(j+1).getCoor().lon(),
     2150                  way.getNode(j).getCoor().lat(), way.getNode(j).getCoor().lon(), distance);
     2151              segmentMetrics.add(sm);
     2152              distance += sm.length;
     2153            }
     2154          }
     2155          else
     2156          {
     2157            for (int j = 0; j < way.getNodesCount()-1; ++j)
     2158            {
     2159              SegmentMetric sm = new SegmentMetric
     2160                  (way.getNode(j).getCoor().lat(), way.getNode(j).getCoor().lon(),
     2161                  way.getNode(j+1).getCoor().lat(), way.getNode(j+1).getCoor().lon(), distance);
     2162              segmentMetrics.add(sm);
     2163              distance += sm.length;
     2164            }
     2165          }
     2166        }
     2167      }
     2168      else
     2169        segmentMetrics.add(null);
     2170    }
     2171    return segmentMetrics;
    21582172  }
    21592173
     
    21612175      (Node node, Vector< SegmentMetric > segmentMetrics,
    21622176       boolean rhsPossible, boolean lhsPossible) {
     2177    if (node == null)
     2178      return null;
     2179
    21632180    int minIndex = -1;
    21642181    double position = -1.0;
Note: See TracChangeset for help on using the changeset viewer.