You are not logged in.
- Topics: Active | Unanswered
Announcement
Please create new topics on the new site at community.openstreetmap.org. We expect the migration of data will take a few weeks, you can follow its progress here.***
#1 2013-05-18 08:30:53
- softcake
- Member
- Registered: 2009-05-01
- Posts: 214
MkgMap: Vergleich Inhalt von zwei Tags (name und name:de)
Hallo,
meine Karte umfasst das Gebiet Nordbayern/CZ. In CZ gibt es viele Ortschaften, die hier noch unter ihrem alten, deutschen Namen bekannt sind. Hierfür gibt es ja das name:de-Tag, welches auch rege genutzt wird.
Ich möchte den deutschen Namen mit anzeigen lassen, z.B. "Cheb (Eger)", was prinzipiell kein Problem darstellt:
name:de=* {set name='${name} (${name:de})' }Das birgt aber den Nachteil, dass auch deutsche Ortschaften mit name:de-Tag entsprechend angezeigt werden, z.B. "Nürnberg (Nürnberg)". Darum möchte ich das name:de-Tag nur anzeigen, wenn name und name:de nicht identisch sind:
name != '${name:de}' { set name='${name} (${name:de})' }Leider funktioniert das so nicht. Nürnberg wird immernoch als "Nürnberg (Nürnberg)" angezeigt.
Meine Frage ist nun: Wie vergleiche ich ein Tag mit dem Inhalt eines anderen Tags?
Gruß, Thomas
Offline
#2 2013-05-18 08:51:37
- aighes
- Member
- From: Shanghai
- Registered: 2009-03-29
- Posts: 5,383
- Website
Re: MkgMap: Vergleich Inhalt von zwei Tags (name und name:de)
Wenn du die Adresssuche nutzt kannst du folgendes machen:
name=* & name:de=* & mkgmap:country!=DEU { set name='${name} (${name:de})' }Last edited by aighes (2013-05-18 08:51:51)
Viele Grüße
Henning
Offline
#3 2013-05-18 08:55:45
- chris66
- Member

