Region hervorheben

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.

Danke
Martin

warum fragst du nicht einfach diejenigen, die das erstellt haben??? im impressum stehe kontakte und ansprechpartner haufenweise drin.

gruss
walter

p.s. ist ein interessanter mix: basis-karte osm, luftbilder bing und strassenkarte navtec. microsoft hat kräftig mitgeholfen.

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.

Auf der genannten Seite scheinen es allerdings keine unterschiedlichen Layer zu sein. Eine Kachel als Beispiel: http://at0.cdn.ecmaps.de/WmsGateway.ashx.jpg?Experience=oberbayern&Id=120230000&MapStyle=t

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);
                }
 

Das Schnipsel erzeugt mehrere Boxes mit “dickem Rand”, was man bestimmt auch eleganter hinbekommen hätte.
Das Ergebnis kann man hier sehen: http://wnordmann.homeunix.com/otm/plz.html?zoom=8&lat=54.79773&lon=7.71771&layers=B00FTTTT
Die plz-Karte ist leider down, da ein Datenbank-Import läuft.

Gruss
Walter

*) ja ja, ich kann die Finger nicht von den MPs lassen :wink:

moin moin,

ich hab das nochmal aufgegriffen und in die PLZ-Karte integriert.
Die Lösung basiert rein auf PostGIS und OpenLayers.

Gruss
Walter

p.s. ich denke drüber nach, die Real-Time-Karte in eine Offline-Version umzustellen.
Bessere Performance bei nicht top aktuellen Daten - was mein ihr?

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.

Wenn die Grenzen von 1918 nimmst, dann ist es perfekt :smiley:

wer will denn so kleinlich sein?

http://de.wikipedia.org/w/index.php?title=Datei:HRR_1400.png&filetimestamp=20110923153946

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

Gruss
Walter

Oh das ist ein schönes Feature. Gut gemacht Warmbacher :slight_smile:

Was wird da eigentlich hervorgehoben? DACH so wie es in dem Screenshot aussieht, aber auf http://wnordmann.homeunix.com/otm/plz.html?zoom=6&lat=51&lon=10&layers=B00FTTTT z.Zt. DACH + Bornholm?

Schick ist auf jeden Fall!

Schick ja, aber bei mir werden keine PLZ angezeigt, unten rechts nur ein endlos laufender Balken.

hi,

@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 :frowning:

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