Changeset 36217 in osm for applications/editors/josm/plugins/reltoolbox/src/relcontext/actions/TheRing.java
- Timestamp:
- 2024-03-03T10:25:25+01:00 (22 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
applications/editors/josm/plugins/reltoolbox/src/relcontext/actions/TheRing.java
r36134 r36217 15 15 import org.openstreetmap.josm.command.AddCommand; 16 16 import org.openstreetmap.josm.command.ChangeCommand; 17 import org.openstreetmap.josm.command.ChangeMembersCommand; 18 import org.openstreetmap.josm.command.ChangeNodesCommand; 19 import org.openstreetmap.josm.command.ChangePropertyCommand; 17 20 import org.openstreetmap.josm.command.Command; 18 21 import org.openstreetmap.josm.command.DeleteCommand; … … 330 333 public List<Command> getCommands(boolean createMultipolygon, Map<Relation, Relation> relationChangeMap) { 331 334 Way sourceCopy = new Way(source); 335 Map<String, String> tagsToRemove = new HashMap<>(); 332 336 if (createMultipolygon) { 333 337 Collection<String> linearTags = Config.getPref().getList(PREF_MULTIPOLY + "lineartags", … … 335 339 relation = new Relation(); 336 340 relation.put("type", "multipolygon"); 337 for (String key : sourceCopy.keySet()) { 338 if (linearTags.contains(key)) { 341 for (String key : source.keySet()) { 342 if (linearTags.contains(key) 343 || ("natural".equals(key) && "coastline".equals(source.get("natural")))) 339 344 continue; 340 } 341 if ("natural".equals(key) && "coastline".equals(sourceCopy.get("natural"))) { 342 continue; 343 } 344 relation.put(key, sourceCopy.get(key)); 345 346 relation.put(key, source.get(key)); 345 347 sourceCopy.remove(key); 348 tagsToRemove.put(key, null); 346 349 } 347 350 } … … 354 357 Relation rel; 355 358 if (relationChangeMap != null) { 356 if (relationChangeMap.containsKey(p)) { 357 rel = relationChangeMap.get(p); 358 } else { 359 rel = relationChangeMap.get(p); 360 if (rel == null) { 359 361 rel = new Relation((Relation) p); 360 362 relationChangeMap.put((Relation) p, rel); … … 362 364 } else { 363 365 rel = new Relation((Relation) p); 364 relationCommands.add(new ChangeCommand(p, rel)); 366 relationCommands.add(new ChangeCommand(p, rel)); // should not happen 365 367 } 366 368 for (int i = 0; i < rel.getMembersCount(); i++) { … … 384 386 if (createMultipolygon || !seg.getWayNodes().equals(source.getNodes())) { 385 387 sourceCopy.setNodes(seg.getWayNodes()); 386 commands.add(new ChangeCommand(source, sourceCopy)); 388 if (!tagsToRemove.isEmpty()) { 389 commands.add(new ChangePropertyCommand(Collections.singleton(source), tagsToRemove)); 390 } 391 if (!sourceCopy.getNodes().equals(source.getNodes())) 392 commands.add(new ChangeNodesCommand(source, sourceCopy.getNodes())); 387 393 } 388 394 foundOwnWay = true; … … 398 404 } 399 405 } 406 sourceCopy.setNodes(null); // see #19885 400 407 if (!foundOwnWay) { 401 408 final Command deleteCommand = DeleteCommand.delete(Collections.singleton(source)); … … 413 420 public static void updateCommandsWithRelations(List<Command> commands, Map<Relation, Relation> relationCache) { 414 421 for (Map.Entry<Relation, Relation> entry : relationCache.entrySet()) { 415 commands.add(new ChangeCommand(entry.getKey(), entry.getValue())); 422 Relation oldRel = entry.getKey(); 423 Relation newRel = entry.getValue(); 424 if (oldRel.getKeys().equals(newRel.getKeys())) { 425 commands.add(new ChangeMembersCommand(oldRel, newRel.getMembers())); 426 newRel.setMembers(null); // see #19885 427 } else { 428 commands.add(new ChangeCommand(oldRel, newRel)); // should not happen 429 } 416 430 } 417 431 }
Note:
See TracChangeset
for help on using the changeset viewer.
