[Talk-de] Gaststättenkarte

Stephan Knauss osm at stephans-server.de
Fr Jul 2 14:35:23 UTC 2010


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




Mehr Informationen über die Mailingliste Talk-de