Ignore:
Timestamp:
2016-07-28T12:54:20+02:00 (8 years ago)
Author:
darya
Message:

clarification

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

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/data/PTStop.java

    r32715 r32734  
    137137                }
    138138
    139                 // Look for a stop position within 100 m (around 0.002 degrees) of this
     139                // Look for a stop position within 0.002 degrees (around 100 m) of this
    140140                // platform:
    141141
     
    147147                BBox platformBBox = new BBox(ax, ay, bx, by);
    148148
    149                 // Collection<Node> allNodes =
    150                 // Main.getLayerManager().getEditDataSet().getNodes();
    151149                Collection<Node> allNodes = platform.getDataSet().getNodes();
    152150                for (Node currentNode : allNodes) {
     
    163161         * stop_position or a platform
    164162         *
    165          * @param other PTStop to be compared
     163         * @param other
     164         *            PTStop to be compared
    166165         * @return true if equal, false otherwise
    167166         */
     
    172171                }
    173172
    174                 if (this.stopPosition != null && (this.stopPosition == other.getStopPosition() || this.stopPosition == other.getPlatform())) {
     173                if (this.stopPosition != null
     174                                && (this.stopPosition == other.getStopPosition() || this.stopPosition == other.getPlatform())) {
    175175                        return true;
    176176                }
    177                
    178                 if (this.platform != null && (this.platform == other.getPlatform() || this.platform == other.getStopPosition())) {
     177
     178                if (this.platform != null
     179                                && (this.platform == other.getPlatform() || this.platform == other.getStopPosition())) {
    179180                        return true;
    180181                }
     
    182183                return false;
    183184        }
    184        
     185
    185186}
  • applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/utils/StopToWayAssigner.java

    r32707 r32734  
    4343        public StopToWayAssigner(List<PTWay> ptways) {
    4444                ways = new HashSet<Way>();
    45                 for (PTWay ptway: ptways) {
     45                for (PTWay ptway : ptways) {
    4646                        ways.addAll(ptway.getWays());
    4747                }
     
    5959                if (stopToWay.containsKey(stop)) {
    6060                        List<Way> assignedWays = stopToWay.get(stop);
    61                         for (Way assignedWay: assignedWays) {
     61                        for (Way assignedWay : assignedWays) {
    6262                                if (this.ways.contains(assignedWay)) {
    6363                                        return assignedWay;
     
    7272                        return wayOfStopPosition;
    7373                }
    74 
    75                 // TODO: search if a stop position is in the vicinity of a platform
    7674
    7775                // 3) Search if the stop has a stop_area:
     
    9896                }
    9997
    100                 // 4) Run the growing-bounding-boxes algorithm:
     98                // 4) Search if a stop position is in the vicinity of a platform:
     99                if (stop.getPlatform() != null) {
     100                        List<Node> potentialStopPositionList = stop.findPotentialStopPositions();
     101                        Node closestStopPosition = null;
     102                        double minDistanceSq = Double.MAX_VALUE;
     103                        for (Node potentialStopPosition : potentialStopPositionList) {
     104                                double distanceSq = potentialStopPosition.getCoor()
     105                                                .distanceSq(stop.getPlatform().getBBox().getCenter());
     106                                if (distanceSq < minDistanceSq) {
     107                                        closestStopPosition = potentialStopPosition;
     108                                        minDistanceSq = distanceSq;
     109                                }
     110                        }
     111                        if (closestStopPosition != null) {
     112                                Way closestWay = null;
     113                                double minDistanceSqToWay = Double.MAX_VALUE;
     114                                for (Way way: this.ways) {
     115                                        if (way.containsNode(closestStopPosition)) {
     116                                                double distanceSq = calculateMinDistanceToSegment(new Node(stop.getPlatform().getBBox().getCenter()), way);
     117                                                if (distanceSq < minDistanceSqToWay) {
     118                                                        closestWay = way;
     119                                                        minDistanceSqToWay = distanceSq;
     120                                                }
     121                                        }
     122                                }
     123                                if (closestWay != null) {
     124                                        addAssignedWayToMap(stop, closestWay);
     125                                        return closestWay;
     126                                }
     127                        }
     128                }
     129
     130                // 5) Run the growing-bounding-boxes algorithm:
    101131                double searchRadius = 0.001;
    102132                while (searchRadius < 0.005) {
  • applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/PTAssistantValidatorTest.java

    r32715 r32734  
    4545        public static final int ERROR_CODE_STOP_BY_STOP = 3754;
    4646
    47 
    4847        private PTAssistantLayer layer;
    4948
     
    284283                        // If there is only the sorting error, add it and stop testing.
    285284                        this.errors.addAll(routeChecker.getErrors());
    286                         return;
    287                 }
    288 
    289                 if (!routeChecker.getHasGap()) {
    290                         // Variant 1
    291 //                      storeCorrectRouteSegments(r);
    292 
    293                 }
     285                        // return;
     286                }
     287
     288                // if (!routeChecker.getHasGap()) {
     289                // // Variant 1
     290                // storeCorrectRouteSegments(r);
     291                // }
    294292
    295293                // Variant 3:
     
    311309                segmentChecker.performFirstStopTest();
    312310                segmentChecker.performLastStopTest();
    313                 segmentChecker.performStopByStopTest();
     311                segmentChecker.performStopNotServedTest();
     312
     313                boolean sortingErrorFound = false;
     314                for (TestError error : this.errors) {
     315                        if (error.getCode() == ERROR_CODE_SORTING) {
     316                                sortingErrorFound = true;
     317                                break;
     318                        }
     319                }
     320                if (!sortingErrorFound) {
     321                        segmentChecker.performStopByStopTest();
     322                }
    314323
    315324                this.errors.addAll(segmentChecker.getErrors());
     
    317326
    318327        /**
    319          * Creates the PTRouteSegments of a route that has been found correct and stores them in the list of correct route segments
    320          * @param r route relation
     328         * Creates the PTRouteSegments of a route that has been found correct and
     329         * stores them in the list of correct route segments
     330         *
     331         * @param r
     332         *            route relation
    321333         */
    322334        @SuppressWarnings("unused")
     
    326338                if (manager.getPTStops().size() > 1) {
    327339                        for (int i = 1; i < manager.getPTStops().size(); i++) {
    328                                 PTStop segmentStartStop = manager.getPTStops().get(i-1);
     340                                PTStop segmentStartStop = manager.getPTStops().get(i - 1);
    329341                                PTStop segmentEndStop = manager.getPTStops().get(i);
    330342                                Way segmentStartWay = assigner.get(segmentStartStop);
     
    348360                        return true;
    349361                }
    350                
     362
    351363                if (testError.getCode() == ERROR_CODE_STOP_BY_STOP && SegmentChecker.isFixable(testError)) {
    352364                        return true;
    353365                }
    354                
     366
    355367                return false;
    356368        }
     
    378390                        commands.add(NodeChecker.fixError(testError));
    379391                }
    380                
     392
    381393                if (testError.getCode() == ERROR_CODE_STOP_BY_STOP) {
    382394                        commands.add(SegmentChecker.fixError(testError));
  • applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/SegmentChecker.java

    r32715 r32734  
    219219        }
    220220
     221        public void performStopNotServedTest() {
     222                for (PTStop stop : manager.getPTStops()) {
     223                        Way way = assigner.get(stop);
     224                        if (way == null) {
     225                                createStopError(stop);
     226                        }
     227                }
     228        }
     229
     230        /**
     231         * Performs the stop-by-stop test by visiting each segment between two
     232         * consecutive stops and checking if the ways between them are correct
     233         */
    221234        public void performStopByStopTest() {
    222                
     235
    223236                if (manager.getPTStopCount() < 2) {
    224237                        return;
     
    233246                        Way startWay = assigner.get(startStop);
    234247                        Way endWay = assigner.get(endStop);
    235                         if (startWay == null) {
     248                        if (startWay == null || endWay == null) {
    236249                                this.firstNodeOfRouteSegmentInDirectionOfTravel = null;
    237                                 if (i == 0) {
    238                                         createStopError(startStop);
    239                                 }
    240250                                continue;
    241251                        }
    242                         if (endWay == null) {
    243                                 this.firstNodeOfRouteSegmentInDirectionOfTravel = null;
    244                                 if (i != 0) {
    245                                         createStopError(endStop);
    246                                 }
    247                                 continue;
    248                         }
     252//
     253//                      System.out.println();
     254//                      System.out.println("start way: " + startWay.getId());
     255//                      System.out.println("end way: " + endWay.getId());
    249256
    250257                        List<PTWay> segmentWays = manager.getPTWaysBetween(startWay, endWay);
     
    267274                                correctSegments.add(routeSegment);
    268275                        } else {
     276//                              System.out.println("ERROR");
    269277                                PTRouteSegment routeSegment = new PTRouteSegment(startStop, endStop, segmentWays);
    270278                                TestError error = this.errors.get(this.errors.size() - 1);
     
    366374                if (start == end) {
    367375                        // if both PTStops are on the same PTWay
     376                        this.firstNodeOfRouteSegmentInDirectionOfTravel = null;
    368377                        return true;
    369378                }
     
    397406                                // find the next node in direction of travel (which is part of
    398407                                // the PTWay start):
     408//                              if (firstNodeOfRouteSegmentInDirectionOfTravel != null) {
     409//                                      System.out.println("previous node in direction of travel: "
     410//                                                      + firstNodeOfRouteSegmentInDirectionOfTravel.getId());
     411//                              } else {
     412//                                      System.out.println("previous node in direction of travel: null");
     413//                              }
    399414                                firstNodeOfRouteSegmentInDirectionOfTravel = getOppositeEndNode(current,
    400415                                                firstNodeOfRouteSegmentInDirectionOfTravel);
     416//                              if (firstNodeOfRouteSegmentInDirectionOfTravel != null) {
     417//                                      System.out.println(
     418//                                                      "next node in direction of travel: " + firstNodeOfRouteSegmentInDirectionOfTravel.getId());
     419//                              } else {
     420//                                      System.out.println("next node in direction of travel: null");
     421//                              }
    401422
    402423                                List<PTWay> nextWaysInDirectionOfTravel = this.findNextPTWaysInDirectionOfTravel(current,
     
    551572                        List<RelationMember> originalRelationMembers = originalRelation.getMembers();
    552573                        List<RelationMember> modifiedRelationMembers = new ArrayList<>();
    553                        
     574
    554575                        // copy stops first:
    555                         for (RelationMember rm: originalRelationMembers) {
     576                        for (RelationMember rm : originalRelationMembers) {
    556577                                if (RouteUtils.isPTStop(rm)) {
    557578                                        if (rm.getRole().equals("stop_position")) {
     
    568589                                                modifiedRelationMembers.add(rm);
    569590                                        }
    570                                 } 
    571                         }
    572                        
     591                                }
     592                        }
     593
    573594                        // copy PTWays next:
    574595                        List<RelationMember> waysOfOriginalRelation = new ArrayList<>();
    575                         for (RelationMember rm: originalRelation.getMembers()) {
     596                        for (RelationMember rm : originalRelation.getMembers()) {
    576597                                if (RouteUtils.isPTWay(rm)) {
    577598                                        waysOfOriginalRelation.add(rm);
    578599                                }
    579600                        }
    580                        
     601
    581602                        for (int i = 0; i < waysOfOriginalRelation.size(); i++) {
    582603                                if (waysOfOriginalRelation.get(i).getWay() == wrongSegment.getPTWays().get(0).getWays().get(0)) {
    583 //                              if (waysOfOriginalRelation.get(i) == wrongSegment.getPTWays().get(0)) {
    584                                         modifiedRelationMembers.addAll(correctSegment.getPTWays());
     604                                        // if (waysOfOriginalRelation.get(i) ==
     605                                        // wrongSegment.getPTWays().get(0)) {
     606                                        for (PTWay ptway : correctSegment.getPTWays()) {
     607                                                if (ptway.getRole().equals("forward") || ptway.getRole().equals("backward")) {
     608                                                        modifiedRelationMembers.add(new RelationMember("", ptway.getMember()));
     609                                                } else {
     610                                                        modifiedRelationMembers.add(ptway);
     611                                                }
     612                                        }
    585613                                        i = i + wrongSegment.getPTWays().size() - 1;
    586614                                } else {
    587                                         modifiedRelationMembers.add(waysOfOriginalRelation.get(i));
    588                                 }
    589                         }
    590 
     615                                        if (waysOfOriginalRelation.get(i).getRole().equals("forward")
     616                                                        || waysOfOriginalRelation.get(i).getRole().equals("backward")) {
     617                                                modifiedRelationMembers.add(new RelationMember("", waysOfOriginalRelation.get(i).getMember()));
     618                                        } else {
     619                                                modifiedRelationMembers.add(waysOfOriginalRelation.get(i));
     620                                        }
     621                                }
     622                        }
    591623
    592624                        modifiedRelation.setMembers(modifiedRelationMembers);
    593625                        // TODO: change the data model too
     626                        wrongSegments.remove(testError);
    594627                        ChangeCommand changeCommand = new ChangeCommand(originalRelation, modifiedRelation);
    595628                        return changeCommand;
Note: See TracChangeset for help on using the changeset viewer.