Changeset 28703 in osm for applications/editors/josm/plugins/reltoolbox/src/relcontext/relationfix/AssociatedStreetFixer.java
- Timestamp:
- 2012-09-11T09:55:54+02:00 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
applications/editors/josm/plugins/reltoolbox/src/relcontext/relationfix/AssociatedStreetFixer.java
r28693 r28703 1 1 package relcontext.relationfix; 2 3 import static org.openstreetmap.josm.tools.I18n.tr; 2 4 3 5 import java.util.ArrayList; … … 15 17 import org.openstreetmap.josm.data.osm.Way; 16 18 17 import static org.openstreetmap.josm.tools.I18n.tr;18 19 19 public class AssociatedStreetFixer extends RelationFixer { 20 20 … … 26 26 public boolean isRelationGood(Relation rel) { 27 27 for (RelationMember m : rel.getMembers()) { 28 if (m.getType().equals(OsmPrimitiveType.NODE) && !"house".equals(m.getRole())) 28 if (m.getType().equals(OsmPrimitiveType.NODE) && !"house".equals(m.getRole())) { 29 setWarningMessage(tr("Node without 'house' role found")); 29 30 return false; 30 if (m.getType().equals(OsmPrimitiveType.WAY) && !("house".equals(m.getRole()) || "street".equals(m.getRole()))) 31 } 32 if (m.getType().equals(OsmPrimitiveType.WAY) && !("house".equals(m.getRole()) || "street".equals(m.getRole()))) { 33 setWarningMessage(tr("Way without 'house' or 'street' role found")); 34 return false; 35 } 36 if (m.getType().equals(OsmPrimitiveType.RELATION) && !"house".equals(m.getRole())) { 37 setWarningMessage(tr("Relation without 'house' role found")); 31 38 return false; 32 if (m.getType().equals(OsmPrimitiveType.RELATION) && !"house".equals(m.getRole())) 33 return false; 39 } 34 40 } 35 41 // relation should have name 36 42 if (!rel.hasKey("name")) { 43 setWarningMessage(tr("Relation does not have name")); 37 44 return false; 38 45 } … … 40 47 String streetName = rel.get("name"); 41 48 for (RelationMember m : rel.getMembers()) { 42 if (m.getRole().equals("street") && !m.getWay().get("name").equals(streetName)) 43 return false; 49 if (m.getRole().equals("street") && !m.getWay().get("name").equals(streetName)) { 50 setWarningMessage(tr("Relation has streets with different names")); 51 return false; 52 } 44 53 } 54 clearWarningMessage(); 45 55 return true; 46 56 } 47 57 48 @Override58 @Override 49 59 public Command fixRelation(Relation source) { 50 60 // any way with highway tag -> street … … 54 64 Relation rel = new Relation(source); 55 65 boolean fixed = false; 56 66 57 67 for (int i = 0; i < rel.getMembersCount(); i++) { 58 68 RelationMember m = rel.getMember(i); 59 69 60 70 if (m.isNode()) { 61 71 Node node = m.getNode(); 62 if (!"house".equals(m.getRole()) && 72 if (!"house".equals(m.getRole()) && 63 73 (node.hasKey("building") || node.hasKey("addr:housenumber"))) { 64 74 fixed = true; … … 70 80 fixed = true; 71 81 rel.setMember(i, new RelationMember("street", way)); 72 } else if (!"house".equals(m.getRole()) && 82 } else if (!"house".equals(m.getRole()) && 73 83 (way.hasKey("building") || way.hasKey("addr:housenumber"))) { 74 84 fixed = true; … … 77 87 } else if (m.isRelation()) { 78 88 Relation relation = m.getRelation(); 79 if (!"house".equals(m.getRole()) && 89 if (!"house".equals(m.getRole()) && 80 90 (relation.hasKey("building") || relation.hasKey("addr:housenumber") || "multipolygon".equals(relation.get("type")))) { 81 91 fixed = true; … … 84 94 } 85 95 } 86 96 87 97 // fill relation name 88 98 Map<String, Integer> streetNames = new HashMap<String, Integer>(); 89 for (RelationMember m : rel.getMembers()) 99 for (RelationMember m : rel.getMembers()) 90 100 if ("street".equals(m.getRole()) && m.isWay()) { 91 101 String name = m.getWay().get("name"); 92 102 if (name == null || name.isEmpty()) continue; 93 103 94 104 Integer count = streetNames.get(name); 95 105 96 106 streetNames.put(name, count != null? count + 1 : 1); 97 107 } … … 104 114 } 105 115 } 106 107 if (!rel.hasKey("name")) { 116 117 if (!rel.hasKey("name") && !commonName.isEmpty()) { 108 118 fixed = true; 109 119 rel.put("name", commonName); … … 111 121 commonName = ""; // set empty common name - if we already have name on relation, do not overwrite it 112 122 } 113 123 114 124 List<Command> commandList = new ArrayList<Command>(); 115 125 if (fixed) { 116 126 commandList.add(new ChangeCommand(source, rel)); 117 127 } 118 128 119 129 /*if (!commonName.isEmpty()) 120 130 // fill common name to streets 121 for (RelationMember m : rel.getMembers()) 131 for (RelationMember m : rel.getMembers()) 122 132 if ("street".equals(m.getRole()) && m.isWay()) { 123 133 String name = m.getWay().get("name"); 124 134 if (commonName.equals(name)) continue; 125 135 126 136 // TODO: ask user if he really wants to overwrite street name?? 127 137 128 138 Way oldWay = m.getWay(); 129 139 Way newWay = new Way(oldWay); 130 140 newWay.put("name", commonName); 131 141 132 142 commandList.add(new ChangeCommand(oldWay, newWay)); 133 143 }
Note:
See TracChangeset
for help on using the changeset viewer.
