diff --git a/src/org/openstreetmap/josm/actions/SimplifyWayAction.java b/src/org/openstreetmap/josm/actions/SimplifyWayAction.java
|
a
|
b
|
public class SimplifyWayAction extends JosmAction {
|
| 135 | 135 | * in order to simplify the way. |
| 136 | 136 | */ |
| 137 | 137 | protected boolean isRequiredNode(Way way, Node node) { |
| 138 | | boolean isRequired = Collections.frequency(way.getNodes(), node) > 1; |
| | 138 | int frequency = Collections.frequency(way.getNodes(), node); |
| | 139 | if ((way.getNode(0) == node) && (way.getNode(way.getNodesCount()-1) == node)) { |
| | 140 | frequency = frequency - 1; // closed way closing node counted only once |
| | 141 | } |
| | 142 | boolean isRequired = frequency > 1; |
| 139 | 143 | if (!isRequired) { |
| 140 | 144 | List<OsmPrimitive> parents = new LinkedList<>(); |
| 141 | 145 | parents.addAll(node.getReferrers()); |
| … |
… |
public class SimplifyWayAction extends JosmAction {
|
| 190 | 194 | i++; |
| 191 | 195 | } |
| 192 | 196 | |
| | 197 | if ((newNodes.size() > 3) && (newNodes.get(0) == newNodes.get(newNodes.size()-1))) { |
| | 198 | // Closed way, check if the first node could also be simplified ... |
| | 199 | if ( ! isRequiredNode(w, newNodes.get(0))) { |
| | 200 | List<Node> l1 = new ArrayList<>(3); |
| | 201 | l1.add(newNodes.get(newNodes.size()-2)); |
| | 202 | l1.add(newNodes.get(0)); |
| | 203 | l1.add(newNodes.get(1)); |
| | 204 | List<Node> l2 = new ArrayList<>(3); |
| | 205 | buildSimplifiedNodeList(l1, 0, 2, threshold, l2); |
| | 206 | if ( ! l2.contains(l1.get(1))) { |
| | 207 | newNodes.remove(0); // remove the first node |
| | 208 | newNodes.set(newNodes.size()-1, newNodes.get(0)); // close the way |
| | 209 | } |
| | 210 | } |
| | 211 | } |
| | 212 | |
| 193 | 213 | Set<Node> delNodes = new HashSet<>(); |
| 194 | 214 | delNodes.addAll(w.getNodes()); |
| 195 | 215 | delNodes.removeAll(newNodes); |