Итерация по подстроке тега в Overpass Turbo - PullRequest
1 голос
/ 16 апреля 2020

Я хочу использовать разрабатываемую версию Overpass (https://olbricht.nrw/ovt/#) для создания сделанных на заказ областей с помощью функции hull ().

Мои данные для создания вокруг корпуса () в теге «ref», который для этих объектов отформатирован как [n] - [m], и я хочу использовать только часть [n] для группировки.

Единственное решение, которое мне удалось make - сделать выбор для каждого значения [n], использовать convert для создания производного объекта, а затем объединить их все вместе. Очень громоздкий в обслуживании.

Мой код выглядит следующим образом:

[out:json];

{{geocodeArea:Gentofte Municipality}}->.a;

(
  node["power"="substation"](area.a);
  way["power"="substation"](area.a);
)->.trafoer;

.trafoer out;.trafoer>;out geom;

node["ref"]["power"="cable_distribution_cabinet"](area.a)->.skabe;

node.skabe["ref"~  "^11-"]->.ix; (.skabe; - .ix;)->.skabe; (.sum; .ix convert skab zone=  "11", ::=::, ::geom=geom();)->.sum;
node.skabe["ref"~  "^13-"]->.ix; (.skabe; - .ix;)->.skabe; (.sum; .ix convert skab zone=  "13", ::=::, ::geom=geom();)->.sum;
node.skabe["ref"~  "^15-"]->.ix; (.skabe; - .ix;)->.skabe; (.sum; .ix convert skab zone=  "15", ::=::, ::geom=geom();)->.sum;
node.skabe["ref"~  "^21-"]->.ix; (.skabe; - .ix;)->.skabe; (.sum; .ix convert skab zone=  "21", ::=::, ::geom=geom();)->.sum;
node.skabe["ref"~  "^43-"]->.ix; (.skabe; - .ix;)->.skabe; (.sum; .ix convert skab zone=  "43", ::=::, ::geom=geom();)->.sum;
node.skabe["ref"~ "^132-"]->.ix; (.skabe; - .ix;)->.skabe; (.sum; .ix convert skab zone= "132", ::=::, ::geom=geom();)->.sum;
node.skabe["ref"~ "^198-"]->.ix; (.skabe; - .ix;)->.skabe; (.sum; .ix convert skab zone= "198", ::=::, ::geom=geom();)->.sum;
node.skabe["ref"~ "^241-"]->.ix; (.skabe; - .ix;)->.skabe; (.sum; .ix convert skab zone= "241", ::=::, ::geom=geom();)->.sum;
node.skabe["ref"~ "^254-"]->.ix; (.skabe; - .ix;)->.skabe; (.sum; .ix convert skab zone= "254", ::=::, ::geom=geom();)->.sum;
node.skabe["ref"~ "^357-"]->.ix; (.skabe; - .ix;)->.skabe; (.sum; .ix convert skab zone= "357", ::=::, ::geom=geom();)->.sum;
node.skabe["ref"~ "^424-"]->.ix; (.skabe; - .ix;)->.skabe; (.sum; .ix convert skab zone= "424", ::=::, ::geom=geom();)->.sum;
node.skabe["ref"~ "^441-"]->.ix; (.skabe; - .ix;)->.skabe; (.sum; .ix convert skab zone= "441", ::=::, ::geom=geom();)->.sum;
node.skabe["ref"~ "^444-"]->.ix; (.skabe; - .ix;)->.skabe; (.sum; .ix convert skab zone= "444", ::=::, ::geom=geom();)->.sum;
node.skabe["ref"~ "^499-"]->.ix; (.skabe; - .ix;)->.skabe; (.sum; .ix convert skab zone= "499", ::=::, ::geom=geom();)->.sum;
node.skabe["ref"~ "^686-"]->.ix; (.skabe; - .ix;)->.skabe; (.sum; .ix convert skab zone= "686", ::=::, ::geom=geom();)->.sum;
node.skabe["ref"~ "^733-"]->.ix; (.skabe; - .ix;)->.skabe; (.sum; .ix convert skab zone= "733", ::=::, ::geom=geom();)->.sum;
node.skabe["ref"~ "^820-"]->.ix; (.skabe; - .ix;)->.skabe; (.sum; .ix convert skab zone= "820", ::=::, ::geom=geom();)->.sum;
node.skabe["ref"~ "^821-"]->.ix; (.skabe; - .ix;)->.skabe; (.sum; .ix convert skab zone= "821", ::=::, ::geom=geom();)->.sum;
node.skabe["ref"~ "^907-"]->.ix; (.skabe; - .ix;)->.skabe; (.sum; .ix convert skab zone= "907", ::=::, ::geom=geom();)->.sum;
node.skabe["ref"~"^1145-"]->.ix; (.skabe; - .ix;)->.skabe; (.sum; .ix convert skab zone="1145", ::=::, ::geom=geom();)->.sum;
node.skabe["ref"~"^1267-"]->.ix; (.skabe; - .ix;)->.skabe; (.sum; .ix convert skab zone="1267", ::=::, ::geom=geom();)->.sum;
node.skabe["ref"~"^1396-"]->.ix; (.skabe; - .ix;)->.skabe; (.sum; .ix convert skab zone="1396", ::=::, ::geom=geom();)->.sum;
node.skabe["ref"~"^1492-"]->.ix; (.skabe; - .ix;)->.skabe; (.sum; .ix convert skab zone="1492", ::=::, ::geom=geom();)->.sum;
node.skabe["ref"~"^1517-"]->.ix; (.skabe; - .ix;)->.skabe; (.sum; .ix convert skab zone="1517", ::=::, ::geom=geom();)->.sum;
node.skabe["ref"~"^1555-"]->.ix; (.skabe; - .ix;)->.skabe; (.sum; .ix convert skab zone="1555", ::=::, ::geom=geom();)->.sum;
node.skabe["ref"~"^1692-"]->.ix; (.skabe; - .ix;)->.skabe; (.sum; .ix convert skab zone="1692", ::=::, ::geom=geom();)->.sum;
node.skabe["ref"~"^1960-"]->.ix; (.skabe; - .ix;)->.skabe; (.sum; .ix convert skab zone="1960", ::=::, ::geom=geom();)->.sum;
node.skabe["ref"~"^4029-"]->.ix; (.skabe; - .ix;)->.skabe; (.sum; .ix convert skab zone="4029", ::=::, ::geom=geom();)->.sum;
node.skabe["ref"~"^4205-"]->.ix; (.skabe; - .ix;)->.skabe; (.sum; .ix convert skab zone="4205", ::=::, ::geom=geom();)->.sum;
node.skabe["ref"~"^4531-"]->.ix; (.skabe; - .ix;)->.skabe; (.sum; .ix convert skab zone="4531", ::=::, ::geom=geom();)->.sum;
node.skabe["ref"~"^4782-"]->.ix; (.skabe; - .ix;)->.skabe; (.sum; .ix convert skab zone="4782", ::=::, ::geom=geom();)->.sum;
node.skabe["ref"~"^5009-"]->.ix; (.skabe; - .ix;)->.skabe; (.sum; .ix convert skab zone="5009", ::=::, ::geom=geom();)->.sum;
node.skabe["ref"~"^6842-"]->.ix; (.skabe; - .ix;)->.skabe; (.sum; .ix convert skab zone="6842", ::=::, ::geom=geom();)->.sum;
node.skabe["ref"~"^7106-"]->.ix; (.skabe; - .ix;)->.skabe; (.sum; .ix convert skab zone="7106", ::=::, ::geom=geom();)->.sum;

.skabe out;
.sum out geom;

.sum;
for (t["zone"])
{
  make substation_area
      substation_ref=_.val,
      source=set("{"+type()+" "+id()+"}"),
      ::geom=hull(gcat(geom()));
  out geom;
}

{{style:

  node[!zone], way {
    color:red; fill-color:red; width:3; text: ref;
  }

  node[zone], way {
    color:darkgreen; fill-color:green; width:1; symbol-size:4;
  }

  node[power=substation], way {
    color:black; fill-color:blue; width:1; dashes:5,5; symbol-size:12; text: ref;
  }

  area {
    text: substation_ref;
  }

}}

Есть ли более элегантный способ запустить for l oop непосредственно в теге вместо создания производного Сначала объекты?

...