立交桥颜色设置不同

Overpass color sets differently

我正在处理这个问题,我必须创建几组不同的区域,为这些组赋予所有不同的颜色并在地图上显示。 几年前,我在 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 state that you can use 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; }
}}

如果有人能帮助我,我将不胜感激。

亲切的问候,

托比

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

由于 Overpass API 没有 return 任何关于特定关系源自哪个输入集的指示,您不能在 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