立交桥颜色设置不同

问题描述 投票:0回答:1

我正在研究这个问题,我必须创建几组不同的区域,给这些组设置所有不同的颜色并在地图上显示。我已经在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; }
}}

如果有人可以帮助我,我将非常感激。

亲切的问候,

托比

openstreetmap overpass-api
1个回答
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; }

}}

尝试在立交桥涡轮增压:https://overpass-turbo.eu/s/Hkh

© www.soinside.com 2019 - 2024. All rights reserved.