Ticket #17475: 17475.patch
File 17475.patch, 3.2 KB (added by , 5 years ago) |
---|
-
src/org/openstreetmap/josm/data/validation/tests/Addresses.java
18 18 import java.util.stream.Collectors; 19 19 import java.util.stream.Stream; 20 20 21 import org.openstreetmap.josm.command.Command; 22 import org.openstreetmap.josm.command.DeleteCommand; 21 23 import org.openstreetmap.josm.data.coor.EastNorth; 22 24 import org.openstreetmap.josm.data.coor.LatLon; 23 25 import org.openstreetmap.josm.data.osm.Node; … … 46 48 protected static final int MULTIPLE_STREET_NAMES = 2603; 47 49 protected static final int MULTIPLE_STREET_RELATIONS = 2604; 48 50 protected static final int HOUSE_NUMBER_TOO_FAR = 2605; 51 protected static final int OBSOLETE_RELATION = 2606; 49 52 50 53 protected static final DoubleProperty MAX_DUPLICATE_DISTANCE = new DoubleProperty("validator.addresses.max_duplicate_distance", 200.0); 51 54 protected static final DoubleProperty MAX_STREET_DISTANCE = new DoubleProperty("validator.addresses.max_street_distance", 200.0); … … 261 264 checkHouseNumbersWithoutStreet(r); 262 265 checkForDuplicate(r); 263 266 if (r.hasTag("type", ASSOCIATED_STREET)) { 267 checkIfObsolete(r); 264 268 // Used to count occurrences of each house number in order to find duplicates 265 269 Map<String, List<OsmPrimitive>> map = new HashMap<>(); 266 270 // Used to detect different street names … … 389 393 .primitives(errorList) 390 394 .build()); 391 395 } 396 397 /** 398 * Check if an associatedStreet Relation is obsolete. 399 * @param r the relation 400 */ 401 private void checkIfObsolete(Relation r) { 402 for (RelationMember m : r.getMembers()) { 403 if (m.getMember().isIncomplete()) 404 continue; 405 406 boolean isHighway = m.isWay() && m.getMember().hasKey("highway"); 407 408 switch (m.getRole()) { 409 case "house": 410 case "addr:houselink": 411 case "address": 412 if (!m.getMember().hasTag("addr:street") || !m.getMember().hasTag("addr:housenumber")) 413 return; 414 break; 415 case "street": 416 break; 417 case "": 418 if (!isHighway && (!m.getMember().hasTag("addr:street") || !m.getMember().hasTag("addr:housenumber"))) { 419 return; 420 } 421 break; 422 default: 423 } 424 } 425 errors.add(TestError.builder(this, Severity.WARNING, OBSOLETE_RELATION) 426 .message(tr("Relation is obsolete")) 427 .primitives(r) 428 .build()); 429 } 430 431 /** 432 * Merge the nodes into one. 433 * Copied from UtilsPlugin.MergePointsAction 434 */ 435 @Override 436 public Command fixError(TestError testError) { 437 return new DeleteCommand(testError.getPrimitives()); 438 } 439 440 @Override 441 public boolean isFixable(TestError testError) { 442 if (!(testError.getTester() instanceof Addresses)) 443 return false; 444 return testError.getCode() == OBSOLETE_RELATION; 445 } 446 447 392 448 }