[gelöst] overpass: milestone in der Nähe von milestone

Ich hab mir via modifizierung einer anderen Abfrage mal folgendes Dingsi gebaut:

    node({{bbox}})
    	["highway"="milestone"]
  ->.milestones;  

    node({{bbox}})(around.milestones:50)
  		["highway"="milestone"]
  ->.nearbystone;

 ((.nearbystone;);>;); out meta;

Probleme hierbei:

  • Die Abfrage macht nicht, was ich will :wink:
  • Die Abfrage findet “sich selbst”, also einzeln stehende Milestones sind sich selbst in der Nähe
  • egtl. ist das gar nicht die Abfrage, die ich will, sondern ich suche eine, die KEINE milestones in der Nähe von milestones findet. (das ist hier nur die Annäherung an das eigentliche Problem)

Was mache ich falsch, bzw. wie komme ich an “einzelne” Milestones heran?

Zuerst dachte ich, naja, einfach milestones von nearbystones abziehen - aber da kommt dann eher das Gegenteil raus.
Aber kommt man da nicht irgendwann in eine endlose Rekursion?
Naja, und diese “IST NICHT IN” Abfrage in overpass, da hapert es bei mir auch, das bekomm ich nicht in meinen Nüschel.
So ein ähnliches Problem hatte ich ja auch bei Ermittle nur Knoten, die nicht zu einem Way gehören

Das Problem mit dem Nüschel hab ich auch, deswegen versuche ich mich da ranzutasten. Nun bin ich aber erst mal an einem Punkt, wo mir unklar ist, warum obige Abfrage (siehe Link) schon nicht das macht, was ich erwarte.

Vielleicht könnte man das “sich-selbst-finden” mit einem Vergleich der Objekt-ID ausfiltern.
Ich bekomm es aber auch gerade nicht hin :confused:

Also, dass was ich oben mit der “Rekursion” geschrieben habe, ist ja auch erst einmal Mist. Letztendlich geht es ja bei Overpass vielmehr um die “Mengenlehre”. Normalerweise hätte ich es wie folgt erwartet:
Zuerst suche ich nach allen Milestones (Menge A), dann suche ich in dieser Menge nach “direkten” NachbarMilestones und erhalte Menge B, abschließend subtrahiere ich die Menge B von A. Leider habe ich keinen Hinweis darauf gefunden, ob in der around-Suche die initialen für diese Suche verwendeten Objekte eben auch mit in die Menge landen … danach schaut es ja im Moment aber ja aus.

@MKnight: Rückfrage, ob ich dich richtige verstanden habe: du möchtest in deiner o.g. Abfrage bzw. verlinkten Kartenausschnitt nur den EINEN Milestone im Süden und nicht mehr die beiden Milestones im Norden am Thüringer Tor, richtig?

Haargenau. (Konkret geht es darum, dass zumindest an Autobahnen die immer im Paar auftauchen müss(t)en.)

Warum in meiner Abfrage die Doppelten gefunden werden ist mir mittlerweile (glaube ich) klar: Stein a ist around b und Stein b ist around a.

Was aber nicht erklärt, warum die Abfrage AUCH einzelne auswirft.

Hmm,

mit “(around.milestones:0)” werden ebenfalls alle Steine ausgegeben, d.h. ausgehend von den Objekten in “.milestones;” erfüllen alle diese Objekte bereits schon selbst die im zweiten Teil formulierte (gleiche) Bedingung.
Frage an die Spezis: kann man “around” einen Distanzbereich zuweisen - etwa in der Form “(around.>1) AND (around.<50)” oder lassen sich auf andere Art die bereits bekannten Objekte der ersten Abfrage aus der Ergebnismenge der zweiten Abfrage ausschliessen, wenn diese über die keys nicht unterscheidbar sind ?

Grüße
Rainer

Ich weiss zwar nicht was du suchst, aber vermutlich sind es Dubletten in der Nähe:

node({{bbox}})["highway"="milestone"]->.milestones;  
foreach.milestones->.a((.dubletten; (node(around.a:50).milestones;- .a;);)->.dubletten;);
//(.milestones;); // Ausgabe alle
(.dubletten;); // Ausgabe Dubletten
//(.milestones;- .dubletten;); // Ausgabe ohne Dubletten
out meta qt;

Sehr schön, das isses, danke.

Aber um es nochmal anders zu sagen: genau diese foreach hätte ich persönlich eigentlich hinter around.milestones:50 erwartet …

Wenn ich das richtig verstehe, gibt’s in der Beispielsammlung ein analoges Beispiel als Isolated Buildings, das auch kürzer als die vorgeschlagene Variante ist.

https://wiki.openstreetmap.org/wiki/Overpass_API/Overpass_API_by_Example#Isolated_Buildings

Haha, und ich War gestern bei dem schools-streets Beispiel direkt oben drüber hängen geblieben… wäre ich mal noch ein bisschen nach unten gescrollt.
@mmd: kannst du vielleicht noch etwas über das o.g. Verhalten sagen, warum bei around.subset:# auch die Elemente des Subsets mit dabei sind?

Beim Leistungstest des Beispielsammlung erhielt ich einen Abbruch mit Fehlermeldung.
Error: runtime error: […] Please check /api/status for the quota of your IP address.

Wo kann ich da etwas checken ?

http://overpass-api.de/api/status

Vermutlich hattest du gleichzeitig mehr als zwei laufende Abfragen

Die Query müsste so aussehen: http://overpass-turbo.eu/s/zB0

Vermutlich ist die BBOX zu groß und bei mehrmaligem Test ist dein Quota einfach aufgebraucht. Es steht ja in der Erklärung zum Beispiel dass die Query langsam ist und noch einen Fix benötigt. Einfach ein paar Minuten warten…

Ich denke mal, dadurch dass sie Radius 0 haben dürften sie automatisch bei jeden beliebigen Radius selbst mit drin sein. Vielleicht verstehe ich die Frage auch nicht, ich habe mir den Thread nicht im Detail durchgelesen.

Also müsste man dort >0 einbauen…
Zumindest habe ich auch meine Vorredner so verstanden, dass sie das nicht erwarten würden, dass das Element selbst mit dabei ist.

Danke, es ging um die Adresse.

In der Beispielsammlung == 1 findet alleinstehende milestones,

1 findet Punkte mit einem oder mehreren Partnern.
out center; ist bei nodes verwirrend.
Wichtig wäre auch die copy and paste Fehler mit mit around:0 oder around:1 abzuklopfen.

Ob das laufende Rausschreiben wie Beispielsammlung oder das Speichern in einer Variablen wie unter #8 der schnellere Weg ist kann ich noch nicht sagen.

Ist eigentlich mehr oder weniger Geschmacksache, der Unterschied wird nicht so wesentlich sein. Die Gründe warum http://overpass-turbo.eu/s/zBw auf der Produktion 2s und auf der Dev-Instanz 200ms benötigt liegen eher woanders (u.a. im around Filter und dem Lesen der relevanten Nodes). Darauf bezieht sich ja auch der Kommentar in der Beispielsammlung, dass die Query nicht so flott ist.

Ich hab noch bisschen an der (ursprünglichen) Abfrage rumgestrickt, da sie je nach Grösse der bbox oder des Gebietes in ein timeout reinläuft:
http://overpass-turbo.eu/s/Cr2

hier wird jetzt zusätzlich noch ein Weg (im Beispiel A 4) eingegrenzt, der die Milestones enthält.