O, to już jest mniej więcej to, czego szukam.
Ale nie rozumiem, czemu na Twoim bboksie wybiera ten i ten budynek, oba bez addr:street . Podejrzewam jakiś kawałek highjway=residential bez nazwy, bo po zmniejszeniu bboksa już tych budynków nie wybiera (więc raczej nie jest to błąd składni, tylko coś zależnego od wcześniej wybranych ulic), ale nie widzę nic takiego w obszarze…
EDIT: HEUREKA! To dalej już sobie poradzę, dzięki!!!
A poza tym robi właśnie to, czego potrzebowałem…
EDIT2: Jeszcze nie do końca rozumiem kombinację ze zbiorem .container, a konkretnie: czemu nie można tego olać i puścić:
(.buildings;.buildings >;)->.result; //get nodes for buildings geometry;
);
(.result;.highways;)-> .result; //merge buildings and highways
.result out;
Próbowałem i gubiło budynki - nie bardzo wiem czemu. Zbiory mają jakieś zakresy i mam inny .result wewnątrz pętli foreacz, a inny poza nią? Zainicjowanie .result w miejscu, gdzie inicjowałeś .container nie pomaga…
EDIT 2,5: Już rozumiem, czemu tak nie można - union wewnątrz pętli buduje nowy zbiór (u Ciebie: .container) po kawałku, czyli dodaje .buildings do dotychczasowej zawartości .container. Powinienem więc dać w pętli (.result; .buildings; .buildings > ) → .result; żeby zadziałało.
EDIT3: Oraz dlaczego nie można zamiast szukać ulic dwukrotnie zrobić:
(
way["highway"="residential"]["name"]({{bbox}});
); //nodeless
(._; ._ >;)->.highways;
tu są wybierane wyłącznie budynki bez addr:street. Ki czort?
EDIT4: Żeby było zabawniej, taki kod:
(
way["highway"="residential"]["name"]({{bbox}});
)->.nodeless; //nodeless
(.nodeless; .nodeless >;)->.highways;
()->.container; //initialize empty set
foreach(
(.nodeless;) -> .a; //get node free highways
(
way["building"]
(if: t["addr:street"] == a.set(t["name"]))
({{bbox}});
relation["building"]
(if: t["addr:street"] == a.set(t["name"]))
({{bbox}});
)-> .buildings;
(.buildings;.buildings >;)->.buildings; //get nodes for buildings geometry;
(.buildings; .container;)->.container; //append to container
);
(.container;.highways;)-> .result; //merge buildings and highways
.result out;
różniący się od poprzedniego wyłącznie użyciem zbioru .nodeless zamiast domyślnego - nie zwraca budynków w ogóle.
Mam wrażenie że nie rozumiem czegoś bardzo istotnego.