Herr Thees

Journalismus, Bloggen, Webdesign und neue Medien

Laut.fm-Stationen in Deutschland-1

Knabberkarte: Laut.fm-Stationen in Deutschland

| 6 Kommentare

Ich habe ein wenig mit der API von laut.fm herumgespielt, der Webradio-Plattform, bei der ich auch selbst ein Radio laufen habe.

Über die API kann man allerhand Informationen über die Webradios und deren Programm auslesen. Leider bisher nur auslesen, eine Möglichkeit die API schreibend zu nutzen und damit von außen z. B. das Sendeprogramm zu ändern, gibt es noch nicht.

Die API spuckt als Daten im JSON-Format aus. Praktischerweise liest Google Refine JSON-Daten ein — und damit steht einem ein großer Spielplatz zur Verfügung! :)

Als einfachen Testlauf wollte ich eine Karte erstellen, auf denen die Standorte der Webradios von laut.fm zu sehen sind. Die Radiomacher haben im Backend von laut.fm die Möglichkeit die Stadt aus der sie Senden anzugeben. Daraus wird ein Datensatz mit der Längen- und Breitenangabe der Stadt angelegt, den man auch über die API auslesen kann.

Dummerweise gibt es in manchen Städten mehrere Radios. Und da mein keine Straße in den laut.fm-Einstellungen angeben kann oder freie Koordinaten, landen alle Radios in der Stand am selben Punkt. Es entsteht also ein Stapel aus Markierungen auf der Karte, von denen aber nur die oberste Sichtbar ist. Was tun?

Die einzige Möglichkeit ist, die Koordinaten der einzelnen Webradios ein klein wenig zu verändern — Google Refine Basic zeigt, wie das geht. Leider sitzen durch diese Transformation der Koordinaten die Punkte auf der Karte auf einer Line — was recht unschön aussieht und bei großen Städte wie Berlin einen “Strich aus Webradios” durch die Landschaft zieht. Eine natürlicher wirkende Verteilung wäre schöner.

Ein Lösungsansatz — noch nicht perfekt — ist folgender:

In der Spalte mit der Längenangabe “Edit cells – Transform …” anwählen. Dann diesen GREL-Code verwenden:

value+(toNumber(row.index - row.record.fromRowIndex) *
toNumber(sin(length(cells["name"].value))) * 0.004)

Die erste Zeile ist analog zu der oben genannten linearen Methode. In der zweiten Zeile wird als Faktor ein “zufallsähnlicher Wert” gebildet. Über die Länge des Wortes in der Spalte “name” wird der Sinuswert berechnet — da sind wir schon nah am Zufall dran. Und dieser Wert wird mit 0.004 multipliziert. Dieser Wert ist noch der Knackpunkt — er bestimmt letztlich, wie nahe die Punkte auf der Karte beieinander liegen sollen. Und das hängt davon ab, ab welchem Zoomfaktor dir Punkte optisch unterscheidbar sein sollen. Und auch davon, wie groß die Stadt ist. In Berlin passen viel mehr Punkte mit größeren Abständen als nach Altötting. Hier muss man einfach Werte ausprobieren.

Dann exportiert man die Karte von Google Refine nach Google Fusion Table, gibt den beiden Koordinatenspalten den Typ “location” und lässt sich schon die Karte visualisieren! :)

[map style="width: 615px ; height:550px ; margin:10px 0px 10px 0px; border: 1px solid black;" lat="49" lon="9" maptype="TERRAIN" z="5" fusion="3909147"]
Link zur Google Fusion Table der Karte

Kategorien: Allgemein, Datenjournalismus | Schlagwörter: , , , , , , , , | Permalink

  • ende

    Cool! Gefällt mir! Plus eins!

    Man kann natürlich schon in’s Orts-Feld eine Straße eingeben, wenn man will. Alles, was Google versteht können wir auch geo-locaten. :)

    Niko.

    • http://herrthees.de/ Ralf Thees

      So gant funktioniert das mit dem Geolokalisieren nicht im laut.fm-Backend. Oder besser gesagt: Ich kann bei mir den Ort gar nicht ändern, er nimmt immer die alten Geokoordinaten. 

      • ende

        Oh. Da gibt’s grad Fehler mit der Google Geo-Location API. Schaun wir uns an.

        • http://herrthees.de/ Ralf Thees

          Danke! :)

      • ende

        Doh. Bisher Google maps API v2 benutzt, weil die JSONP noch unterstützt. Aber die haben sie entweder abgestellt oder das funktioniert aus irgendwelchen anderen Gründen nicht mehr. :S API v3 würde nur per Proxy gehen, weil kein JSONP und keine CORS-Unterstützung. Mit Proxy ist hässlich! Jetzt halt die komplette Maps JS Bibliothek eingebunden. Die kann JSONP. Danke für den Hinweis.

        Niko.

        • http://herrthees.de/ Ralf Thees

          Jetzt klappt’s! :) Danke für das Reparieren! :)