Már maga a szűrés is problémás szerintem nálad, inkább valami ilyesmi kellene:
rel["route"="hiking"]["jel"~"(^k$|^p$|^s$|^z$)|(^k|^p|^s|^z)(3$|4$|c$|l$|q$|b$)"](area.searchArea);
a (^k$|^p$|^s$|^z$) a sávokat keresi, tehát k-val, vagy p-vel, vagy s-sel, vagy z-vel kezdődik, és utána vége is. A kifejezések közt a | a VAGY jelzése, a ^ a kifejezés elejét, a $ a végét jelzi.
A zárójel csoportosítást jelez.
A második csoportban keresünk színre, és alakra is, tehát két csoportot is csinálunk, az első arra illeszkedik, ha k,p,s, z az első betű, míg a második a jelzés alakjára, tehát ha az adott karakterre végződik.
Tehát valahol így állunk, ha az összeset le akarjuk kérni:
[out:json][timeout:1225];
{{geocodeArea:Somogy megye}}->.searchArea;
rel["route"="hiking"]["jel"~"(^k$|^p$|^s$|^z$)|(^k|^p|^s|^z)(3$|4$|c$|l$|q$|b$)"](area.searchArea);
(._;>;);
out;
Mivel nekünk nem kell minden, ezért valami olyasminek kellene a következő lépésnek lennie, hogy fogjuk az eredményül kapott kapcsolatok way tagjait, és egy ciklusban megnézzük, hogy hány kapcsolata van, és ha több, mint egy, akkor mehet a kimenetre. (és persze még itt is kell az (area.searchArea), mert a megyén túlnyúló kapcsolatok útjainak is csak a megyén belüliek kellenek) Tehát a foreach is jó irány, csak belülre még kell egy kis egyéb varázslás, de most ehhez már túl fáradt vagyok, ma tuti nem jönne össze, de talán tudod innen folytatni.