On Tue, Jun 01, 2010 at 07:21:49PM +0200, Florian Lohoff wrote:
> On Tue, Jun 01, 2010 at 04:37:25PM +0200, Sarah Hoffmann wrote:
> > Die Projektion sollte eigentlich die des Layers sein. Sprich, einfach 
> > noch die Option 
> >   projection : new OpenLayers.Projection("EPSG:4326")
> > beim erstellen des Vector-Layers hinzufügen. Dann sollte es gehen. 
> > Allerdings
> > ist es am klügsten, wenn du den Vektor-Layer in der gleichen Projektion 
> > hast,
> > wie die Daten im GeoJOSN, sonst wird beim Laden jedes Feature einzeln
> > umprojeziert.
> 
> Eben - d.h. entweder ich nutze die BBOX in 900913 und lasse PostGIS die bbox 
> erst
> in EPSG:4326 umprojezieren und das ergebniss des statements wieder
> zu EPGS:900913. Oder ich mache den vector layer komplett in 4326 und lasse
> das Javascript umprojezieren -> Viel CPU auf dem Client.

Ich bin verwirrt. Warum überhaupt 900913 verwenden, wenn deine Datenbank
im 4326 ist? Display-Projection deiner Karte ist auch 4326. Wenn also deine
Datenbank in 4326 ist, die BBOX-Anfrage in 4326 ankommt, du die Daten im
GeoJOSN in 4326 auslieferst und dein Vektor-Layer in 4326 ist, dann 
ist keine Umrechnung nötig, weder im Server noch im Client.

> > Für das Problem mit dem Zoom habe ich allerdings auch keine befriedigende
> > Lösung gefunden, sondern die moveEnd()-Funktion gehackt:
> > 
> > moveEnd: function(obj) {
> >   if (this.curzoom < this.map.zoom) {
> >     this.refresh({force : true});
> >   }
> >   this.curzoom = this.map.zoom;
> > }
> > 
> > Damit wird das Neuladen erzwungen, wenn hereingezoomt wird. (Welche Features
> > geladen werden, wird durch die Grösse des Gebiets bestimmt, i.e. bei der
> 
> Ich habe ja nicht das problem das ich neu laden muss sondern das ich den zoom
> level an das cgi mitliefern will. Ich mache z.b. auch teilweise vom zoomlevel
> abhaengig was ich darstelle. In der maxspeed map sieht man ab zoom 16 oder 17
> dann kleine Schilder auf den Straßen.

Das sollte funktionieren, wenn du zusätzlich den entsprechenden
Parameter im Protocol-Objekt änderst.

> > Datenbankabfrage gibt es ein 'limit 200'. Daher brauche ich das nicht in
> > der URL.) Wenn du da eine bessere Lösung findest, bin ich ganz Ohr.
> 
> Aeh - das finde ich doof - Weil dann wie bei keepright oder openstreetbugs 
> einfach nur mal 200 elemente an einer random position im sichtbereich 
> auftauchen. 
> Koennte den betrachter dazu verleiten zu glauben das das alles ist.
> 
> Deshalb werfe ich den zoom mit in das CGI script im Ajax request und im CGI 
> script sage ich dann 
> 
>       if ($zoom < 14) {
>               return {}
>       }
> 
> Dann ist nichts sichtbar ... Schoen waere noch einen status mitzuliefern der
> dargestellt wird, nach dem motto "Please zoom to show elements" - Aber das ist
> wieder nicht so schoen mit GeoJSON zu machen ...
> 
> Ich hatte mal ueberlegt eben den response string zu zerlegen. D.h. erste
> zeile ist status und dann folgt das GeoJSON so in der art.

Der GeoJOSN-Standard definiert, dass man der Datei beliebige Attribute
mitgeben kann. Leider wirft OpenLayers diese weg. Da muss man wohl mal
eine Erweiterung bauen.

Ich dachte eher daran, Server-seitig eine Gruppierungsfunktion zu bauen.
OpenLayers hat soetwas ja mit der Paging-Strategy, aber leider gruppiert
die nur fertige Features, was bedeutet, dass sie immernoch unter dem
200-Feature-Maximum von OpenLayers leidet. 

Gruss

Sarah

_______________________________________________
Talk-de mailing list
Talk-de@openstreetmap.org
http://lists.openstreetmap.org/listinfo/talk-de

Antwort per Email an