- From: Germany
- Registered: 2009-05-24
- Posts: 10,130
Re: MkgMap: Vergleich Inhalt von zwei Tags (name und name:de)
Eventuell ist die name-tag-list Option dafür gedacht?
Mapper aus dem Münsterland.
Offline
#4 2013-05-18 09:02:05
- aighes
- Member
- From: Shanghai
- Registered: 2009-03-29
- Posts: 5,383
- Website
Re: MkgMap: Vergleich Inhalt von zwei Tags (name und name:de)
Bei name-tag-list kommt am Ende nur ein name raus. Da würde dann aus einem gewünschten Lisboa (Lissabon) ein einfaches Lissabon.
Last edited by aighes (2013-05-18 09:04:27)
Viele Grüße
Henning
Offline
#5 2013-05-18 09:18:41
- softcake
- Member
- Registered: 2009-05-01
- Posts: 214
Re: MkgMap: Vergleich Inhalt von zwei Tags (name und name:de)
Wenn du die Adresssuche nutzt kannst du folgendes machen:
name=* & name:de=* & mkgmap:country!=DEU { set name='${name} (${name:de})' }
Danke, die Adresssuche nutze ich bislang nicht. Somit funktioniert es so auch leider nicht.
Was ist eigentlich falsch an
name != '${name:de}' { set name='${name} (${name:de})' }(MkgMap meckert bei der Anweisung nicht)
Thomas
Last edited by softcake (2013-05-18 09:20:25)
Offline
#6 2013-05-18 09:25:33
- aighes
- Member
- From: Shanghai
- Registered: 2009-03-29
- Posts: 5,383
- Website
Re: MkgMap: Vergleich Inhalt von zwei Tags (name und name:de)
Das du Tag-Abfragen nur innerhalb des Actions-Teils machen kannst. mkgmap interpretiert dein '${name:de}' als simplen String, der nicht in name vorkommen soll. Das hört sich aber egtl. ganz sinnvoll an. Schreib das doch mal als Wunsch an die Mailingliste @mkgmap-dev (die meist auch der bessere Ort für solche Fragen ist, da liest der geballte Sachverstand an Nutzern und Devs mit)
Viele Grüße
Henning
Offline
#7 2013-05-18 09:59:15
- softcake
- Member
- Registered: 2009-05-01
- Posts: 214
Re: MkgMap: Vergleich Inhalt von zwei Tags (name und name:de)
...Schreib das doch mal als Wunsch an die Mailingliste @mkgmap-dev (die meist auch der bessere Ort für solche Fragen ist, da liest der geballte Sachverstand an Nutzern und Devs mit)
Ok, hab mal was gemailt. Mal sehen, was rauskommt. Danke für den Tipp.
Bin etwas verwundert, dass es die Möglichkeit eines Tag-Vergleichs nicht gibt. Eventuell hat hier noch jemand eine Idee?
Thomas
Offline
#8 2013-05-23 09:08:37
- softcake
- Member
- Registered: 2009-05-01
- Posts: 214
Re: MkgMap: Vergleich Inhalt von zwei Tags (name und name:de)
Bislang kein Feedback von mkgmap-dev.
Habe mittlerweilen versucht, mein Problem anderweitig zu lösen. Leider ohne Erfolg. Eventuell kann mir hier jemand von den "Spezialisten" helfen?
Gruß, Thomas
Offline
#9 2013-05-23 09:46:07
- couchmapper
- Member
- Registered: 2013-02-17
- Posts: 462
Re: MkgMap: Vergleich Inhalt von zwei Tags (name und name:de)
Habe mittlerweilen versucht, mein Problem anderweitig zu lösen. Leider ohne Erfolg. Eventuell kann mir hier jemand von den "Spezialisten" helfen?
Kein "Spezialist" hier, sorry, aber hast Du mal eine Vorverarbeitung der .pbf-Dateien mit osmium probiert? Soll wohl mit C++ oder Javascript klappen:
If you want to generate maps for specific languages, you have to look at several different tags to decide which name you want to use for labelling: "name", "name:LANGUAGE", "local_name", etc. Depending on what you want to do exactly, you might prefer one of the other name, etc.
http://wiki.openstreetmap.org/wiki/Osmium
Edit: Klappt nur mit C++
Last edited by couchmapper (2013-05-23 21:40:40)
Offline
#10 2013-05-23 10:22:14
- softcake
- Member
- Registered: 2009-05-01
- Posts: 214
Re: MkgMap: Vergleich Inhalt von zwei Tags (name und name:de)
Hi couchmapper,
wenn ich das richtig lese, dann kann ich bei osmium wählen, ob ich den deutschen oder anderssprachigen Namen möchte. Das ist aber prinzipiell jetzt schon im mkgmap-style-file möglich. Nur lege ich mich da kartenweit fest.
Am einfachsten wäre es tatsächlich, ich könnte den Inhalt von name:de und name vergleichen und, falls nicht identisch, einen neues name-Tag bilden. Das wäre im style-file ein Einzeiler - wenn es das eben schon gäbe.
Danke & Gruß, Thomas
Offline
#11 2013-05-23 10:24:21
- couchmapper
- Member
- Registered: 2013-02-17
- Posts: 462
Re: MkgMap: Vergleich Inhalt von zwei Tags (name und name:de)
Ich denke, das auf der Wiki-Seite ist nur ein Beispiel. Da Osmium ein generisches Framework ist, kann man da wohl mehr oder weniger beliebige Logik einbauen, also auch das was Du gerne abbilden möchtest.
Offline
#12 2013-05-23 10:56:41
- Oli-Wan
- Member

