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 
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.