Ist da vielleicht schon was verkehrt? gibt es einen Trick vielleicht die Daten in größerem Umfang abzufragen sprich den Aufbau der URL zu verkürzen ???
Du fragst jedes Tagg einzeln ab. Das heißt immer eine BBOX, immer die Nodes usw. Das ist ist ausgesprochen ineffektiv.
Besser und kürzer wäre es je Schlüssel eine Abfrage zu machen und die Werte, die dich interessieren als einen regulären Ausdruck anzugeben. Das wäre a) deutlich kompakter und b) deutlich schneller.
PS: Das Ganze als Link zu Overpass-Turbo hätte den Vorteil, dass man direkt sieht, wie du deine Abfrage gestaltet hast.
wie ich schon geschrieben habe greife ich auf die Komponente von Netzwolf zurück - jemanden der mir bei OL sehr viel geholfen hat und dem ich einiges zu verdanke haben. Ansonsten wären meine Karten nicht da wo diese heute sind.
Leider hat er mir bei der Anfrage zu dem hier gestellten Problem eine klare Absage der Unterstützung erteilt. Schade zumal ich vermute das auch andere Nutzer dieser JS-Datei irgendwann an Grenzen stoßen werden.
Deinen Hinweis mit der vereinfachung der Abfrage werde ich mir mal ansehen und wenn ich dann weiß wie die effektivere URL aufgebaut sein muss werde ich das einbauen. Damit sollten einiges an Zeichen gespart werden und kann diese für andere Objekte nutzen.
Auf overpass-Turbo hatte Netzwolf noch verwiesen - nicht das diese Antwort untergegangen ist.
Ich muss nochmal mich etwas mit der Overpass auseinander setzen und wenn ich weiß wie ich mehrere verschiedene POI in einer Box abfragen kann, wie von Edbert vorgeschlagen (wenn ich ihn richtig verstanden habe) dann muss die Funktion getQueryParams noch auf die optimierte URL angepaßt werden. Ich hoffe, das ich das hinbekomme.
Versuch mal die OverpassXML-Funktion so umzubauen:
//------------------------------------------------------------
// Baue aus der keyValues eine overpass-Anfrage.
//------------------------------------------------------------
overpassXML: function (keyvalues) {
if (!(keyvalues instanceof Array)) keyvalues = [keyvalues];
var bbox = this.map.getExtent().
transform(this.map.getProjectionObject(),this.map.displayProjection);
var bboxQuery = OpenLayers.String.format (
'(${bottom},${left},${top},${right})',
bbox);
var components = [];
for (var i in keyvalues) {
var keyvalue = keyvalues[i];
var key = keyvalue.key;
if (!key) continue;
var value = keyvalue.value;
var kvlist = [];
kvlist.push ("[");
if (key) kvlist.push ('"' + this.html(key) + '"');
if (value) kvlist.push ('="' + this.html(value) + '"');
kvlist.push ("]");
components.push ('node' + bboxQuery + kvlist.join(' ') + ';');
}
var xml = '[out:json];(' + components.join('') + ');out;';
return xml;
},
Das ist jetzt die selbe Abfrage, nur in Overpass QL.
Hab jetzt nicht getestet obs funktioniert, aber das sollte schonmal deutlich kürzer werden.
Ich hab noch nicht gecheckt an welcher stelle des Codes dann tatsächlich die Abfrage ausgeführt wird. Sonst könnte man das noch zu POST ändern.
im Zug hatte ich keine Zeit gefunden weiter in Overpass zu lesen und umso mehr war ich über das Posting von TEL000 erfreut. Ich habe dieses in der PHP-Datei von oben eingebunden
und was soll ich sagen - es hat auf anhieb funktioniert!!!
Testweise habe ich beide Anfragen mal ausgewählt ~8300 gegenüber ~3300 Zeichen. Das würde Platz für so manche Parameter mehr bedeuten.
Wie gesagt - ich bin noch nicht weiter eingestiegen aber. In der OL-Abfrage wird immer die Box und dann das Tag übergeben. Wäre nicht noch eine Vereinfachung möglich ? Erst die Box und dann nur noch die Tags?
Nur mal so eine Idee - aber für mich reicht diese Lösung vorerst alle mal aus.
Vielen Dank für Eure Unterstützung an dieser Stelle.
… falls einer von Euch sich die Karte mal angesehen hat - wie findet Ihr diese? Werde diese in nächster Zeit nochmal mehr vorstellen - derzeit werden Flächen allerdings noch nicht ausgewertet.
Das geht wohl nicht, da alle Bedingungen mit UND verknüpft werden. Verschiedene Values zu einem gemeinsamen Key lassen sich aber sehr wohl zusammenfassen, siehe Beschreibung von EvanE weiter oben.
Weiterhin kann man die bbox als Parameter in der URL übergeben und diese bbox in der Overpass QL mehrfach verwenden ohne jedesmal den konkreten Wert hinzuzufügen.
Beispiel: (ich benutze diesen Ansatz selbst in meiner Karte mit PUT-Requests):
=> hier sieht man schön, dass (bbox) mehrfach vorkommt, aber nur einmal als Wert übertragen wird
OpenLayers.Layer.Vector in Verbindung mit einer BBOXStrategy würde das Hinzufügen des bbox-Parameter bspw. schon automatisch erledigen. Wie das mit dem PopupMarker funktioniert, kann ich leider nicht genau beschreiben.
Wie man das schafft, dass die bbox nur einmal angegeben wird habe ich auch noch nicht verstanden.
In meiner Karte wird für jeden Tag drei Mal die bbox angegeben, weil ich nodes, ways und relations abrufe.
Genau das hatte ich auch probiert nachdem ich deinen Post gelesen hatte. Allerdings ohne Erfolg. Ich habe immer ein leeres Ergebnis zurückbekommen.
Jetzt wo ich mich überzeugen konnte, dass dein Query funktioniert, hab ich mir das mal genauer angesehen. Und jetzt weiß ich auch warum mein Versuch nicht funktioniert hat.
In deinem Query sind Lat und Lon vertauscht. Jetzt funktionierts auch bei mir. Danke für den Tipp.
Offensichtlich ist es nicht einfach ein Suchen-Ersetzen …