立交桥颜色设置不同

Tob*_*gen 3 openstreetmap overpass-api

我正在解决这个问题,我必须创建几组不同的区域,为这些组提供不同的颜色并将其显示在地图上。几年前我曾在 Photoshop 中手动完成此操作,但今年当我不得不再次执行此操作时,我计划将其自动化。

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

我计划为此使用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; }
}}
Run Code Online (Sandbox Code Playgroud)

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

(注意;以下解决方案不起作用)

尝试过解决方案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; }
}}
Run Code Online (Sandbox Code Playgroud)

尝试了解决方案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; }
}}
Run Code Online (Sandbox Code Playgroud)

尝试过解决方案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; }
}}
Run Code Online (Sandbox Code Playgroud)

尝试过解决方案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; }
}}

Run Code Online (Sandbox Code Playgroud)

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

亲切的问候,

托比

mmd*_*mmd 5

您不能在 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; }

}}
Run Code Online (Sandbox Code Playgroud)

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