Naja, man könnte es schon lösen. Beispielsweise kann man ja technisch prüfen, in wiefern halt zwei Zeichenketten ähnlich sind. Mir fielen da jetzt z.B. in PHP die Funktionen similar_text und levenshtein ein. Wenn man z.B. definiert, dass “name / alt_name” halt rauskommt, wenn similar_text <= 5 ist bzw. levenshtein > 4 dann kommt das raus:
id | name | alt_name | similar_text | levenshtein |
659580881 | Mittlere Arnspitze | Mittlere Ahrnspitze | 18 => | 1 => |
659580779 | Arnkopf | Ahrnkopf | 7 => | 1 => |
429230836 | Seewandköpfl | Seewand | 7 => | 6 => Seewandköpfl / Seewand |
1075941409 | Braggstein | Pragstein | 8 => | 2 => |
507594558 | Laubwand | Lawand | 6 => | 2 => |
2901766935 | Graslitzen | Graslitzen Westgipfel | 10 => | 11 => Graslitzen / Graslitzen Westgipfel |
672703932 | Winnebacher Weißkogel | Winnebacher Weißkogl | 21 => | 1 => |
1567673459 | Gaiskogel | Gaißkogel | 8 => | 2 => |
659580880 | Arnplattenspitze (Hintere Arnspitze) | Ahrnplattenspitze | 16 => | 21 => Arnplattenspitze (Hintere Arnspitze) / Ahrnplattenspitze |
3045856733 | Zwieselberg | Vollhügel | 2 => Zwieselberg / Vollhügel | 10 => Zwieselberg / Vollhügel |
2690057259 | Matekopf | Frommes Kreuz | 1 => Matekopf / Frommes Kreuz | 12 => Matekopf / Frommes Kreuz |
94950233 | Südliche Valvelspitze | Valvelspitze | 12 => | 10 => Südliche Valvelspitze / Valvelspitze |
1770485972 | Erlbergkopf | Irlberg Spitz | 7 => | 6 => Erlbergkopf / Irlberg Spitz |
804162250 | Kummenberg | Kummaberg | 8 => | 2 => |
2859707901 | Baumgartenköpfl | Brennender Palven | 5 => Baumgartenköpfl / Brennender Palven | 15 => Baumgartenköpfl / Brennender Palven |
6468166498 | Ritterspitze | Ritterspitzen | 12 => | 1 => |
26863147 | Heukuppe | Rax | 0 => Heukuppe / Rax | 8 => Heukuppe / Rax |
5864224466 | Weberstein | Blasstein | 5 => Weberstein / Blasstein | 5 => Weberstein / Blasstein |
209962515 | Blachfelder Gießen | Lehnbach, Schindeltalbach | 5 => Blachfelder Gießen / Lehnbach, Schindeltalbach | 21 => Blachfelder Gießen / Lehnbach, Schindeltalbach |
840609583 | Klausbach | Ackergraben | 2 => Klausbach / Ackergraben | 10 => Klausbach / Ackergraben |
118759858 | Schwarza | Trauchbach | 3 => Schwarza / Trauchbach | 8 => Schwarza / Trauchbach |
168741004 | Nassbach | Naßbach | 6 => | 2 => |
184011394 | Heidbach | Haidbach | 7 => | 1 => |
184011425 | Sierning | Sierningbach | 8 => | 4 => |
31777262 | Rumer Bach | Rumer Mure | 6 => | 4 => |
115551659 | Emmebach | Hobbach | 4 => Emmebach / Hobbach | 4 => |
378365799 | Aubach | Aubächl | 5 => Aubach / Aubächl | 3 => |
158015599 | Weißenbach | Habersauerbach | 6 => | 8 => Weißenbach / Habersauerbach |
93406209 | Habicher Seebach | Tumpenbach | 5 => Habicher Seebach / Tumpenbach | 11 => Habicher Seebach / Tumpenbach |
202776295 | Niedertalbach | Spiegelache | 7 => | 8 => Niedertalbach / Spiegelache |
207448618 | Viggarbach | Mühltaler Bach | 5 => Viggarbach / Mühltaler Bach | 10 => Viggarbach / Mühltaler Bach |
Und das sieht schon recht tauglich aus, um halt wirklich nur dann beide Namen (gleichwertig) anzuzeigen, wenn diese sich halt auch deutlich unterscheiden - unabhängig natürlich von der Frage, ob es nicht richtiger weise ein old_/loc_name wäre.
Will damit sagen: Machbar wäre es für Renderer durchaus schon, auch mit dem aktuell häufigen ähnlichen Werten in name/alt_name.
Edit: Mir ist bewusst, dass diese Quick&Dirty-Implementierung nicht allgemeingültig für internationalen Sprachraum sein wird, etc. pp. Klar, wird man da noch mehr Entwicklungsaufwand als Renderer reinstecken müssen, aber es ginge halt theoretisch ohne an den OSM-Daten irgendwas zu ändern (wie es halt der Themenersteller vorschlug). Darauf will ich halt hinaus, dass es also für solche Wertänderungen (“für den Renderer”) auch aus diesem Grunde eigentlich eben kein Grund gibt.
Gruß,
asca
PS: Quick&Dirty-PHP-Code mit jeweils Kommentaren zu den Abschnitten:
<?php
// Hilfsfunktion weil PHP nunmal PHP ist ;-)
function mb_str_pad ($input, $pad_length, $pad_string=" ", $pad_style=STR_PAD_RIGHT, $encoding="UTF-8") {
return str_pad($input, strlen($input)-mb_strlen($input,$encoding)+$pad_length, $pad_string, $pad_style);
}
// Definition der Werte:
$examples = array(
"659580881" => array("name"=>"Mittlere Arnspitze", "alt_name"=>"Mittlere Ahrnspitze"),
"659580779" => array("name"=>"Arnkopf", "alt_name"=>"Ahrnkopf"),
"429230836" => array("name"=>"Seewandköpfl", "alt_name"=>"Seewand"),
"1075941409" => array("name"=>"Braggstein", "alt_name"=>"Pragstein"),
"507594558" => array("name"=>"Laubwand", "alt_name"=>"Lawand"),
"2901766935" => array("name"=>"Graslitzen", "alt_name"=>"Graslitzen Westgipfel"),
"672703932" => array("name"=>"Winnebacher Weißkogel", "alt_name"=>"Winnebacher Weißkogl"),
"1567673459" => array("name"=>"Gaiskogel", "alt_name"=>"Gaißkogel"),
"659580880" => array("name"=>"Arnplattenspitze (Hintere Arnspitze)", "alt_name"=>"Ahrnplattenspitze"),
"3045856733" => array("name"=>"Zwieselberg", "alt_name"=>"Vollhügel"),
"2690057259" => array("name"=>"Matekopf", "alt_name"=>"Frommes Kreuz"),
"94950233" => array("name"=>"Südliche Valvelspitze", "alt_name"=>"Valvelspitze"),
"1770485972" => array("name"=>"Erlbergkopf", "alt_name"=>"Irlberg Spitz"),
"804162250" => array("name"=>"Kummenberg", "alt_name"=>"Kummaberg"),
"2859707901" => array("name"=>"Baumgartenköpfl", "alt_name"=>"Brennender Palven"),
"6468166498" => array("name"=>"Ritterspitze", "alt_name"=>"Ritterspitzen"),
"26863147" => array("name"=>"Heukuppe", "alt_name"=>"Rax"),
"5864224466" => array("name"=>"Weberstein", "alt_name"=>"Blasstein"),
"209962515" => array("name"=>"Blachfelder Gießen", "alt_name"=>"Lehnbach, Schindeltalbach"),
"840609583" => array("name"=>"Klausbach", "alt_name"=>"Ackergraben"),
"118759858" => array("name"=>"Schwarza", "alt_name"=>"Trauchbach"),
"168741004" => array("name"=>"Nassbach", "alt_name"=>"Naßbach"),
"184011394" => array("name"=>"Heidbach", "alt_name"=>"Haidbach"),
"184011425" => array("name"=>"Sierning", "alt_name"=>"Sierningbach"),
"31777262" => array("name"=>"Rumer Bach", "alt_name"=>"Rumer Mure"),
"115551659" => array("name"=>"Emmebach", "alt_name"=>"Hobbach"),
"378365799" => array("name"=>"Aubach", "alt_name"=>"Aubächl"),
"158015599" => array("name"=>"Weißenbach", "alt_name"=>"Habersauerbach"),
"93406209" => array("name"=>"Habicher Seebach", "alt_name"=>"Tumpenbach"),
"202776295" => array("name"=>"Niedertalbach", "alt_name"=>"Spiegelache"),
"207448618" => array("name"=>"Viggarbach", "alt_name"=>"Mühltaler Bach")
);
// Eigentliche Berechnung der Unterschiede:
foreach($examples as $example_id => $example) {
$similar_text = similar_text($example["name"], $example["alt_name"]);
$examples[$example_id]["similar_text"] = $similar_text . " => ". ($similar_text<=5 ? $example["name"] . " / " . $example["alt_name"] : "");
$levenshtein = levenshtein($example["name"], $example["alt_name"]);
$examples[$example_id]["levenshtein"] = $levenshtein . " => ". ($levenshtein>4 ? $example["name"] . " / " . $example["alt_name"] : "");
}
echo "\n";
// Berechnung der Maximal-Breiten der jeweiligen "CSV"-Zellen:
$maxlengths = array("id"=>0, "name"=>0, "alt_name"=>0, "similar_text"=>0, "levenshtein"=>0);
foreach($examples as $example_id => $example) {
foreach($maxlengths as $name => $value) {
if($value < strlen($name=="id"?$example_id:$example[$name])) {
$maxlengths[$name] = strlen($name=="id"?$example_id:$example[$name]);
}
}
}
// Ausgabe der Kopfzeilen:
foreach($maxlengths as $name => $value) {
echo mb_str_pad($name, $value) . " | ";
}
echo "\n";
// Ausgabe der Werte:
foreach($examples as $example_id => $example) {
foreach($maxlengths as $name => $value) {
echo mb_str_pad($name=="id"?$example_id:$example[$name], $value) . " | ";
}
echo "\n";
}
?>