Changeset 17361 in osm for applications/editors/josm/plugins/utilsplugin/src/UtilsPlugin/JoinAreasAction.java
- Timestamp:
- 2009-08-30T17:49:38+02:00 (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
applications/editors/josm/plugins/utilsplugin/src/UtilsPlugin/JoinAreasAction.java
r16735 r17361 142 142 143 143 // This is copied from SimplifyAction and should be probably ported to tools 144 for (Node node : way. nodes) {144 for (Node node : way.getNodes()) { 145 145 if(askedAlready) break; 146 146 boolean isInsideOneBoundingBox = false; … … 327 327 private ArrayList<OsmPrimitive> addIntersections(Way a, Way b) { 328 328 boolean same = a.equals(b); 329 int nodesSizeA = a. nodes.size();330 int nodesSizeB = b. nodes.size();329 int nodesSizeA = a.getNodesCount(); 330 int nodesSizeB = b.getNodesCount(); 331 331 332 332 // We use OsmPrimitive here instead of Node because we later need to split a way at these nodes. … … 339 339 for (int j = (same ? i + 2 : 0); j < nodesSizeB - 1; j++) { 340 340 // Avoid re-adding nodes that already exist on (some) intersections 341 if(a. nodes.get(i).equals(b.nodes.get(j)) || a.nodes.get(i+1).equals(b.nodes.get(j))) {342 nodes.add(b. nodes.get(j));341 if(a.getNode(i).equals(b.getNode(j)) || a.getNode(i+1).equals(b.getNode(j))) { 342 nodes.add(b.getNode(j)); 343 343 continue; 344 344 } else 345 if(a. nodes.get(i).equals(b.nodes.get(j+1)) || a.nodes.get(i+1).equals(b.nodes.get(j+1))) {346 nodes.add(b. nodes.get(j+1));345 if(a.getNode(i).equals(b.getNode(j+1)) || a.getNode(i+1).equals(b.getNode(j+1))) { 346 nodes.add(b.getNode(j+1)); 347 347 continue; 348 348 } 349 349 LatLon intersection = getLineLineIntersection( 350 a. nodes.get(i) .getEastNorth().east(), a.nodes.get(i) .getEastNorth().north(),351 a. nodes.get(i+1).getEastNorth().east(), a.nodes.get(i+1).getEastNorth().north(),352 b. nodes.get(j) .getEastNorth().east(), b.nodes.get(j) .getEastNorth().north(),353 b. nodes.get(j+1).getEastNorth().east(), b.nodes.get(j+1).getEastNorth().north());350 a.getNode(i) .getEastNorth().east(), a.getNode(i) .getEastNorth().north(), 351 a.getNode(i+1).getEastNorth().east(), a.getNode(i+1).getEastNorth().north(), 352 b.getNode(j) .getEastNorth().east(), b.getNode(j) .getEastNorth().north(), 353 b.getNode(j+1).getEastNorth().east(), b.getNode(j+1).getEastNorth().north()); 354 354 if(intersection == null) continue; 355 355 … … 359 359 nodes.add(n); 360 360 // The distance is needed to sort and add the nodes in direction of the way 361 nodesA.add(new NodeToSegs(i, n, a. nodes.get(i).getCoor()));361 nodesA.add(new NodeToSegs(i, n, a.getNode(i).getCoor())); 362 362 if(same) 363 nodesA.add(new NodeToSegs(j, n, a. nodes.get(j).getCoor()));363 nodesA.add(new NodeToSegs(j, n, a.getNode(j).getCoor())); 364 364 else 365 nodesB.add(new NodeToSegs(j, n, b. nodes.get(j).getCoor()));365 nodesB.add(new NodeToSegs(j, n, b.getNode(j).getCoor())); 366 366 } 367 367 } … … 508 508 private Collection<Node> getNodesFromWays(Collection<Way> ways) { 509 509 Collection<Node> allNodes = new ArrayList<Node>(); 510 for(Way w: ways) allNodes.addAll(w. nodes);510 for(Way w: ways) allNodes.addAll(w.getNodes()); 511 511 return allNodes; 512 512 } … … 524 524 for(Way w: multigonWays) { 525 525 Polygon poly = new Polygon(); 526 for(Node n: (w). nodes) poly.addPoint(latlonToXY(n.getCoor().lat()), latlonToXY(n.getCoor().lon()));526 for(Node n: (w).getNodes()) poly.addPoint(latlonToXY(n.getCoor().lat()), latlonToXY(n.getCoor().lon())); 527 527 528 528 for(Node n: multigonNodes) { 529 if(!(w). nodes.contains(n) && poly.contains(latlonToXY(n.getCoor().lat()), latlonToXY(n.getCoor().lon()))) {529 if(!(w).containsNode(n) && poly.contains(latlonToXY(n.getCoor().lat()), latlonToXY(n.getCoor().lon()))) { 530 530 getWaysByNode(innerWays, multigonWays, n); 531 531 } … … 549 549 private void getWaysByNode(Collection<Way> innerWays, Collection<Way> w, Node n) { 550 550 for(Way way : w) { 551 if(!(way). nodes.contains(n)) continue;551 if(!(way).containsNode(n)) continue; 552 552 if(!innerWays.contains(way)) innerWays.add(way); // Will need this later for multigons 553 553 } … … 566 566 if(innerWays.contains(w)) continue; 567 567 568 if(w. nodes.size() <= 2)568 if(w.getNodesCount() <= 2) 569 569 cmds.add(new DeleteCommand(w)); 570 570 else … … 608 608 continue; 609 609 } 610 if(a. nodes.get(0).equals(b.nodes.get(0)) ||611 a. nodes.get(a.nodes.size()-1).equals(b.nodes.get(b.nodes.size()-1))) {610 if(a.getNode(0).equals(b.getNode(0)) || 611 a.getNode(a.getNodesCount()-1).equals(b.getNode(b.getNodesCount()-1))) { 612 612 Main.main.getCurrentDataSet().setSelected(b); 613 613 new ReverseWayAction().actionPerformed(null); … … 634 634 private ArrayList<Way> fixMultigons(Collection<Way> uninterestingWays, Way outerWay) { 635 635 Collection<Node> innerNodes = getNodesFromWays(uninterestingWays); 636 Collection<Node> outerNodes = outerWay. nodes;636 Collection<Node> outerNodes = outerWay.getNodes(); 637 637 638 638 // The newly created inner ways. uninterestingWays is passed by reference and therefore modified in-place … … 646 646 wayIterator: for(Way w : uninterestingWays) { 647 647 boolean hasInnerNodes = false; 648 for(Node n : w. nodes) {648 for(Node n : w.getNodes()) { 649 649 if(outerNodes.contains(n)) continue wayIterator; 650 650 if(!hasInnerNodes && innerNodes.contains(n)) hasInnerNodes = true; 651 651 } 652 if(!hasInnerNodes || w. nodes.size() < 2) continue;652 if(!hasInnerNodes || w.getNodesCount() < 2) continue; 653 653 possibleWays.add(w); 654 654 } … … 703 703 for(int j=i+1; j < ways.size(); j++) { 704 704 Way b = ways.get(j); 705 List<Node> revNodes = new ArrayList<Node>(b. nodes);705 List<Node> revNodes = new ArrayList<Node>(b.getNodes()); 706 706 Collections.reverse(revNodes); 707 if(a. nodes.equals(b.nodes) || a.nodes.equals(revNodes)) {707 if(a.getNodes().equals(b.getNodes()) || a.getNodes().equals(revNodes)) { 708 708 removables.add(a); 709 709 continue outer; … … 745 745 */ 746 746 private boolean wayIsCollapsed(Way w) { 747 if(w. nodes.size() <= 3) return true;747 if(w.getNodesCount() <= 3) return true; 748 748 749 749 // If a way contains more than one node twice, it must be collapsed (only start/end node may be the same) 750 750 Way x = new Way(w); 751 751 int count = 0; 752 for(Node n : w. nodes) {753 x. nodes.remove(n);754 if(x. nodes.contains(n)) count++;752 for(Node n : w.getNodes()) { 753 x.removeNode(n); 754 if(x.containsNode(n)) count++; 755 755 if(count == 2) return true; 756 756 } … … 767 767 if(w1.equals(w2)) return false; 768 768 769 if(w1. nodes.get(0).equals(w2.nodes.get(0))) return true;770 if(w1. nodes.get(0).equals(w2.nodes.get(w2.nodes.size()-1))) return true;771 772 if(w1. nodes.get(w1.nodes.size()-1).equals(w2.nodes.get(0))) return true;773 if(w1. nodes.get(w1.nodes.size()-1).equals(w2.nodes.get(w2.nodes.size()-1))) return true;769 if(w1.getNode(0).equals(w2.getNode(0))) return true; 770 if(w1.getNode(0).equals(w2.getNode(w2.getNodesCount()-1))) return true; 771 772 if(w1.getNode(w1.getNodesCount()-1).equals(w2.getNode(0))) return true; 773 if(w1.getNode(w1.getNodesCount()-1).equals(w2.getNode(w2.getNodesCount()-1))) return true; 774 774 775 775 return false; … … 839 839 if(!newRel.members.contains(rm)) newRel.members.add(rm); 840 840 // Add tags 841 for (String key : r.rel.key s.keySet()) {842 newRel.put(key, r.rel. keys.get(key));841 for (String key : r.rel.keySet()) { 842 newRel.put(key, r.rel.get(key)); 843 843 } 844 844 // Delete old relation … … 862 862 */ 863 863 private void stripTags(Way x) { 864 if(x. keys== null) return;864 if(x.getKeys() == null) return; 865 865 Way y = new Way(x); 866 for (String key : x.key s.keySet())866 for (String key : x.keySet()) 867 867 y.remove(key); 868 868 cmds.add(new ChangeCommand(x, y));
Note:
See TracChangeset
for help on using the changeset viewer.