OpenLayers: Cluster Strategy mit Icons

Habe das bereits unter /Dev gepostet, leider bekam ich keine Antwort :frowning:

Und zwar bringe ich POIs aus einer KML Datei auf eine Map. Diese wollte ich nun gerne clustern, damit das übersichtlicher wird für höhere Zoomstufen. Ich stelle mir da ein Icon mit einer Zahl drin vor.
Leider sind die einzigen Cluster Strategy Beispiele die ich finde nicht für Icons ausgelegt. Hat einer von euch sowas vielleicht schon mal gemacht?

Gemacht nicht, aber auf einer GoogleKarte schonmal gesehen. Evtl. kannst du dem Quelltext etwas entnehmen…

Bsp: http://www.nafcamp.com/de/

Google API funzt so nicht mit OpenLayers.
Das einzige was ich kenne ist z.B. http://toolserver.org/~stephankn/playground/
Aber die machen das ohne Cluster :frowning:

Also wenn du dir die Seite von netzwolf.info einmal anschaust. Dann entdeckst du dort eine Clusterung. Je nach Thema eine vor der Auslieferung und eine nach der Auslieferung.
Ich meine die Karte mit den I-Symbolen.

Hi viw,

meinst Du diese hier?
http://www.netzwolf.info/kartografie/osm/stolpersteine.phtml

Die setzen leider nicht die Cluster Strategie von OL ein sondern was selbstgemachtes :frowning:

moin moin,

cluster mit unterschiedlichen icons hab ich -noch- nicht gemacht. daher hier keine konkrete antwort.

du hast hier zwei verschiedene “probleme”, die ich an deiner stelle erst einmal getrennt anpacken würde:
cluster als solche und unterschiedliche icons abhängig von “irgendwas”.
bei cluster muss ich passen.
alle versuche in diese richtung scheiterten bisher daran, dass auch bei clustern alle daten auf dem client landen und erst danach die cluster gebildet werden.
d.b. die performance ist immer noch uas (unter aller sau). das merkt man bei meiner plz-karte immer dann, wenn einige hundert plz-nodes auf dem schirm sind.
da werde ich mich wohl mal darum kümmern müssen, das clustering gleich auf dem server zu machen.
solltest du auch drüber nachdenken, wenn die sachen machen möchtest, die in diese größenordnung kommen.
bei reinen pois ist das wohl noch nicht notwendig.

verschiedene icons oder auch verschieden große icons hab ich mit style-rules gemacht:


var myStyle = new OpenLayers.Style(
                    {
                       cursor:            "help" 
                    },
                    {
                       rules: [
                               new OpenLayers.Rule({
                               minScaleDenominator: 20001,
                               filter: new OpenLayers.Filter.Comparison({
                                  type: OpenLayers.Filter.Comparison.EQUAL_TO,
                                  property: "type", 
                                  value: "platform"
                               }),                               
                               symbolizer: {
                                  externalGraphic: "images/bus_halt.png",
                                  graphicWidth:     12,
                                  graphicHeight:    12                                 
                               }
                            }),
                               new OpenLayers.Rule({
                               minScaleDenominator: 10001,
                               maxScaleDenominator: 20000,
                               filter: new OpenLayers.Filter.Comparison({
                                  type: OpenLayers.Filter.Comparison.EQUAL_TO,
                                  property: "type", 
                                  value: "platform"
                               }),                               
                               symbolizer: {
                                  externalGraphic: "images/bus_halt.png",
                                  graphicWidth:     16,
                                  graphicHeight:    16                                 
                               }
                            }),
.... snip

var halts =   new OpenLayers.Layer.Vector(
                    "<img src=\"images/bus_halt.png\"width=\"12\" height=\"12\"></img>Haltestellen", {
                              protocol: new OpenLayers.Protocol.HTTP({
                              url:              "db/cgi-bin/get_data79.cgi",
                              format:           new OpenLayers.Format.Text({extractStyles: false}),
                              params: {
                                   extractAttributes:     true,
                                   fetch:         "halts"
                  }
                    }),
                    styleMap:         myStyle, <!-- --------------------- style -->                                                                  
                    projection:       map.displayProjection,
            strategies:       [new OpenLayers.Strategy.BBOX({ratio: 1, resFactor: 1.1})  
//                                 ,new OpenLayers.Strategy.Cluster()
                                      ]
                });  

hier ist die größe der icons abhängig vom zoom-faktor.
ich hoffe, deine verwirrung etwas gesteigert zu haben aber eventuell bring es dich weiter :wink:
gruss
walter

p.s. ich muss dieses projekt mal wieder fortsetzen. das mit dem postleitzahlen sollte ja nur ein kleiner ableger sein.
schick mir ne pm, wenn du das mal live sehen möchtest.

Danke Warmbacher.

Also eine sehr gute Anleitung habe ich bereits gefunden:
http://openflights.org/blog/2009/10/21/customized-openlayers-cluster-strategies/

Nun muss ich mal schauen, ob man das irgendwie hinkriegt das Styling der KML Datei weiter zu nutzen…

huii, die anleitung ist klasse: cluster und styles zusammen.

kurz zum kml: ich hatte damit auch erst angefangen. mir ist es aber nicht gelungen an alle features ranzukommen.

label: “${label}” …

wollte einfach nicht. aber eventuell hast du mehr glück.