OpenLayer bbox, pois dynamisch laden, description bei klick nachladen

Hy, ich hab vor ein paar tage mit meinem ersten OSM-Projekt angefangen.

Es geht darum eine Map mit Amateurfunk-relais anzuzeigen http://map.oe5tpo.com.

Derzeit werden die Daten mittels Layer.Text geladen, was aber nach meinen recherchen nicht optimal ist. Das aktuallisieren der daten funktioniert auch nicht befriedigend weil mir die passenden funktionen fehlen (ist dertzeit kompletter schrott).

Ich hab mir das tutorial von http://wiki.openstreetmap.org/wiki/User:Brogo/OpenLayers_Datenbankanbindung durchgelesen, aber er hat selber eigentlich auch keine ahnung von der materie (get-abfragen in dem code sind z.b. sql-injection gefärdet). Ich hab jetzt serverseitig demomäßig eine auswertung wie in dem tutorial hinzugefügt: (example: http://map.oe5tpo.com/data.php/?type=map&bbox=10,10,60,60), also serverseitig ist für erste versuche alles bereit.

Nur durchschaue ich nicht ganz in welcher reihenfolge und weshalb welcher schritt durchgeführt wird (mangelnds kommentare und undurchschaubare doku). Und ich möchte mich nicht zu scripptkiddy runterdegradieren, weil ich wissen will was das eigentlich macht und weil ich den code auch warten und erweitern können muss.

Wenn das geschafft wäre ist eine (wichtige) idee dass die description dynamisch nachgeladen wird, incl. wartesymbol. Das hat den grund dass die datenmenge (später) locker die daten um den faktor 10 vervielfachen können. Und das programm fängt bei mir schon bei ca. 700 punkte zum lacken an, die nicht so viel daten wie später enthalten. Ich hab auch schon eine JSON-Datenschnittstelle dafür geschrieben die ich problemlos auch auf html oder ein anderes datenformat erweitern kann.

mfg, pointhi

EDIT: Hab es geschafft die pois dynamisch zu laden.
Dynamisch description nachladen sollte auch kein problem mehr darstellen, nur die Darstellung bugt noch herum.

Tag pointhi und willkommen hier,

ich glaube nicht, dass Du dir um die descriptions Gedanken machen musst.
OpenLayers wird zäh bei vielen Punkten. Aber nicht wegen der Datenmenge pro Punkt, sondern weil Umprojizieren, Auschnitt bestimmen, Stapeln … so viel Arbeit macht. Ob dann am Punkt ein Roman dranhängt oder eine Zeile sollte mE eher egal sein, sofern die Bandbreite nicht zum Flaschenhals wird.

Grüße, Max

welche punkteanzahl kann man etwa als richtwert annehmen?
, mir geht es bei den daten auch großteils um die datenmengen, die jedes mal übertragen werden. Wenn dann jeder punkt villeicht noch ein bild, etc. hat kommen sich die leute mit langsameren verbindunge verarscht vor :). Und die daten müssen auch gespeichert und verarbeitet werden. Wenn es geht will ich noch das image für die pois darstellung standardmäßig einstellen, sind viele daten für nichts.

Nur als info, später sollen weltweite Amateurfunkrelais angezeigt werden. Die datenbank beinhaltet derzeit über 700 Punkte, und enthält “nur” teile deutschlands, österreich und teile der nachtbarländer. Am Ende vermute ich eine Datenbank mit > 20.000 Punkte, da selbst die Punkte in Österreich bei weitem noch nicht ausgeschöpft sind :). Dazu kommt noch dass Linkstrecken (striche) zwischen später bestimmten punkten angezeigt werden sollen. Für die hat es aber beim herauszoomen zoomstufen keinen sinn (erster sparpunkt :)) .
Fazit: eine echtzeitfähige Darstelllung aller punkte und striche, etc. wird wohl auch der beste computer nicht so einfach mit js schaffen.
Jetzt ist die Frage, was habt ihr für ansätze die poi anzahl bei kleinerem zoomzu verringern? (Wenn ihr sowas benötigt). Meine idee wäre die welt bei größeren zommstufen so einzuteilen dass punkte miteinander verschmelzen, und bei klick die karte entsprechend zoomt. Ob das mit meinem SQL-Wissen in wenigen abfragen schaffbar ist bezweifle ich.

