Ignore:
Timestamp:
2016-07-02T02:21:25+02:00 (9 years ago)
Author:
darya
Message:

fix #13087 #13089

Location:
applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/gui/PTAssistantLayer.java

    r32497 r32521  
    1111import javax.swing.Action;
    1212import javax.swing.Icon;
     13import javax.swing.JOptionPane;
    1314
    1415import org.openstreetmap.josm.Main;
     
    5758        @Override
    5859        public void paint(final Graphics2D g, final MapView mv, Bounds bounds) {
    59 
     60               
    6061                paintVisitor = new PTAssistantPaintVisitor(g, mv);
    6162                for (OsmPrimitive primitive : primitives) {
     
    162163                                        if (!Main.getLayerManager().containsLayer(this)) {
    163164                                                Main.getLayerManager().addLayer(this);
     165                                                Main.map.repaint();
    164166                                        }
    165167
  • applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/gui/PTAssistantPaintVisitor.java

    r32505 r32521  
    66import java.awt.Point;
    77import java.util.ArrayList;
     8import java.util.Collections;
     9import java.util.Comparator;
    810import java.util.HashMap;
     11import java.util.HashSet;
    912import java.util.List;
    1013
     
    3942
    4043                        if (RouteUtils.isPTStop(rm)) {
    41                                
     44
    4245                                drawStop(rm.getMember());
    43 
    4446
    4547                        } else if (RouteUtils.isPTWay(rm)) {
     
    6163                HashMap<Long, String> stopOrderMap = new HashMap<>();
    6264                int stopCount = 1;
    63                
     65
    6466                for (RelationMember rm : r.getMembers()) {
    6567                        if (RouteUtils.isPTStop(rm) || (rm.getMember().isIncomplete() && (rm.isNode() || rm.hasRole("stop")
    6668                                        || rm.hasRole("stop_entry_only") || rm.hasRole("stop_exit_only") || rm.hasRole("platform")
    6769                                        || rm.hasRole("platform_entry_only") || rm.hasRole("platform_exit_only")))) {
    68                                
     70
    6971                                String label = "";
    7072
     
    139141                                continue;
    140142                        }
    141                         this.drawSegment(lastN, n, new Color(208, 80, 208, 179), oneway);
     143                        this.drawSegment(lastN, n, new Color(128, 0, 128, 100), oneway);
    142144                        lastN = n;
    143145                }
     
    186188
    187189                double t = Math.atan2((double) p2.x - p1.x, (double) p2.y - p1.y);
    188                 double cosT = 8 * Math.cos(t);
    189                 double sinT = 8 * Math.sin(t);
     190                double cosT = 9 * Math.cos(t);
     191                double sinT = 9 * Math.sin(t);
    190192
    191193                int[] xPoints = { (int) (p1.x + cosT), (int) (p2.x + cosT), (int) (p2.x - cosT), (int) (p1.x - cosT) };
     
    193195                g.setColor(color);
    194196                g.fillPolygon(xPoints, yPoints, 4);
    195                 g.fillOval((int) (p1.x - 8), (int) (p1.y - 8), 16, 16);
    196                 g.fillOval((int) (p2.x - 8), (int) (p2.y - 8), 16, 16);
     197                g.fillOval((int) (p1.x - 9), (int) (p1.y - 9), 18, 18);
     198                g.fillOval((int) (p2.x - 9), (int) (p2.y - 9), 18, 18);
    197199
    198200                if (oneway != 0) {
     
    263265                Point p = mv.getPoint(n);
    264266
    265                 Color fillColor = null;
    266 
    267                 if (primitive.hasTag("bus", "yes")) {
    268                         fillColor = Color.BLUE;
    269                 } else if (primitive.hasTag("tram", "yes")) {
    270                         fillColor = Color.RED;
    271                 } // TODO: add more options
    272                 g.setColor(fillColor);
     267                g.setColor(Color.BLUE);
    273268
    274269                if (primitive.hasTag("public_transport", "stop_position")) {
     
    294289                // draw the ref values of all parent routes:
    295290                List<String> parentsLabelList = new ArrayList<>();
    296                 String parentsLabel = "";
    297291                for (OsmPrimitive parent : primitive.getReferrers()) {
    298292                        if (parent.getType().equals(OsmPrimitiveType.RELATION)) {
    299293                                Relation relation = (Relation) parent;
    300                                 if (RouteUtils.isTwoDirectionRoute(relation)) {
     294                                if (RouteUtils.isTwoDirectionRoute(relation) && relation.get("ref") != null && !relation.get("ref").equals("")) {
    301295
    302296                                        boolean stringFound = false;
     
    307301                                        }
    308302                                        if (!stringFound) {
    309                                                 parentsLabel = parentsLabel + relation.get("ref") + ";";
    310303                                                parentsLabelList.add(relation.get("ref"));
    311304                                        }
     
    313306                                }
    314307                        }
     308                }
     309
     310                Collections.sort(parentsLabelList, new RefTagComparator());
     311
     312                String parentsLabel = "";
     313                for (String s : parentsLabelList) {
     314                        parentsLabel = parentsLabel + s + ";";
    315315                }
    316316
     
    318318                        // remove the last semicolon:
    319319                        parentsLabel = parentsLabel.substring(0, parentsLabel.length() - 1);
    320                         g.setColor(new Color(150, 150, 150));
     320
     321                        g.setColor(new Color(128, 0, 128));
    321322                        Font parentLabelFont = new Font("SansSerif", Font.ITALIC, 20);
    322323                        g.setFont(parentLabelFont);
    323                         g.drawString(parentsLabel, p.x + 20, p.y);
     324                        g.drawString(parentsLabel, p.x + 20, p.y + 20);
     325                }
     326
     327        }
     328
     329        private class RefTagComparator implements Comparator<String> {
     330
     331                @Override
     332                public int compare(String s1, String s2) {
     333
     334                        if (s1 == null || s1.equals("")) {
     335                                if (s2 == null || s2.equals("")) {
     336                                        return 0;
     337                                } else {
     338                                        return 1;
     339                                }
     340                        }
     341
     342                        String firstNumberString1 = s1.split("\\D+")[0];
     343                        String firstNumberString2 = s2.split("\\D+")[0];
     344                       
     345                        try {
     346                                int firstNumber1 = Integer.valueOf(firstNumberString1);
     347                                int firstNumber2 = Integer.valueOf(firstNumberString2);
     348                                if (firstNumber1 > firstNumber2) {
     349                                        return 1;
     350                                } else if (firstNumber1 < firstNumber2) {
     351                                        return -1;
     352                                } else {
     353                                        // if the first number is the same:
     354
     355                                        return s1.compareTo(s2);
     356
     357                                }
     358                        } catch (NumberFormatException ex) {
     359                                return s1.compareTo(s2);
     360                        }
     361
    324362                }
    325363
  • applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/PTAssitantValidatorTest.java

    r32497 r32521  
    44
    55import java.util.ArrayList;
    6 import java.util.Collection;
    76import java.util.List;
    87
    98import javax.swing.JOptionPane;
    109
    11 import org.openstreetmap.josm.command.ChangeCommand;
    1210import org.openstreetmap.josm.command.Command;
    1311import org.openstreetmap.josm.command.SequenceCommand;
    1412import org.openstreetmap.josm.data.osm.DataSet;
    15 import org.openstreetmap.josm.data.osm.OsmPrimitive;
    16 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
    1713import org.openstreetmap.josm.data.osm.Relation;
    18 import org.openstreetmap.josm.data.osm.RelationMember;
    19 import org.openstreetmap.josm.data.osm.Way;
    2014import org.openstreetmap.josm.data.validation.Severity;
    2115import org.openstreetmap.josm.data.validation.Test;
    2216import org.openstreetmap.josm.data.validation.TestError;
    23 import org.openstreetmap.josm.gui.dialogs.relation.sort.RelationSorter;
    2417import org.openstreetmap.josm.plugins.pt_assistant.actions.FixTask;
    2518import org.openstreetmap.josm.plugins.pt_assistant.actions.IncompleteMembersDownloadThread;
     
    286279        }
    287280
    288 //      private Command fixErrorByRemovingWay(TestError testError) {
    289 //
    290 //              if (testError.getCode() != ERROR_CODE_ROAD_TYPE && testError.getCode() != ERROR_CODE_DIRECTION) {
    291 //                      return null;
    292 //              }
    293 //
    294 //              Collection<? extends OsmPrimitive> primitives = testError.getPrimitives();
    295 //              Relation originalRelation = (Relation) primitives.iterator().next();
    296 //              Collection<?> highlighted = testError.getHighlighted();
    297 //              Way wayToRemove = (Way) highlighted.iterator().next();
    298 //
    299 //              Relation modifiedRelation = new Relation(originalRelation);
    300 //              List<RelationMember> modifiedRelationMembers = new ArrayList<>(originalRelation.getMembersCount() - 1);
    301 //
    302 //              // copy PT stops first, PT ways last:
    303 //              for (RelationMember rm : originalRelation.getMembers()) {
    304 //                      if (RouteUtils.isPTStop(rm)) {
    305 //
    306 //                              if (rm.getRole().equals("stop_position")) {
    307 //                                      if (rm.getType().equals(OsmPrimitiveType.NODE)) {
    308 //                                              RelationMember newMember = new RelationMember("stop", rm.getNode());
    309 //                                              modifiedRelationMembers.add(newMember);
    310 //                                      } else { // if it is a way:
    311 //                                              RelationMember newMember = new RelationMember("stop", rm.getWay());
    312 //                                              modifiedRelationMembers.add(newMember);
    313 //                                      }
    314 //                              } else {
    315 //                                      // if the relation member does not have the role
    316 //                                      // "stop_position":
    317 //                                      modifiedRelationMembers.add(rm);
    318 //                              }
    319 //
    320 //                      }
    321 //              }
    322 //
    323 //              // now copy PT ways:
    324 //              for (RelationMember rm : originalRelation.getMembers()) {
    325 //                      if (RouteUtils.isPTWay(rm)) {
    326 //                              Way wayToCheck = rm.getWay();
    327 //                              if (wayToCheck != wayToRemove) {
    328 //                                      if (rm.getRole().equals("forward") || rm.getRole().equals("backward")) {
    329 //                                              RelationMember modifiedMember = new RelationMember("", wayToCheck);
    330 //                                              modifiedRelationMembers.add(modifiedMember);
    331 //                                      } else {
    332 //                                              modifiedRelationMembers.add(rm);
    333 //                                      }
    334 //                              }
    335 //                      }
    336 //              }
    337 //
    338 //              modifiedRelation.setMembers(modifiedRelationMembers);
    339 //
    340 //              ChangeCommand changeCommand = new ChangeCommand(originalRelation, modifiedRelation);
    341 //
    342 //              return changeCommand;
    343 //      }
    344 //
    345 //      private Command fixSortingError(TestError testError) {
    346 //              if (testError.getCode() != ERROR_CODE_SORTING) {
    347 //                      return null;
    348 //              }
    349 //
    350 //              Collection<? extends OsmPrimitive> primitives = testError.getPrimitives();
    351 //              Relation originalRelation = (Relation) primitives.iterator().next();
    352 //
    353 //              // separate ways from stops (because otherwise the order of
    354 //              // stops/platforms can be messed up by the sorter:
    355 //              List<RelationMember> members = originalRelation.getMembers();
    356 //              final List<RelationMember> stops = new ArrayList<>();
    357 //              final List<RelationMember> ways = new ArrayList<>();
    358 //              for (RelationMember member : members) {
    359 //                      if (RouteUtils.isPTWay(member)) {
    360 //                              if (member.getRole().equals("")) {
    361 //                                      ways.add(member);
    362 //                              } else {
    363 //                                      RelationMember modifiedMember = new RelationMember("", member.getWay());
    364 //                                      ways.add(modifiedMember);
    365 //                              }
    366 //
    367 //                      } else { // stops:
    368 //                              if (member.getRole().equals("stop_positon")) {
    369 //                                      // it is not expected that stop_positions could
    370 //                                      // be relations
    371 //                                      if (member.getType().equals(OsmPrimitiveType.NODE)) {
    372 //                                              RelationMember modifiedMember = new RelationMember("stop", member.getNode());
    373 //                                              stops.add(modifiedMember);
    374 //                                      } else { // if it is a primitive of type way:
    375 //                                              RelationMember modifiedMember = new RelationMember("stop", member.getWay());
    376 //                                              stops.add(modifiedMember);
    377 //                                      }
    378 //                              } else { // if it is not a stop_position:
    379 //                                      stops.add(member);
    380 //                              }
    381 //
    382 //                      }
    383 //              }
    384 //
    385 //              // sort the ways:
    386 //              RelationSorter sorter = new RelationSorter();
    387 //              List<RelationMember> sortedWays = sorter.sortMembers(ways);
    388 //
    389 //              // create a new relation to pass to the command:
    390 //              Relation sortedRelation = new Relation(originalRelation);
    391 //              List<RelationMember> sortedRelationMembers = new ArrayList<>(members.size());
    392 //              for (RelationMember rm : stops) {
    393 //                      sortedRelationMembers.add(rm);
    394 //              }
    395 //              for (RelationMember rm : sortedWays) {
    396 //                      sortedRelationMembers.add(rm);
    397 //              }
    398 //              sortedRelation.setMembers(sortedRelationMembers);
    399 //
    400 //              ChangeCommand changeCommand = new ChangeCommand(originalRelation, sortedRelation);
    401 //
    402 //              return changeCommand;
    403 //
    404 //      }
    405281
    406282        private void performDummyTest(Relation r) {
Note: See TracChangeset for help on using the changeset viewer.