Karte mit Ballung der Benutzer zeigen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Karte mit Ballung der Benutzer zeigen

    Hallo,

    ich würde in einem Projekt gern folgendes realisieren:
    Es werden statistische Daten von Nutzern gesammelt, hauptsächlich IP, Land, Region. Diese Daten sollen einmal stündlich genutzt werden, um eine Karte zu rendern, auf der die Verteilung der Nutzer sichtbar wird. Nehmen wir an, 10 Benutzer aus Berlin, 5 aus Hamburg, 2 aus München. Dann soll eine Karte zu sehen sein, auf der in Berlin die größte Menge (z.B. als großer Punkt) verzeichnet ist, in Hamburg die zweitgrößte Menge, in München die kleinste Menge.

    Ich überlege nun, mit welcher Technologie ich das realisiere. Ich dachte an OpenStreetMap oder GoogleMaps. Die Karte soll lediglich den deutschsprachigen Raum zeigen. Die Mengen auf der Karte müssen nicht dynamisch (Hover-Effekt mit Anzeige der Menge) sein, wenn es dennoch geht, wehre ich mich natürlich nicht dagegen :) Programmiert wird in Ruby...

    Hat jemand schon einmal ähnliches realisiert?

    Edit: Ich sehe gerade, dass die Karte im Forum ähnlich gemacht ist. Wird die live generiert oder wird die Karte in gewissen Abständen gerendert? Welche Daten braucht die Google API dafür?
  • Die Karte im Forum ist Teil des Gmap Plugins, das ich entwickelt habe.
    Die Karte ist nicht performant - alles wird live berechnet und die Informationen werden gruppiert nach dem Location String (also Usereingabe) - nicht nach Koordinate.
    Alles also eher suboptimal ;)

    Willst du es clientseitig mit JavaScript gruppieren, machst du das sehr einfach mit dem [google]Google Maps Marker Manager[/google]
    Man kann es auch serverseitig Clustern - entweder direkt in MySQL oder mit anderen Tools: [google]"Google Maps" cluster server[/google]
    Zum serverseitigen Clustering habe ich auch mal ne kommerzielle Anwendung entwickelt, bin gerade auf dem Sprung, aber ich kann dir hier sicherlich noch mehr erzählen ;)
  • Also auf jeden Fall solltest du alles erstmal in Koordinaten umrechnen.
    Dazu gibts eine HTTP API von Google, der man einfach einen Suchstring wie "Berlin" als Parameter übergibt und man als Rückgabe eine Koordinate erhält.
    Siehe dazu code.google.com/apis/maps/documentation/geocoding/

    Danach musst du die Benutzer irgendwie clustern. Am einfachsten machst du das indem du einfach die Koordinate nach Kommastellen rundest:

    Quellcode

    1. ... GROUP BY ROUND(coord, 0)


    Aber den Punkt zeigst du natürlich Gleichzeitig im Mittel an:

    Quellcode

    1. SELECT AVG(coord), COUNT(userID) FROM ...


    Je nach DBMS musst du das Query natürlich noch anpassen. MySQL hat eigene Geo Spatial Keys.

    Wenn das Gruppieren durch Runden zu ungenau ist (schon blöd, wenn Koordinate 9.1 und 9.2 seperate Bubbles machen) musst du die Karte in richtige Cluster unterteilen.
    Dazu würde ich aber empfehlen das in einer Scriptsprache zu machen.
  • Also umrechnen brauche ich dir nicht. Ich nutze die Maxmind GeoLiteCity DB (lokal installiert) um IPs zu tracen. Ich bekomme daraus schon folgende Daten

    city: Wismar
    latitude: 53.9000015258789
    country_code: DE
    longitude: 11.4666996002197
    country_code3: DEU
    country_name: Germany
    region: "12"

    Die clustere ich dann. Und wie genau bekomme ich die auf die Karte? Naja, ich probier das heut Abend mal...