Ich schätze mal, dass da intern mit float/double gearbeitet wird und für die Ausgabe keine definierte Zahl an Nachkommastellen festgelegt ist (oder festgelegt werden kann?).
Kann mir jemand einen Tipp geben, ob das ein Bug in Mapnik oder im deutschen Stil ist und wo ich am besten den Bugreport aufmachen kann? Bisher hatte ich nach mapnik und textsymbolizer gesucht, kann die Treffer aber nicht so recht einordnen. Auf openstreetmap.org tritt das Problem übrigens nicht auf.
Für den deutschen Stil ist Sven Geggus verantwortlich. Der ele-Wert wird von mapnik 1:1 unformatiert aus der Postgres-Datenbank übernommen.Dort ist er als typ Text definiert.
Sven meinte dazu, dass ele in der Datenbank doch als Fließkommazahl abgelegt ist. Die Lösung sieht aktuell so aus: der ele-Wert wird gerundet, Berge werden jetzt auf den Meter genau angezeigt.
(Berg-)Höhen werden seit altersher mit (bis zu) 2 Nachkommastellen (“centimetergenau”) angegeben,
so ist das “alle Nachkommastellen kappen” kein Fix, sondern bestenfalls ein workaround.
hmm, dann müsste das “bis zu 2 Nachkommastellen” nur in ein performantes SQL-Statement für Postgres übersetzt werden. Hab’ leider lokal keine Installation zum Ausprobieren.
Klappt das evtl. schon mit: select TO_CHAR(ele,‘FM9999D99’) as ele from planet_osm_point where … ?
Der Haken daran ist, dass postgis über diesen sehr häufigen Fall stolpert, weswegen Import als real oder int vermutlich einfacher ist (sofern das import-Tools toleranter ist):
=> select round('1.23456789 Meter',2);
ERROR: invalid input syntax for type numeric: "1.23456789 Meter"
Alternativ müsste man irgendwo zwischen Import und Rendern einen Putzjob unterbringen, der alles bereinigt, was sich nicht als Gleitkommazahl interpretieren lässt.
Wenn ich das richtig verstanden habe, liegen die Höhenwerte schon als Fließkommazahl vor, d.h. mit Buchstaben oder anderen Sonderzeichen braucht man sich nicht mehr herumzuschlagen.
Ist TO_CHAR(ele,‘FM9999D99’) für diese Konvertierung zu gebrauchen?
Hat leider nicht funktioniert, siehe erstes Beispiel unten aus dem Ausschnitt, den mir Sven gemailt hat.
Da wird immer noch ein Komma ausgegeben, obwohl es keine Nachkommastelle gibt.
Gibt es noch andere Vorschläge/Ideen?
$ psql gis
psql (9.1.1)
Geben Sie »help« für Hilfe ein.
gis=# set lc_numeric='de_DE.UTF-8';
SET
gis=# select TO_CHAR(812::float,'FM9999D99');
to_char
---------
812,
(1 Zeile)
gis=# select TO_CHAR(812.1::float,'FM9999D99');
to_char
---------
812,1
(1 Zeile)
gis=# select TO_CHAR(812.12::float,'FM9999D99');
to_char
---------
812,12
(1 Zeile)
gis=# select TO_CHAR(812.123::float,'FM9999D99');
to_char
---------
812,12
(1 Zeile)