Как я могу найти тег / путь другим способом / областью с помощью Overpass?
Я хочу, чтобы все отрасли в "Хемнице" имели "hot_water_tank".
Этот запрос дает мне все объекты с тегами "landuse"="industrial"
а также "man_made"="hot_water_tank"
, Мне нужно только "landuse"="industrial"
содержащий "hot_water_tank"
,
area
["name"="Chemnitz"]->.a;
out body qt;
(
way
(area.a)
["landuse"="industrial"];
way(area.a)
["man_made"="hot_water_tank"];
);
out body qt;
>;
out skel qt;
я попробовал это
area
["name"="Chemnitz"]->.a;
(
way
(area.a)
["landuse"="industrial"]->.c;
way(area.a)
["man_made"="hot_water_tank"]->.s;
(.c; .s;)->.all;
(.c; - .s;)->.I_without_T;
(.s; - .c;)->.T_wihtout_I;
((.all; - .I_without_T;) - .T_without_I;);
);
out body qt;
>;
out skel qt;
Скриншоты результатов:
1 ответ
Решение
Ключевым моментом здесь было использование двух малоизвестных операторов из Overpass QL. Во-первых, is_in дает нам области, в которых находятся объекты, а во-вторых, нам нужно извлечь отношения и / или пути из указанных областей с помощью pivot.
Вот пример кода:
(area["name"="Chemnitz"]) -> .chemnitz; //Chemnitz
(
way(area.chemnitz)["man_made"="hot_water_tank"];
(._;>;)
)->.hotwatertank; // all tanks in Chemnitz
(.hotwatertank is_in;) -> .areas; // areas in which tanks are located
(
way(pivot.areas)["landuse"="industrial"];
relation(pivot.areas)["landuse"="industrial"];
)->._; // convert areas to ways and relations with "landuse"="industrial" pair
(._;._ >;); // get geometry
out body qt; //print