[Talk-de] Vector layer mit strategie/protocol.HTTP Was: Eigener Overlay: FOSSGIS-Server oder toolserver.org?
On Tue, Jun 01, 2010 at 03:36:24PM +0200, Sarah Hoffmann wrote: Die Styles werden im GeoJOSN mitgeliefert und dann per StyleMap zugewiesen. Sprich, ein Eintrag in der GeoJOSN-Datei sieht etwa so aus: { type: Feature, geometry: {type: Point, coordinates: [8.545645, 47.4117363]} ,properties: { graphic: circle, name: Bahnhof Oerlikon 781, color: #0ff, bgcolor: #000}} Die Style-Map etwa so: var stylemap = new OpenLayers.StyleMap( {default : { pointRadius : 3, fillColor: ${color}, strokeColor: ${bgcolor}, graphicName: ${graphic}, label: ${name}, strokeWidth: 1 }); Der Schritt fehlte mir - Ich habe das bisher tuechtig manuell gemacht 8). Bzw im moment ist es so das ich via Ajax quasi eine Stylemap beim umschalten des visualisierten datasets nachlade - Das kommt aus dem selben CGI was die pflege simpel macht - weil - neues dataset - 30 zeilen ins CGI und gut ... Jetzt muss ich das SRS900913 vs WGS84 nochmal klaeren - Die URL wirft bei strategie/protocol.http natuerlich die default projection des layers mit raus und keinen zoom level. D.h. anstatt /cgi-bin/getdata2?b=51.82844228767418t=51.84265608515574l=8.314342412719814r=8.363180074460946zoom=15data=maxspeed kriege ich ein: /cgi-bin/getdata2?bbox=923809.42114287,6769035.8748913,929246.00477867,6771596.5153383 muss ich mal durch den OpenLayers code waten ... Reprojektion im Javascript ist vielleicht nicht pfiffig - das wird die PostGIS besser/schneller koennen. Den zoom level benutze ich im moment um das anzeigen bestimmter features erst ab bestimmten zoom leveln zu ermoeglichen und das data=something ist quasi das featureset was ich anzeigen moechte bzw was das cgi aus der DB grabbeln soll ... Das wuerde man ja ggfs noch via weiterer options im http hinkriegen - muss mal sehen wie ich das setzen kann ohne den layer jeweils komplett wegzuwerfen und neu zu instanzieren ... Flo -- Florian Lohoff f...@zz.de Es ist ein grobes Missverständnis und eine Fehlwahrnehmung, dem Staat im Internet Zensur- und Überwachungsabsichten zu unterstellen. - - Bundesminister Dr. Wolfgang Schäuble -- 10. Juli in Berlin signature.asc Description: Digital signature ___ Talk-de mailing list Talk-de@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-de
Re: [Talk-de] Vector layer mit strategie/protocol.HTTP Was: Eigener Overlay: FOSSGIS-Server oder toolserver.org?
On Tue, Jun 01, 2010 at 04:09:37PM +0200, Florian Lohoff wrote: On Tue, Jun 01, 2010 at 03:36:24PM +0200, Sarah Hoffmann wrote: Jetzt muss ich das SRS900913 vs WGS84 nochmal klaeren - Die URL wirft bei strategie/protocol.http natuerlich die default projection des layers mit raus und keinen zoom level. D.h. anstatt /cgi-bin/getdata2?b=51.82844228767418t=51.84265608515574l=8.314342412719814r=8.363180074460946zoom=15data=maxspeed kriege ich ein: /cgi-bin/getdata2?bbox=923809.42114287,6769035.8748913,929246.00477867,6771596.5153383 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. 'data=maxspeed' kannst du wohl einfach an die URL anhängen. 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 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. Gruss Sarah ___ Talk-de mailing list Talk-de@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-de
Re: [Talk-de] Vector layer mit strategie/protocol.HTTP Was: Eigener Overlay: FOSSGIS-Server oder toolserver.org?
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. 'data=maxspeed' kannst du wohl einfach an die URL anhängen. Okay - das geht halbwegs: protocol.options.params.data=maxspeed; So kann ich da nachtraeglich das aendern. 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. 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. Flo -- Florian Lohoff f...@zz.de Es ist ein grobes Missverständnis und eine Fehlwahrnehmung, dem Staat im Internet Zensur- und Überwachungsabsichten zu unterstellen. - - Bundesminister Dr. Wolfgang Schäuble -- 10. Juli in Berlin signature.asc Description: Digital signature ___ Talk-de mailing list Talk-de@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-de
Re: [Talk-de] Vector layer mit strategie/protocol.HTTP Was: Eigener Overlay: FOSSGIS-Server oder toolserver.org?
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
Re: [Talk-de] Vector layer mit strategie/protocol.HTTP Was: Eigener Overlay: FOSSGIS-Server oder toolserver.org?
On Tue, Jun 01, 2010 at 09:14:01PM +0200, Sarah Hoffmann wrote: 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. Aeh - noe - da ich ja Mapnik tiles nehme ist der basis layer erstmal 900913. Die Datenbank ist nen osmosis spiegel - damit 4326 - Also irgendwie muss ich das also reprojezieren - die mapnik tiles eignen sich da nicht so ... 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. Yep - habe ich jetzt mal mit einem event zoomend gebaut - nicht schoen aber scheint erstmal zu funktionieren. 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. Man koennte ja nen JSON in einem JSON einpacken ;) D.h. erst mit einem JSON Parser sich das parsen und dann das eine JSON in den GeoJSON parser und das andere anderweitig vernudeln - Okay - Reichlich ineffizient aber wir sind hier ja nicht auf einer Kleinkunstveranstaltung ... 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. Es gibt nen 200 Feature Maximum? Habe ich das noch nicht entdeckt oder wo finde ich das? rgrep 200 im Openlayer findet das hier: Format/ArcXML.js:if (typeof query.featurelimit == number query.featurelimit 2000) { aber nix im Vector Layer oder irgendwo anders Flo -- Florian Lohoff f...@zz.de Es ist ein grobes Missverständnis und eine Fehlwahrnehmung, dem Staat im Internet Zensur- und Überwachungsabsichten zu unterstellen. - - Bundesminister Dr. Wolfgang Schäuble -- 10. Juli in Berlin signature.asc Description: Digital signature ___ Talk-de mailing list Talk-de@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-de
Re: [Talk-de] Vector layer mit strategie/protocol.HTTP Was: Eigener Overlay: FOSSGIS-Server oder toolserver.org?
On 01.06.2010 19:21, Florian Lohoff wrote: [...] 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. Erstmal sorry das ich hier in den Thread so reinplatze. Kennt Ihr die cluster strategy von OpenLayers [1] ? Damit lassen sich nahe beieinander liegende Elemente gruppieren. Beim hineinzoomen teilen sie sich immer weiter auf, je nachdem wieviel Platz ist. Könntet Ihr damit was anfangen? Es wäre schön eine sinnvolle Nutzung mal zu sehen. Lars [1] http://openlayers.org/dev/examples/strategy-cluster.html ___ Talk-de mailing list Talk-de@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-de
Re: [Talk-de] Vector layer mit strategie/protocol.HTTP Was: Eigener Overlay: FOSSGIS-Server oder toolserver.org?
On Tue, Jun 01, 2010 at 10:07:02PM +0200, Lars Lingner wrote: On 01.06.2010 19:21, Florian Lohoff wrote: [...] 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. Erstmal sorry das ich hier in den Thread so reinplatze. Kennt Ihr die cluster strategy von OpenLayers [1] ? Damit lassen sich nahe beieinander liegende Elemente gruppieren. Beim hineinzoomen teilen sie sich immer weiter auf, je nachdem wieviel Platz ist. Könntet Ihr damit was anfangen? Es wäre schön eine sinnvolle Nutzung mal zu sehen. Die Strategie meinte ich. Leider ist sie für diesen Fall nur begrenzt anwendbar. Meine Datenbank hat 25.000 Einträge, die kann ich unter keinen Umständen mit einmal laden ohne den Browser zu überlasten. Deswegen muss das Clustering bereits server-seitig geschehen. Gruss Sarah ___ Talk-de mailing list Talk-de@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-de