Ticket #22614: 22614_faster1.patch

File 22614_faster1.patch, 2.9 KB (added by GerdP, 2 years ago)
  • src/org/openstreetmap/josm/actions/CombineWayAction.java

     
    232232    }
    233233
    234234    protected static List<Node> tryJoin(Collection<Way> ways) {
    235         List<Node> path = joinWithMultipolygonCode(ways);
     235        List<Node> path = Collections.emptyList();
    236236        if (path.isEmpty()) {
     237            NodeGraph graph = NodeGraph.createDirectedGraphFromWays(ways);
     238            path = graph.buildSpanningPathNoRemove();
     239        }
     240        if (path.isEmpty()) {
     241            path = joinWithMultipolygonCode(ways);
     242        }
     243        if (path.isEmpty()) {
    237244            NodeGraph graph = NodeGraph.createNearlyUndirectedGraphFromNodeWays(ways);
    238245            path = graph.buildSpanningPathNoRemove();
    239246        }
  • src/org/openstreetmap/josm/data/osm/NodeGraph.java

     
    271271                    dupCheck.add(cur);
    272272                    if (isSpanningWay(path))
    273273                        return buildPathFromNodePairs(path);
    274                     nextPairs.addAll(getOutboundPairs(path.peekLast()));
     274                    List<NodePair> followers = getOutboundPairs(cur);
     275                    if (addedEdges != numUndirectedEges && followers.size() == 2) {
     276                        final NodePair swapped = cur.swap();
     277                        followers.remove(swapped);
     278                    }
     279                    nextPairs.addAll(followers);
    275280                }
    276281            }
    277282        }
     
    369374            sortedMap.computeIfAbsent(e.getValue(), x -> new LinkedHashSet<>()).add(e.getKey());
    370375        }
    371376        LinkedHashSet<Node> result = new LinkedHashSet<>();
     377        final int threshold = numUndirectedEges == addedEdges ? 2 : 4;
    372378        for (Entry<Integer, Set<Node>> e : sortedMap.entrySet()) {
    373             if (e.getKey() > 4 || result.isEmpty()) {
     379            if (e.getKey() > threshold || result.isEmpty()) {
    374380                result.addAll(e.getValue());
    375381            }
    376382        }
  • src/org/openstreetmap/josm/data/osm/NodePair.java

     
    7777    public String toString() {
    7878        return new StringBuilder()
    7979        .append('[')
    80         .append(a.getId())
     80        .append(a.getUniqueId())
    8181        .append(',')
    82         .append(b.getId())
     82        .append(b.getUniqueId())
    8383        .append(']')
    8484        .toString();
    8585    }