Re: [Talk-de] Overpass API 0.7.4: Differenz-Operator
> Der Differenz-Operator ist eine sinnvolle Erweiterung. Nur bin ich mit > der Benennung nicht so glücklich - wie mit anderen Syntax-Elementen ja > auch/nicht (wie namentlich print und recurse). [...] > "Difference" ist mir zu nahe an "Intersect". Natürlich muss die > Overpass API nicht SQL übernehmen, doch gibt SQL eine schöne > theoretische Basis her (z.B. dass ein weiterer Operator "INTERSECT" > heissen könnte :-). > > Ich schlage daher vor, lieber vom EXCEPT Operator/Statement zu > sprechen. Was meinst du dazu? Namen sind Schall und Rauch, und ich bin grundsätzlich offen für eine systematische Umbenenneung. Bisher haben die Statements ihre Namen von C++ bezogen (und dort heißt es in der sTL set_union, set_intersection und set_difference. Die Benennung von "recurse" (besser wäre "traverse", "follow- link" oder einfach "follow") ist ebenso wie die sorgsam wieder vermiedene Bezeichnung "clause" (besser wohl "conditional") dagegen ein Betriebsunfall, mit dem ich auch nicht glücklich bin. Generell ergäbe es durchaus Sinn, sich eher an SQL zu orientieren, da vermutlich mehr Datennutzer mit SQL als mit fortgeschrittenem C++ vertraut sind. Das gibt aber insgesamt nochmal einen neuen Dialekt, so dass ich die Idee notieren würde, wenn für eine sehr viel spätere Version 1.0 eine Generalüberholung der Sprache ansteht. Andere leidige Themen sind z.B. die Reihenfolgen Lat-Lon versus Lon-Lat oder die Frage, wo genau ein Semikolon stehen muss oder darf. Vermutlich gibt es weitere solche Punkte. Es sind aber auch Themen, die endlos viel Zeit vereinnahmen können, so dass ich in den nächsten Monaten erst einmal noch fehlende Funktionalität nachrüsten möchte und Syntax-Diskussionen zurückstelle. Viele Grüße, Roland ___ Talk-de mailing list Talk-de@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-de
Re: [Talk-de] Overpass API 0.7.4: Differenz-Operator
Lieber Roland Hut ab wie du es schaffst, ein recht performantes und verlässliches OSM API für die weltweite OSM-DB zu implementieren - und es erst noch immer weiter auszubauen! Ich weiß, wovon ich spreche, wenn ich an den Betrieb des Kort Games denke. Der Differenz-Operator ist eine sinnvolle Erweiterung. Nur bin ich mit der Benennung nicht so glücklich - wie mit anderen Syntax-Elementen ja auch/nicht (wie namentlich print und recurse). Diese Differenz gehört zu den "Set Operationen" und gemäss SQL Standard heissen die UNION, INTERSECT und EXCEPT - und sie werden unterstützt u.a. von PostgreSQL, MySQL/MariaDB, SQLPlus sowie von MS SQL Server und DB2. Nur Oracle weicht davon ab und kennt statt EXCEPT => MINUS. "Difference" ist mir zu nahe an "Intersect". Natürlich muss die Overpass API nicht SQL übernehmen, doch gibt SQL eine schöne theoretische Basis her (z.B. dass ein weiterer Operator "INTERSECT" heissen könnte :-). Ich schlage daher vor, lieber vom EXCEPT Operator/Statement zu sprechen. Was meinst du dazu? LG, Stefan Am 2. August 2013 17:54 schrieb Roland Olbricht : > Liebe Mitmapper, > > eine neue Version der Overpass API, Version 0.7.4 steht auf > http://overpass-api.de > zur Verfügung. Auf der Rambler-Instanz folgt das Update in den nächsten Tagen. > Neben zahlreichen behobenen Bugs ist vor allem die Abfrage nach Ways und damit > auch Relationen in kleinen Bounding-Boxen effizienter geworden. Damit sollte > sich mit dem POI-Overlay-Prototyp > http://overpass.apis.dev.openstreetmap.org/ > jetzt zügig arbeiten lassen. > > An Erweiterungen der Syntax gibt es zwei: Zum einen "global deklarierte > Bounding-Boxen"; diese werde ich morgen genauer erläutern, wenn das > korrespondierende JOSM-Plugin mirrored_download sich aktualisiert hat. > > Zum anderen der Differenz-Operator. Er dient dazu, Suchen der Art "alle > Objekte die X haben/sind, aber nicht Y haben/sind" zu finden. Zum Beispiel > hier alle Nodes, die einen Wert für "maxheight" gesetzt haben, aber nicht Teil > einer Straße (d.h. eines ways mit Tag "highway") sind: > > http://overpass-turbo.eu/s/I6 > > // Neu in Overpass 0.7.4: Der Differenz-Operator > > [bbox:50.6,7.0,50.8,7.3]; > ( > node[maxheight]; // Alle Nodes mit irgendeinem Wert für "maxheight" > - > (way[highway];>;); // die nicht auf irgendeiner Form von Straße liegen > ); > out; > > Für den besonders häufigen Fall, dass es um "hat Tag X, aber nicht Tag Y" > geht, empfehle ich weiterhin die bekannte Syntax mit "[...!~...]". Diese > arbeitet effizienter als der Differenzoperator es kann. > > http://overpass-turbo.eu/s/I8 > > // Neu in Overpass 0.7.4: Der Differenz-Operator > // > // Wenn es bloß um nicht gesetzte Tags geht, sollten diese lieber > // als Bedingung aufgelistet werden und nicht als Differenz-Operator. > // Das funktioniert schneller > > [bbox:50.7,7.0,50.75,7.1]; > ( way[highway=residential][name!~'.']; // Ways mit Tag "highway", aber ohne > Tag "name". > >; > ); > out; > > Alle Details zur neuen Version gibt es im Wiki: > http://wiki.openstreetmap.org/wiki/Overpass_API/versions > > Viele Grüße, > > Roland > > > ___ > Talk-de mailing list > Talk-de@openstreetmap.org > http://lists.openstreetmap.org/listinfo/talk-de ___ Talk-de mailing list Talk-de@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-de
[Talk-de] Overpass API 0.7.4: Differenz-Operator
Liebe Mitmapper, eine neue Version der Overpass API, Version 0.7.4 steht auf http://overpass-api.de zur Verfügung. Auf der Rambler-Instanz folgt das Update in den nächsten Tagen. Neben zahlreichen behobenen Bugs ist vor allem die Abfrage nach Ways und damit auch Relationen in kleinen Bounding-Boxen effizienter geworden. Damit sollte sich mit dem POI-Overlay-Prototyp http://overpass.apis.dev.openstreetmap.org/ jetzt zügig arbeiten lassen. An Erweiterungen der Syntax gibt es zwei: Zum einen "global deklarierte Bounding-Boxen"; diese werde ich morgen genauer erläutern, wenn das korrespondierende JOSM-Plugin mirrored_download sich aktualisiert hat. Zum anderen der Differenz-Operator. Er dient dazu, Suchen der Art "alle Objekte die X haben/sind, aber nicht Y haben/sind" zu finden. Zum Beispiel hier alle Nodes, die einen Wert für "maxheight" gesetzt haben, aber nicht Teil einer Straße (d.h. eines ways mit Tag "highway") sind: http://overpass-turbo.eu/s/I6 // Neu in Overpass 0.7.4: Der Differenz-Operator [bbox:50.6,7.0,50.8,7.3]; ( node[maxheight]; // Alle Nodes mit irgendeinem Wert für "maxheight" - (way[highway];>;); // die nicht auf irgendeiner Form von Straße liegen ); out; Für den besonders häufigen Fall, dass es um "hat Tag X, aber nicht Tag Y" geht, empfehle ich weiterhin die bekannte Syntax mit "[...!~...]". Diese arbeitet effizienter als der Differenzoperator es kann. http://overpass-turbo.eu/s/I8 // Neu in Overpass 0.7.4: Der Differenz-Operator // // Wenn es bloß um nicht gesetzte Tags geht, sollten diese lieber // als Bedingung aufgelistet werden und nicht als Differenz-Operator. // Das funktioniert schneller [bbox:50.7,7.0,50.75,7.1]; ( way[highway=residential][name!~'.']; // Ways mit Tag "highway", aber ohne Tag "name". >; ); out; Alle Details zur neuen Version gibt es im Wiki: http://wiki.openstreetmap.org/wiki/Overpass_API/versions Viele Grüße, Roland ___ Talk-de mailing list Talk-de@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-de