[Talk-de] Werte in OSM besser ohne Einheit (war: BHKW)

Frederik Ramm frederik at remote.org
So Feb 13 11:21:24 UTC 2011


Hallo,

M∡rtin Koppenhoefer wrote:
> Ich komme leider nicht aus dem Informatik-Umfeld und selbst "triviale"
> Aufgaben erfordern für mich einiges an Recherche bzw. riskiere ich,
> die Probleme suboptimal zu lösen. Ich nutze derzeit Osmosis, hole mir
> damit einige Elemente aus dem Planet und kombiniere das Ergebnis mit
> einem Italy-Extrakt zu einem komprimierten osm-xml, den ich mit
> osm2pgsql in eine Renderdatenbank einlese. Die Werte übernehme ich
> dabei derzeit einfach so, wie sie aus der db kommen.
> 
> Das Präprocessing wäre also wohl an dieser Stelle sinnvoll (vor dem
> Import in die db). 

Ja - obwohl man es durchaus auch spaeter noch in der Datenbank machen 
koennte, wenn einem das lieber ist.

> Aber welches
> Programm/Vorgehen/Programmier-/Scriptsprache bietet sich dafür an? (Da
> ich das sowieso neu lernen muss, habe ich die Qual der Wahl). Oder
> sowas wie sed / awk? Wie macht Ihr das normalerweise?

Normalerweise muesste man dafuer einen XML-Parser nehmen. Das ist auch 
nicht superkompliziert. Aber - und dafuer kriege ich regelmaessig 
Schelte von "echten Programmierern" - da Du es hier it dem immer 
gleichen Datenproduzenten zu tun hast, kannst Du auch die Annahme 
treffen, dass die Daten immer gleich formuliert sind, d.h., Du bekommst 
immer eine Zeile der Form

    <tag k="population" v="..." />

fuer die Bevoelkerung. Das wiederum heisst, dass Du in einer beliebigen 
primitiven Sprache, u.U. sogar sed/awk, arbeiten kannst. Ein einfaches 
Perl-Skript, das die Bevoelkerung trimmt, saehe z.B. so aus:

#!/usr/bin/perl

while(<>)
{
     if (/<tag k="population" v="(.*)"/)
     {
         printf("<tag k=\"population\" v=\"%d\" />\n", $1);
     }
     else
     {
        print;
     }
}

Nach diesem Muster waere es auch trivial, z.B. noch Leerzeichen zu 
entfernen, oder ein "123.000" zu einem "123000" zu machen:

...
     if (/<tag k="population" v="(.*)"/)
     {
         $p=$1:
         $p =~ tr/. //d;
         printf("<tag k=\"population\" v=\"%d\" />\n", $p);
     }
...

oder ein "MW" in "W" umzurechnen, usw.usw.

Bye
Frederik

-- 
Frederik Ramm  ##  eMail frederik at remote.org  ##  N49°00'09" E008°23'33"




Mehr Informationen über die Mailingliste Talk-de