- From: NRW
- Registered: 2010-09-14
- Posts: 2,814
Re: MkgMap: Vergleich Inhalt von zwei Tags (name und name:de)
Kein "Spezialist" hier, sorry, aber hast Du mal eine Vorverarbeitung der .pbf-Dateien mit osmium probiert?
Die Frage stelle ich mir auch jedes Mal, wenn derartige Fragen aufkommen. Warum versuchen, alles mit einem Werkzeug zu machen? Warum keine Vorverarbeitung mit geeigneten Werkzeugen vornehmen? Von einem Programm wie mkgmap kann man kaum erwarten, daß es sämtliche denkbaren Bearbeitungen der vorhandenen Daten unterstützt. Das ist schlichtweg nicht seine Aufgabe.
Mit Osmium ist eine solche Vorverarbeitung in der Tat simpel. Die größte Komplikation ist, daß Osmium::Handler::Base OSM-Objekte nur const& liefert und man sie daher erst kopieren muß. Deshalb hat es auch geschlagene 45 Minuten gedauert, folgendes zu programmieren:
#define OSMIUM_WITH_PBF_INPUT
#include <osmium.hpp>
#include <osmium/input/pbf.hpp>
#include <osmium/output.hpp>
#include <osmium/output/pbf.hpp>
template <class THandler> class JoinNameTagsHandler : public Osmium::Handler::Forward<THandler> {
public:
void joinNameTags (Osmium::OSM::TagList& t) {
if (t.get_value_by_key ("name") && t.get_value_by_key ("name:de")
&& strcmp (t.get_value_by_key ("name"), t.get_value_by_key ("name:de"))) {
Osmium::OSM::TagList newTagList;
std::string name = std::string (t.get_value_by_key ("name:de"))
+ std::string (" (") + std::string (t.get_value_by_key ("name")) + std::string (")");
newTagList.add ("name", name.c_str ());
for (Osmium::OSM::TagList::const_iterator i = t.begin (); i != t.end (); ++i) {
if (strcmp (i->key(), "name") && strcmp (i->key(), "name:de"))
newTagList.add (i->key (), i->value ());
}
t.clear();
t = newTagList;
}
}
void node (const shared_ptr<Osmium::OSM::Node>& node) {
shared_ptr<Osmium::OSM::Node> copy (new Osmium::OSM::Node (*node));
joinNameTags (copy->tags ());
Osmium::Handler::Forward<THandler>::node (copy);
}
void way (const shared_ptr<Osmium::OSM::Way>& way) {
shared_ptr<Osmium::OSM::Way> copy (new Osmium::OSM::Way (*way));
joinNameTags (copy->tags ());
Osmium::Handler::Forward<THandler>::way (copy);
}
void relation (const shared_ptr<Osmium::OSM::Relation>& relation) {
shared_ptr<Osmium::OSM::Relation> copy (new Osmium::OSM::Relation (*relation));
joinNameTags (copy->tags ());
Osmium::Handler::Forward<THandler>::relation (copy);
}
JoinNameTagsHandler<THandler> (THandler& next) : Osmium::Handler::Forward<THandler> (next) {}
};
int main (void) {
Osmium::OSMFile infile;
Osmium::OSMFile outfile;
infile.set_type_and_encoding ("pbf");
outfile.set_type_and_encoding ("pbf");
Osmium::Output::Handler out (outfile);
JoinNameTagsHandler<Osmium::Output::Handler> h (out);
Osmium::Input::read (infile, h);
return 0;
}Kompilieren mit dem Osmium-üblichen Bibliotheken-Rattenschwanz -lz -lprotobuf-lite -losmpbf -lpthread. Das Programm liest pbf aus der Standardeingabe und schreibt pbf in die Standardausgabe, aber das läßt sich bei Bedarf natürlich anpassen. Ansonsten sollte es die Aufgabe erfüllen.
Last edited by Oli-Wan (2013-05-23 13:18:06)
No animals were harmed in the writing of this posting.
Offline
#13 2013-05-23 13:07:35
- softcake
- Member
- Registered: 2009-05-01
- Posts: 214
Re: MkgMap: Vergleich Inhalt von zwei Tags (name und name:de)
Die Frage stelle ich mir auch jedes Mal, wenn derartige Fragen aufkommen. Warum versuchen, alles mit einem Werkzeug zu machen? Warum keine Vorverarbeitung mit geeigneten Werkzeugen vornehmen? Von einem Programm wie mkgmap kann man kaum erwarten, daß es sämtliche denkbaren Bearbeitungen der vorhandenen Daten unterstützt. Das ist schlichtweg nicht seine Aufgabe.
Naja, einen Vergleich von zwei Tag-Inhalten halte ich jetzt nicht für derart exotisch.
Jedenfalls danke für den "Code-Schnipsel". Ich habe schon in C und C# programmiert und verstehe prinzipiell, was der Code bewirkt, wenn auch viel Unbekanntes dabei ist. Mir wird wohl nichts anderes übrig bleiben, als mich in die osmium-Thematik einzuarbeiten. Das Wetter ist ja eh gerade bescheiden...
Gruß, Thomas
Offline
#14 2013-05-23 13:11:43
- couchmapper
- Member
- Registered: 2013-02-17
- Posts: 462
Re: MkgMap: Vergleich Inhalt von zwei Tags (name und name:de)
Ich habe schon in C und C# programmiert und verstehe prinzipiell, was der Code bewirkt, wenn auch viel Unbekanntes dabei ist. Mir wird wohl nichts anderes übrig bleiben, als mich in die osmium-Thematik einzuarbeiten. Das Wetter ist ja eh gerade bescheiden...
Das ganze als Javascript mit osmjs wäre cool, das würde bestimmt vielen Leuten weiterhelfen, die sich mit C/C++ eher die Finger brechen.
-> klappt leider nicht, nur CSV und Shapefile werden als Export aus Javascript heraus unterstützt.
Last edited by couchmapper (2013-05-23 21:39:55)
Offline
#15 2013-05-23 13:34:40
- Oli-Wan
- Member

