Как я могу найти тег / путь другим способом / областью с помощью 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;

Скриншоты результатов:

здесь индустрия с танками, теперь мне нужна только индустрия с танками темно-красная точка - индустрия с hot_water_tanks, мне нужен только результат с индустрией

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
Другие вопросы по тегам