立交桥颜色设置不同

时间:2019-03-22 17:25:11

标签: openstreetmap overpass-api

我正在解决这个问题,我必须创建几个不同区域的集合,为这些集合提供所有不同的颜色,然后在地图上显示出来。 几年前,我已经在Photoshop中手动完成了此操作,但是当我今年不得不再次执行此操作时,我正计划对其进行自动化。

因此,一个例子是区域集{“ Rotterdam”,“ Vlaardingen”}将被涂成红色;而区域集{“ Den Haag”,“ Delft”}将被涂成蓝色。

我打算为此使用the Overpass API。但是,尽管我可以创建一组区域并为这些区域着色,但是我无法获得具有不同颜色的多个区域。我想知道这是否可能,如果可以,我将如何做到。似乎应该可行,因为其他选择器也可以具有不同的颜色。

一套着色:

(
rel[name="Rotterdam"];
rel[name="Vlaardingen"];
)->.myArea1;

rel.myArea1[admin_level=10][type=boundary][boundary=administrative];
out geom;

{{style:
  relation
    { color:red; fill-color:red; }
}}

现在,the docs of Overpass指出您可以使用classes作为选择器。 但是,我尝试了多种创建类的方法,但是不同的集要么以相同的颜色显示,要么以默认颜色显示。 我在下面列出了一些尝试。

(注意;以下解决方案无效)

尝试的解决方案1:

(
rel[name="Rotterdam"];
rel[name="Vlaardingen"];
)->.myArea1;
(
rel[name="Delft"];
rel[name="Den Haag"];
)->.myArea2;

rel.myArea1[admin_level=10][type=boundary][boundary=administrative];
rel.myArea2[admin_level=10][type=boundary][boundary=administrative];
out geom;

{{style:
  relation.myArea1
    { color:red; fill-color:red; }

  relation.myArea2
    { color:blue; fill-color:blue; }
}}

尝试解决方案2:

(
rel[name="Rotterdam"];
rel[name="Vlaardingen"];
)->.myArea1;
{{{set .myArea1;}}

(
rel[name="Delft"];
rel[name="Den Haag"];
)->.myArea2;
{{{set .myArea2;}}

rel.myArea1[admin_level=10][type=boundary][boundary=administrative];
rel.myArea2[admin_level=10][type=boundary][boundary=administrative];
out geom;

{{style:
  relation.myArea1
    { color:red; fill-color:red; }

  relation.myArea2
    { color:blue; fill-color:blue; }
}}

尝试的解决方案3:

(
rel[name="Rotterdam"];
rel[name="Vlaardingen"];
)->.myArea1;
{{{set .myArea1;}}
(
rel[name="Delft"];
rel[name="Den Haag"];
)->.myArea2;
{{{set .myArea1;}}

(rel.myArea1[admin_level=10][type=boundary][boundary=administrative]; rel.myArea2[admin_level=10][type=boundary][boundary=administrative];) -> .comb;
.comb out geom;

{{style:
  relation.myArea1
    { color:red; fill-color:red; }
  relation.myArea2
    { color:blue; fill-color:blue; }
}}

尝试解决方案4:

(
rel[name="Rotterdam"];
rel[name="Vlaardingen"];
)->.myArea1;

(
rel[name="Delft"];
rel[name="Den Haag"];
)->.myArea2;

rel.myArea1[admin_level=10][type=boundary][boundary=administrative];
{{style:
  relation
    { color:red; fill-color:red; }
}}
out geom;
rel.myArea2[admin_level=10][type=boundary][boundary=administrative];
out geom;

{{style:
  relation
    { color:blue; fill-color:blue; }
}}

如果有人可以在这里帮助我,将不胜感激。

问候,

托比

1 个答案:

答案 0 :(得分:2)

您无法在MapCSS部分重用输入集分配“ )->.myArea1;”,因为这部分查询是由Overpass API(=数据库后端)执行的,而MapCSS仅在浏览器中执行(=前端代码)。

由于Overpass API不会返回有关某个关系源自哪个输入集的任何指示,因此您不能在MapCSS表达式中使用输入集名称“ myArea1”。

实际上,这意味着该查询在后端执行并在浏览器中呈现的方式基本上不支持您尝试的每种语法变体。

除非找到通过其他通用标签对这些关系进行分组的其他方法,否则恐怕您将不得不为每个关系显式使用name = *标签。

rel[type=boundary]
   [boundary=administrative]
   [admin_level=10]
   [name~"^(Rotterdam|Vlaardingen|Delft|Den Haag)$"];
out geom;

{{style:

  relation[name=Rotterdam]
    { color:blue; fill-color:red; }

  relation[name=Vlaardingen]
    { color:red; fill-color:red; }

  relation[name=Delft]
    { color:red; fill-color:blue; }

  relation[name=Den Haag]
    { color:red; fill-color:blue; }

}}

在立交桥turbo中尝试:https://overpass-turbo.eu/s/Hkh