Overpass: gerade/ungerade Zahlen

Hallo in die Runde,

ich versuche seit Tagen eine Möglichkeit zu finden, nach geraden oder ungeraden Hausnummern zu filtern.

Habt ihr eine Idee, wie man das anstellen kann? :slight_smile:

Diese Regex

"addr:housenumber"~"[13579]$"

matcht auf alle Hausnummern, die mit 1, 3, 5, 7 oder 9 aufhören. Wen auch “27a” oder so was mit rein soll, ist ne Änderung nötig :slight_smile:

Edit: Diese

"addr:housenumber"~"[13579][^0-9]?"

matcht auf alle Hausnummern, deren erste Zahl (=nur aus Ziffern bestehender Teilstring) ungerade ist. Müsste also auch 15a oder 23/2 mit erfassen. (Akzeptiert overpass kein \d für eine Ziffer?)

Wenn die Hausnummer nur aus Ziffern besteht, dann geht das

[out:json][timeout:25];
nwr["addr:housenumber"~"[02468]$"]({{bbox}});
// print results
out body;
>; out skel qt;

Das Stichwort ist regular Expression : https://wiki.openstreetmap.org/wiki/Overpass_API/Overpass_QL#Value_matches_regular_expression_.28.7E.2C_.21.7E.29

Vielen Dank! Mit Regex hab ich schon gearbeitet, nur mit den Zahlen ist mir neu.

Kann man das auch innerhalb einer Gruppierung nach Straßen für eine Abfrage von einem Bereich mit Polygonen nutzen?

Dieses Beispiel liefert noch einen Fehler:


[out:csv(housenr; false)][timeout:45];

(
nwr["addr:street"]({{bbox}});

for (t["addr:street"])
{
   if (number(t["addr:housenumber"])~"[13579]$")
   {
   // Anzeige nur ungerade Hausnummern
   make stat housenr=min(number(t["addr:housenumber"])) + " bis " + max(number(t["addr:housenumber"]));
   }
   else 
   {
   // Anzeige nur gerade Hausnummern
   make stat housenr=min(number(t["addr:housenumber"])) + " bis " + max(number(t["addr:housenumber"]));
   } out;
};

);

out;