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! :) Link zur Google Fusion Table der Karte