[Talk-de] Vector layer mit strategie/protocol.HTTP Was: Eigener Overlay: FOSSGIS-Server oder toolserver.org?

2010-06-01 Diskussionsfäden Florian Lohoff
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?

2010-06-01 Diskussionsfäden Sarah Hoffmann
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?

2010-06-01 Diskussionsfäden Florian Lohoff
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?

2010-06-01 Diskussionsfäden Sarah Hoffmann
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?

2010-06-01 Diskussionsfäden Florian Lohoff
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?

2010-06-01 Diskussionsfäden Lars Lingner
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?

2010-06-01 Diskussionsfäden Sarah Hoffmann
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