Ticket #16102: simplifyWay-performance.patch

File simplifyWay-performance.patch, 1.7 KB (added by GerdP, 8 years ago)
  • src/org/openstreetmap/josm/actions/SimplifyWayAction.java

     
    140140     * in order to simplify the way.
    141141     */
    142142    protected static boolean isRequiredNode(Way way, Node node) {
    143         int frequency = Collections.frequency(way.getNodes(), node);
    144         if ((way.getNode(0) == node) && (way.getNode(way.getNodesCount()-1) == node)) {
    145             frequency = frequency - 1; // closed way closing node counted only once
     143        boolean isRequired = node.isTagged();
     144        if (!isRequired) {
     145            int frequency = Collections.frequency(way.getNodes(), node);
     146            if ((way.getNode(0) == node) && (way.getNode(way.getNodesCount()-1) == node)) {
     147                frequency = frequency - 1; // closed way closing node counted only once
     148            }
     149            isRequired = frequency > 1;
    146150        }
    147         boolean isRequired = frequency > 1;
    148151        if (!isRequired) {
    149152            List<OsmPrimitive> parents = new LinkedList<>();
    150153            parents.addAll(node.getReferrers());
     
    151154            parents.remove(way);
    152155            isRequired = !parents.isEmpty();
    153156        }
    154         if (!isRequired) {
    155             isRequired = node.isTagged();
    156         }
    157157        return isRequired;
    158158    }
    159159
     
    210210            }
    211211        }
    212212
     213        if (newNodes.size() == w.getNodesCount()) return null;
     214
    213215        Set<Node> delNodes = new HashSet<>();
    214216        delNodes.addAll(w.getNodes());
    215217        delNodes.removeAll(newNodes);