Ich schreibe wieder soviel hintergrundmäßiges :), kurz gesagt, das projekt soll später sehr viel information gefiltert und definiert anzeigen können, ohne dass der browser lackt oder abstürzt. Nicht leicht für jemanden der seit jahren kein js mehr geproggt hat. php ist da nicht so das problem, aber die JS API ist für mich teilweise undurchschaubar.

mfg, pointhi

.

ich sag mal… 500-1000

Ich würde in der Vorverarbeitung eine Gemeindegrenze berücksichtigen und dann “24 POIs in Astadt” beim Marker ausgeben. Dazu gehört dann auch, dass man eine Zoomstufe festlegt, ab der ein POI einzeln oder als Haufen ausgegeben wird. Wäre mit PostGIS einfach, mit MySQL weiss ich nicht, ob das mit “in welchem Polygon liegt dieser Punkt” umgehen kann (kann sein, bin da nicht so auf dem laufenden).

Das Bilden von “natürlich” aussehenden Clustern ist eine Kunst. So als Idee und Clustern für Anfänger wäre das da ein Beispiel. Eine MySQL-Tabelle mit 19000 Gasthäusern und Kneipen. Die BBox wird in 30x20 Teile zerlegt und in jedem Feld wird gezählt, wie viele Kneipen drin sind. Sind das mehr als 5, wird ein roter Marker in der Mitte des Feldes ausgegeben, falls es weniger sind, wird jede einzelne Kneipe blau markiert. Sieht aber halt in niedrigen Zoomstufen ein wenig rasterartig und hässlich aus… (html ist hauptsächlich von Brogo geklaut, das ebenfalls weitgehend geklaute PHP dazu ist das hier)

Grüße, Max

Edit: Alternativ halt in niedrigen Zoomstufen nur wichtige Dinge ausgeben, Mapnik hat in Zoom=7 auch nur Städtenamen. Weiss aber nicht, ob man Deine Relais in wichtig/unwichtig einteilen kann

Ich blende jetzt die punkte ab einem bestimmten layer einfach aus. Hab aber auch eine interressante clustering-art gefunden: http://acuriousanimal.com/code/animatedCluster/. Das erste beispiel funt nicht so gut, das 2. läuft bei mir aber fast fehlerfrei. Nur die Cluster werden beim verschieben der map nicht aktuallisiert. Das ist dann ein feintuning-porjekt für den schluss :).

Dafür hab ich jetzt ein paar neue fragen:

  • Es gibt ein controll das panel heißt, das würde sich nach meinen recherchen ideal dafür eigenen zusätzliche divs bei mouse-position und dem copyright hinzuzufügen. Auch könnte ich so eine panel im style des zoom-buttons machen. Leider funktioniert es nicht so wie es soll, irgendwie werden leere divs mit entsprechenden namen erstellt. Muss ich bei der initalisierung noch was beonderes dafür beachten?

  • Wenn das mit dem pannel klappt, wie kann ich eigene buttons, die js ausführen einbinden?

  • Habt ihr erfahrung mit fullscreen-Modus bei OpenLayer? Ich hab mir jetzt diese api heruntergeladen: http://brad.is/coding/BigScreen/, aber irgendwie funzt es nicht. Es war die einzige api die auch in meinem aktuellen firefox gegangen ist.

  • Schließen-knopf bei den Popups? Meines wissens sind sie im code aktiviert, ich sehe aber nichts und finde mit firebug auch kein dementsprechendes div. Gibt es sowas oder muss ich in die trickkiste greifen? (div im text hinzufügen und absolut positionieren).

  • Geolokalisierung, ich nutze derzeit eine externe api, hab aber herausgefunden dass openlayer das auch beherscht. Gibt es wo beispiele, bzw. ist die openLayer alternative gleichgut oder besser?

das sollte mal das “wichtigste” sein, hoffe es kann die eine oder andere frage beantwortet werden

mfg, pointhi