Hallo liebes Forum,
ich habe ein interessantes Feature auf dieser Karte gesehen: http://maps.oberbayern.de/
Durch das Ausgrauen der Umgebung wird eine einzige Region hervorgehoben. Wir arbeiten auch mit selbst gerenderten Kacheln (Mapnik). Ich vermute aber, dass der Effekt eher durch eine zweite Layer entsteht. Hat von Euch jemand Ahnung, wie dieser Effekt erreicht werden kann? Würde mich über ein paar Tips freuen.
wäre es ein Ansatz, wenn man nur eine Grenze in einen Renderer lädt und alles, was nicht in der Grenze ist, mit transparent grauen Farbe zu rendern. Wenn man das ohne Layerswitcher in OL übereinander legt, käme das dann raus.
hi,
sowas ist “ganz einfach” mit OL hinzukriegen - ich hab nur gerade kein wirklich passendes Beispiel zur Hand.
Das Prinzip: man erzeugt mit OpenLayers.Geometry.Polygon ein Multipolygon (*) mit outer=gesammter Kartenbereich und inner=gewünschtes Polygon.
Danach übergibt es man an OpenLayers.Feature.Vector.
for (var i = 0; i < bbox_extents.length; i++) { // schleife über bboxes
ext = bbox_extents[i];
var pointList = [];
pointList.push(new OpenLayers.Geometry.Point(ext[0] ,ext[1]));
pointList.push(new OpenLayers.Geometry.Point(ext[0] ,ext[3]));
pointList.push(new OpenLayers.Geometry.Point(ext[2] ,ext[3]));
pointList.push(new OpenLayers.Geometry.Point(ext[2] ,ext[1]));
pointList.push(pointList[0]);
inner = new OpenLayers.Geometry.LinearRing(pointList);
pointList = [];
edge = 0.05;
pointList.push(new OpenLayers.Geometry.Point(ext[0]-edge ,ext[1]-edge));
pointList.push(new OpenLayers.Geometry.Point(ext[0]-edge ,ext[3]+edge));
pointList.push(new OpenLayers.Geometry.Point(ext[2]+edge ,ext[3]+edge));
pointList.push(new OpenLayers.Geometry.Point(ext[2]+edge ,ext[1]-edge));
pointList.push(pointList[0]);
outer = new OpenLayers.Geometry.LinearRing(pointList);
border = new OpenLayers.Geometry.Polygon([outer,inner]).transform(
new OpenLayers.Projection("EPSG:4326"),
map.getProjectionObject());
box = new OpenLayers.Feature.Vector(border);
boxes.addFeatures(box);
}
Mein Vorschlag wäre ein transparentes Overlay mit den PLZ-Gebieten mit Mapnik zu rendern. Die Grenzen dürften doch zu großen Teilen in OSM verfügbar sein.
meine Grundidee war es, die Sache möglichst dynamisch zu machen (obwohl Ländergrenzen ja fast statisch sind).
Die Daten für die Karte decken inzwischen ganz Europa ab - die Auswertung liefert aber bei verschiedenen Ländern (z.B. NL oder UK) noch keine vernünftigen Werte, da diese ganz unterschiedliche Systeme bei den PLZ haben und das Clustern dort noch nicht funktioniert.
Kommt jetzt eine neues Land dazu, ändere ich kurz die SQL-Abfrage für das “Fenster” und das war’s dann.
Performance-mässig fällt das Teil nicht ins Gewicht; der Server braucht ca 2-3 Sekunden und lädt die Daten eh nur einmal pro Session hoch (OpenLayers.Strategy.Fixed() ).
@g0ldfish: angezeigt werden die Länder, wo die Auswertung funktioniert/funktionieren sollte. Die Liste ist aber noch nicht komplett.
War nen kleines Problem mit Dänemark - 2 outer rings, nur der erste wurde dargestellt und das war nun mal Bornholm
@chris: jo, die karte ist grottenlangsam. allerdings kommen Daten erst ab Zoom 13 und höher und dann dauerts auch noch 1-2 Minuten.
ich baue das Teil mal um, wird aber einige Tage dauern.
Gruss
walter
könnte eventuell an 9.1 liegen. unter 8.4 ging es noch einigermassen.