Changeset 19050 in josm for trunk/src/org/openstreetmap/josm/actions/JoinAreasAction.java
- Timestamp:
- 2024-04-22T20:59:26+02:00 (6 weeks ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/actions/JoinAreasAction.java
r19048 r19050 210 210 211 211 public List<Node> getNodes() { 212 final var nodes = new ArrayList<Node>();212 List<Node> nodes = new ArrayList<>(); 213 213 for (WayInPolygon way : this.ways) { 214 214 //do not add the last node as it will be repeated in the next way 215 215 if (way.insideToTheRight) { 216 for ( varpos = 0; pos < way.way.getNodesCount() - 1; pos++) {216 for (int pos = 0; pos < way.way.getNodesCount() - 1; pos++) { 217 217 nodes.add(way.way.getNode(pos)); 218 218 } … … 343 343 */ 344 344 private static double getAngle(Node n1, Node n2, Node n3) { 345 final varen1 = n1.getEastNorth();346 final varen2 = n2.getEastNorth();347 final varen3 = n3.getEastNorth();345 EastNorth en1 = n1.getEastNorth(); 346 EastNorth en2 = n2.getEastNorth(); 347 EastNorth en3 = n3.getEastNorth(); 348 348 double angle = Math.atan2(en3.getY() - en1.getY(), en3.getX() - en1.getX()) - 349 349 Math.atan2(en2.getY() - en1.getY(), en2.getX() - en1.getX()); … … 362 362 */ 363 363 public WayInPolygon walk() { 364 final varheadNode = getHeadNode();365 final varprevNode = getPrevNode();364 Node headNode = getHeadNode(); 365 Node prevNode = getPrevNode(); 366 366 367 367 double headAngle = Math.atan2(headNode.getEastNorth().east() - prevNode.getEastNorth().east(), … … 371 371 //find best next way 372 372 WayInPolygon bestWay = null; 373 varbestWayReverse = false;373 boolean bestWayReverse = false; 374 374 375 375 for (WayInPolygon way : availableWays) { … … 418 418 */ 419 419 public WayInPolygon leftComingWay() { 420 final varheadNode = getHeadNode();421 final varprevNode = getPrevNode();420 Node headNode = getHeadNode(); 421 Node prevNode = getPrevNode(); 422 422 423 423 WayInPolygon mostLeft = null; // most left way connected to head node 424 varcomingToHead = false; // true if candidate come to head node424 boolean comingToHead = false; // true if candidate come to head node 425 425 double angle = 2*Math.PI; 426 426 … … 649 649 } 650 650 651 varhasChanges = false;652 653 final var allStartingWays = new ArrayList<Way>();654 final var innerStartingWays = new ArrayList<Way>();655 final var outerStartingWays = new ArrayList<Way>();651 boolean hasChanges = false; 652 653 List<Way> allStartingWays = new ArrayList<>(); 654 List<Way> innerStartingWays = new ArrayList<>(); 655 List<Way> outerStartingWays = new ArrayList<>(); 656 656 657 657 for (Multipolygon area : areas) { … … 721 721 if (discardedWays.stream().anyMatch(w -> !w.isNew())) { 722 722 for (AssembledPolygon ring : boundaries) { 723 for ( vark = 0; k < ring.ways.size(); k++) {723 for (int k = 0; k < ring.ways.size(); k++) { 724 724 WayInPolygon ringWay = ring.ways.get(k); 725 725 Way older = keepOlder(ringWay.way, oldestWayMap, discardedWays); 726 726 727 727 if (ringWay.way != older) { 728 final varrepl = new WayInPolygon(older, ringWay.insideToTheRight);728 WayInPolygon repl = new WayInPolygon(older, ringWay.insideToTheRight); 729 729 ring.ways.set(k, repl); 730 730 } … … 769 769 // Delete the discarded inner ways 770 770 if (!discardedWays.isEmpty()) { 771 final vardeleteCmd = DeleteCommand.delete(discardedWays, true);771 Command deleteCmd = DeleteCommand.delete(discardedWays, true); 772 772 if (deleteCmd != null) { 773 773 cmds.add(deleteCmd); … … 796 796 private Way keepOlder(Way way, Map<Node, Way> oldestWayMap, List<Way> discardedWays) { 797 797 Way oldest = null; 798 for ( varn : way.getNodes()) {799 final varorig = oldestWayMap .get(n);798 for (Node n : way.getNodes()) { 799 Way orig = oldestWayMap .get(n); 800 800 if (orig != null && (oldest == null || oldest.getUniqueId() > orig.getUniqueId()) 801 801 && discardedWays.contains(orig)) { … … 830 830 } 831 831 832 final varwayTags = TagCollection.unionOfAllPrimitives(ways);832 TagCollection wayTags = TagCollection.unionOfAllPrimitives(ways); 833 833 try { 834 834 cmds.addAll(CombinePrimitiveResolverDialog.launchIfNecessary(wayTags, ways, ways)); … … 847 847 */ 848 848 private boolean removeDuplicateNodes(List<Way> ways) { 849 final var nodeMap = new TreeMap<Node, Node>(new NodePositionComparator());850 vartotalWaysModified = 0;849 Map<Node, Node> nodeMap = new TreeMap<>(new NodePositionComparator()); 850 int totalWaysModified = 0; 851 851 852 852 for (Way way : ways) { … … 855 855 } 856 856 857 final var newNodes = new ArrayList<Node>();857 List<Node> newNodes = new ArrayList<>(); 858 858 Node prevNode = null; 859 varmodifyWay = false;859 boolean modifyWay = false; 860 860 861 861 for (Node node : way.getNodes()) { 862 varrepresentator = nodeMap.get(node);862 Node representator = nodeMap.get(node); 863 863 if (representator == null) { 864 864 //new node … … 923 923 cmds.clear(); 924 924 if (addUndoRedo && !executedCmds.isEmpty()) { 925 final var ur = UndoRedoHandler.getInstance();925 UndoRedoHandler ur = UndoRedoHandler.getInstance(); 926 926 if (executedCmds.size() == 1) { 927 927 ur.add(executedCmds.getFirst(), false); … … 945 945 Map<Way, Way> nextWayMap = new HashMap<>(); 946 946 947 for ( varpos = 0; pos < parts.size(); pos++) {947 for (int pos = 0; pos < parts.size(); pos++) { 948 948 949 949 if (!parts.get(pos).lastNode().equals(parts.get((pos + 1) % parts.size()).firstNode())) … … 956 956 Way topWay = null; 957 957 Node topNode = null; 958 vartopIndex = 0;958 int topIndex = 0; 959 959 double minY = Double.POSITIVE_INFINITY; 960 960 961 961 for (Way way : parts) { 962 for ( varpos = 0; pos < way.getNodesCount(); pos++) {963 final varnode = way.getNode(pos);962 for (int pos = 0; pos < way.getNodesCount(); pos++) { 963 Node node = way.getNode(pos); 964 964 965 965 if (node.getEastNorth().getY() < minY) { … … 996 996 for (Way way : parts) { 997 997 if (way.firstNode().equals(headNode)) { 998 final varnextNode = way.getNode(1);998 Node nextNode = way.getNode(1); 999 999 1000 1000 if (topWay == null || !Geometry.isToTheRightSideOfLine(prevNode, headNode, bestWayNextNode, nextNode)) { … … 1008 1008 if (way.lastNode().equals(headNode)) { 1009 1009 //end adjacent to headNode 1010 final varnextNode = way.getNode(way.getNodesCount() - 2);1010 Node nextNode = way.getNode(way.getNodesCount() - 2); 1011 1011 1012 1012 if (topWay == null || !Geometry.isToTheRightSideOfLine(prevNode, headNode, bestWayNextNode, nextNode)) { … … 1020 1020 } else { 1021 1021 //node is inside way - pick the clockwise going end. 1022 final varprev = topWay.getNode(topIndex - 1);1023 final varnext = topWay.getNode(topIndex + 1);1022 Node prev = topWay.getNode(topIndex - 1); 1023 Node next = topWay.getNode(topIndex + 1); 1024 1024 1025 1025 //there will be no parallel segments in the middle of way, so all fine. … … 1027 1027 } 1028 1028 1029 varcurWay = topWay;1029 Way curWay = topWay; 1030 1030 boolean curWayInsideToTheRight = wayClockwise ^ isInner; 1031 1031 List<WayInPolygon> result = new ArrayList<>(); … … 1035 1035 1036 1036 //add cur way 1037 final varresultWay = new WayInPolygon(curWay, curWayInsideToTheRight);1037 WayInPolygon resultWay = new WayInPolygon(curWay, curWayInsideToTheRight); 1038 1038 result.add(resultWay); 1039 1039 1040 1040 //process next way 1041 final varnextWay = nextWayMap.get(curWay);1042 final varprevNode = curWay.getNode(curWay.getNodesCount() - 2);1043 final varheadNode = curWay.lastNode();1044 final varnextNode = nextWay.getNode(1);1041 Way nextWay = nextWayMap.get(curWay); 1042 Node prevNode = curWay.getNode(curWay.getNodesCount() - 2); 1043 Node headNode = curWay.lastNode(); 1044 Node nextNode = nextWay.getNode(1); 1045 1045 1046 1046 if (nextWay == topWay) { … … 1068 1068 // | 1069 1069 1070 varintersectionCount = 0;1070 int intersectionCount = 0; 1071 1071 1072 1072 for (Way wayA : parts) { … … 1078 1078 if (wayA.lastNode().equals(headNode)) { 1079 1079 1080 final varwayB = nextWayMap.get(wayA);1080 Way wayB = nextWayMap.get(wayA); 1081 1081 1082 1082 //test if wayA is opposite wayB relative to curWay and nextWay 1083 1083 1084 final varwayANode = wayA.getNode(wayA.getNodesCount() - 2);1085 final varwayBNode = wayB.getNode(1);1084 Node wayANode = wayA.getNode(wayA.getNodesCount() - 2); 1085 Node wayBNode = wayB.getNode(1); 1086 1086 1087 1087 boolean wayAToTheRight = Geometry.isToTheRightSideOfLine(prevNode, headNode, nextNode, wayANode); … … 1117 1117 */ 1118 1118 private static void revertDuplicateTwoNodeWays(List<WayInPolygon> parts) { 1119 for ( vari = 0; i < parts.size(); i++) {1119 for (int i = 0; i < parts.size(); i++) { 1120 1120 WayInPolygon w1 = parts.get(i); 1121 1121 if (w1.way.getNodesCount() != 2) … … 1141 1141 private List<Way> splitWayOnNodes(Way way, Set<Node> nodes, Map<Node, Way> oldestWayMap) { 1142 1142 1143 final var result = new ArrayList<Way>();1143 List<Way> result = new ArrayList<>(); 1144 1144 List<List<Node>> chunks = buildNodeChunks(way, nodes); 1145 1145 1146 1146 if (chunks.size() > 1) { 1147 final varsplit = SplitWayCommand.splitWay(way, chunks,1147 SplitWayCommand split = SplitWayCommand.splitWay(way, chunks, 1148 1148 Collections.emptyList(), SplitWayCommand.Strategy.keepFirstChunk()); 1149 1149 … … 1159 1159 if (!way.isNew() && result.size() > 1) { 1160 1160 for (Way part : result) { 1161 final varn = part.firstNode();1162 final varold = oldestWayMap.get(n);1161 Node n = part.firstNode(); 1162 Way old = oldestWayMap.get(n); 1163 1163 if (old == null || old.getUniqueId() > way.getUniqueId()) { 1164 1164 oldestWayMap.put(n, way); … … 1231 1231 1232 1232 //TODO: bad performance for deep nestings... 1233 final var result = new ArrayList<PolygonLevel>();1233 List<PolygonLevel> result = new ArrayList<>(); 1234 1234 1235 1235 for (AssembledPolygon outerWay : boundaryWays) { 1236 1236 1237 varouterGood = true;1238 final var innerCandidates = new ArrayList<AssembledPolygon>();1237 boolean outerGood = true; 1238 List<AssembledPolygon> innerCandidates = new ArrayList<>(); 1239 1239 1240 1240 for (AssembledPolygon innerWay : boundaryWays) { … … 1256 1256 1257 1257 //add new outer polygon 1258 final varpol = new AssembledMultipolygon(outerWay);1259 final varpolLev = new PolygonLevel(pol, level);1258 AssembledMultipolygon pol = new AssembledMultipolygon(outerWay); 1259 PolygonLevel polLev = new PolygonLevel(pol, level); 1260 1260 1261 1261 //process inner ways … … 1288 1288 // This seems to appear when is apply over invalid way like #9911 test-case 1289 1289 // Remove all of these way to make the next work. 1290 final var cleanMultigonWays = new ArrayList<WayInPolygon>();1290 List<WayInPolygon> cleanMultigonWays = new ArrayList<>(); 1291 1291 for (WayInPolygon way: multigonWays) { 1292 1292 if (way.way.getNodesCount() != 2 || !way.way.isClosed()) 1293 1293 cleanMultigonWays.add(way); 1294 1294 } 1295 final var traverser = new WayTraverser(cleanMultigonWays);1296 final var result = new ArrayList<AssembledPolygon>();1295 WayTraverser traverser = new WayTraverser(cleanMultigonWays); 1296 List<AssembledPolygon> result = new ArrayList<>(); 1297 1297 1298 1298 WayInPolygon startWay; 1299 1299 while ((startWay = traverser.startNewWay()) != null) { 1300 final var path = new ArrayList<WayInPolygon>();1301 final var startWays = new ArrayList<WayInPolygon>();1300 List<WayInPolygon> path = new ArrayList<>(); 1301 List<WayInPolygon> startWays = new ArrayList<>(); 1302 1302 path.add(startWay); 1303 1303 while (true) { … … 1318 1318 if (path.get(0) == nextWay) { 1319 1319 // path is closed -> stop here 1320 final varring = new AssembledPolygon(path);1320 AssembledPolygon ring = new AssembledPolygon(path); 1321 1321 if (ring.getNodes().size() <= 2) { 1322 1322 // Invalid ring (2 nodes) -> remove … … 1357 1357 */ 1358 1358 public static List<AssembledPolygon> fixTouchingPolygons(List<AssembledPolygon> polygons) { 1359 final var newPolygons = new ArrayList<AssembledPolygon>();1359 List<AssembledPolygon> newPolygons = new ArrayList<>(); 1360 1360 1361 1361 for (AssembledPolygon ring : polygons) { 1362 1362 ring.reverse(); 1363 final var traverser = new WayTraverser(ring.ways);1363 WayTraverser traverser = new WayTraverser(ring.ways); 1364 1364 WayInPolygon startWay; 1365 1365 1366 1366 while ((startWay = traverser.startNewWay()) != null) { 1367 final var simpleRingWays = new ArrayList<WayInPolygon>();1367 List<WayInPolygon> simpleRingWays = new ArrayList<>(); 1368 1368 simpleRingWays.add(startWay); 1369 1369 WayInPolygon nextWay; … … 1374 1374 } 1375 1375 traverser.removeWays(simpleRingWays); 1376 final varsimpleRing = new AssembledPolygon(simpleRingWays);1376 AssembledPolygon simpleRing = new AssembledPolygon(simpleRingWays); 1377 1377 simpleRing.reverse(); 1378 1378 newPolygons.add(simpleRing); … … 1411 1411 */ 1412 1412 private Multipolygon joinPolygon(AssembledMultipolygon polygon) throws UserCancelException { 1413 final varresult = new Multipolygon(joinWays(polygon.outerWay.ways));1413 Multipolygon result = new Multipolygon(joinWays(polygon.outerWay.ways)); 1414 1414 1415 1415 for (AssembledPolygon pol : polygon.innerWays) { … … 1429 1429 1430 1430 //leave original orientation, if all paths are reverse. 1431 varallReverse = true;1431 boolean allReverse = true; 1432 1432 for (WayInPolygon way : ways) { 1433 1433 allReverse &= !way.insideToTheRight; … … 1440 1440 } 1441 1441 1442 final varjoinedWay = joinOrientedWays(ways);1442 Way joinedWay = joinOrientedWays(ways); 1443 1443 1444 1444 //should not happen … … 1462 1462 // the user about this. 1463 1463 1464 final var actionWays = new ArrayList<Way>(ways.size());1465 varoldestPos = 0;1464 List<Way> actionWays = new ArrayList<>(ways.size()); 1465 int oldestPos = 0; 1466 1466 Way oldest = ways.get(0).way; 1467 1467 for (WayInPolygon way : ways) { … … 1511 1511 } 1512 1512 1513 varhasKnownOuter = false;1513 boolean hasKnownOuter = false; 1514 1514 outerWays.clear(); 1515 1515 innerWays.clear(); … … 1538 1538 } 1539 1539 1540 final varouterWay = outerWays.get(0);1540 Way outerWay = outerWays.get(0); 1541 1541 1542 1542 //retain only selected inner ways … … 1588 1588 processedInnerWays.addAll(innerWays); 1589 1589 1590 final varpol = new Multipolygon(outerWay);1590 Multipolygon pol = new Multipolygon(outerWay); 1591 1591 pol.innerWays.addAll(innerWays); 1592 1592 … … 1615 1615 OsmDataLayer layer = getLayerManager().getEditLayer(); 1616 1616 // Create new multipolygon relation and add all inner ways to it 1617 final varnewRel = new Relation();1617 Relation newRel = new Relation(); 1618 1618 newRel.put("type", "multipolygon"); 1619 1619 for (Way w : inner) { … … 1650 1650 1651 1651 cmds.add(new ChangeMembersCommand(r, members)); 1652 final varsaverel = new RelationRole(r, rm.getRole());1652 RelationRole saverel = new RelationRole(r, rm.getRole()); 1653 1653 if (!result.contains(saverel)) { 1654 1654 result.add(saverel); … … 1701 1701 default: 1702 1702 // Create a new relation with all previous members and (Way)outer as outer. 1703 final varnewRel = new Relation();1703 Relation newRel = new Relation(); 1704 1704 for (RelationRole r : multiouters) { 1705 1705 // Add members
Note:
See TracChangeset
for help on using the changeset viewer.