Markus writes:
Hallo Peter,
liegt der code, speziell der Teil bzgl. des clusterings offen?
Das gefällt mir nämlich sehr gut!
Die Idee stammt von Lars Lingner
Leider nicht. Das hat nicht im Geringsten mit OpenLayers zu tun.
Auf der Einstiegsseite zur Karte sind 150.000 Amenities in einem Bereich den
OpenLayers laden will. Das zum Client zu schicken und dort mit Javascript zu
clustern halte ich für Blödsinn.
Von daher habe ich auch diesen Ansatz nicht weiterverfolgt.
Ziel war die Daten bereits auf dem Server zu reduzieren.
Ich dachte, dass es da etwas praktisches in PostgreSQL geben müsste. Im PHP
code der die Datenbank abfragt wollte ich mich nicht mit bounding-Box
vergleichen rumplagen.
Was ganz tolles habe ich nicht gefunden, die Lösung wie sie jetzt ist halte
ich aber auch für ganz pfiffig.
Mein Ansatz ist es die Koordinaten der Punkte auf ein "Gitter" zu runden das
der Größe der Symbole der jeweiligen Zoomstufe entspricht. Dafür gibt die
Website auch den aktuellen Zoomlevel bzw. Auflösung an das Backend weiter.
In der Datenbank werden die einzelnen Treffer dann auf dieses Gitter
abgebildet:
// calculate clustering value. resolution is per pixel, so multiply by
size of icon, take overlap factor into account
$clvalue = 32*$resolution*0.9;
$cluster = ",
st_astext(st_makepoint(round(st_x(way)/$clvalue)*$clvalue,round(st_y(way)/$c
lvalue)*$clvalue)) as cluster";
die neue Spalte "cluster" fasse ich dann später mit GROUP BY zusammen,
über count() ermittle ich noch die Anzahl an Elementen pro Gitterpunkt.
Die jetzige Umsetzung entscheidet nur ob sie ein Clustericon verwendet oder
nicht. Denkbar sind auch verschiedene Icons in Abhängigkeit von der Zahl
der Einträge darunter. Die Werte könnten auch direkt an den Client
geschickt werden um dort mit openLayers geometrien die Darstellung zu
machen. z.B. Kreise um so größer je mehr Einträge oder kräftigere Farben
oder auch eine Zahl in dem Icon die die Anzahl der geclusterten Elemente
anzeigt.
Quellcode (GPL) ist seit der Veröffentlichung verfügbar, ist auch auf der
Toolserver Seite so verlinkt.
http://svn.toolserver.org/svnroot/stephankn/
Ich freue mich wenn ihr den Code für etwas sinnvolles verwenden könnt.
Wenn sich daran was verbessern lässt: Gerne. Nichts ist perfekt. Ich freue
mich auch wenn ihr einen Link auf eure Anwendung schickt.
Vielleicht lässt sich dafür ja auch eine Art Bibliothek bauen.
Abfragen nach Spezialfeatures sind bestimmt eine häufigere Anwendung.
Stephan
_______________________________________________
Talk-de mailing list
Talk-de@openstreetmap.org
http://lists.openstreetmap.org/listinfo/talk-de