- From: NRW
- Registered: 2010-09-14
- Posts: 2,814
Re: MkgMap: Vergleich Inhalt von zwei Tags (name und name:de)
Jedenfalls danke für den "Code-Schnipsel". Ich habe schon in C und C# programmiert und verstehe prinzipiell, was der Code bewirkt, wenn auch viel Unbekanntes dabei ist. Mir wird wohl nichts anderes übrig bleiben, als mich in die osmium-Thematik einzuarbeiten.
Der "Code-Schnipsel" ist ein komplettes, kompilierbares Programm auf Osmium-Basis. Das sollte auch deutlich machen, wie simpel der Umgang mit Osmium ist, wenn man erst einmal den Einstieg geschafft hat (für den es leider kein Tutorial oder dergleichen zu geben scheint, nur die API-Dokumentation und die mitgelieferten Beispiele): Für die gängige Aufgabe eines spezialisierten Filterprogramms braucht man beispielsweise nur eine einfache Handler-Klasse auf Basis von Osmium::Handler::Base oder Osmium::Handler::Forward. In main() die OSMFile-Objekte für Ein- und Ausgabe und eine Handler-Instanz anlegen, Osmium::Input::read() aufrufen; alles andere erledigt die Bibliothek. Das obige Beispiel ist für Osmium-Maßstäbe schon relativ kompliziert, weil die Objekte verändert werden sollen und die Osmium-API für die Übergabe an einen Handler nur Referenzen auf const-Objekte vorsieht, wodurch das Kopieren notwendig wird. Ferner erlaubt Osmium::OSM::TagList bzw. Osmium::OSM::Tag keinen Schreibzugriff auf die Tags, daher der etwas mühsame Umweg über die komplette Neuanlage der TagList.
No animals were harmed in the writing of this posting.
Offline
#16 2013-05-23 14:35:20
- quasilotte
- Member
- Registered: 2011-01-29
- Posts: 379
Re: MkgMap: Vergleich Inhalt von zwei Tags (name und name:de)
Fehlpost
Last edited by quasilotte (2013-05-23 14:38:25)
Offline
#17 2013-05-23 15:47:56
- aighes
- Member
- From: Shanghai
- Registered: 2009-03-29
- Posts: 5,383
- Website
Re: MkgMap: Vergleich Inhalt von zwei Tags (name und name:de)
Mir wird wohl nichts anderes übrig bleiben, als mich in die osmium-Thematik einzuarbeiten. Das Wetter ist ja eh gerade bescheiden...
Da halte ich das Nutzen der Adresssuche für deutlich einfacher.
Herunterladen von den vorgerechneten Grenzen.
location-autofill=is_in,nearest
index
bounds=./data/bounds.zipObige 3 Parameter hinzufügen und die zusätzlichen Zeilen für den Style aus dem default-style kopieren und dann siehe #2. Aber das musst du wissen.
Viele Grüße
Henning
Offline
#18 2013-05-24 07:42:23
- softcake
- Member
- Registered: 2009-05-01
- Posts: 214
Re: MkgMap: Vergleich Inhalt von zwei Tags (name und name:de)
Da halte ich das Nutzen der Adresssuche für deutlich einfacher.
Herunterladen von den vorgerechneten Grenzen.location-autofill=is_in,nearest index bounds=./data/bounds.zipObige 3 Parameter hinzufügen und die zusätzlichen Zeilen für den Style aus dem default-style kopieren und dann siehe #2. Aber das musst du wissen.
Klingt erst mal einfacher und weniger zeitintensiv.
Mal dumm gefragt: Woher bekomme ich die bounds.zip?
Offline
#19 2013-05-24 08:45:27
- aighes
- Member
- From: Shanghai
- Registered: 2009-03-29
- Posts: 5,383
- Website
Re: MkgMap: Vergleich Inhalt von zwei Tags (name und name:de)
Beispielsweise von dort: http://www.navmaps.eu/boundaries
Viele Grüße
Henning
Offline