基于TEXT属性的mapbox图层填充颜色

时间:2017-09-12 13:06:00

标签: properties paint layer fill mapbox-gl-js

是否可以根据文本属性而不是数值

设置填充颜色停止

例如根据省名

填写

我的输入数据集有一个名为PROV_ID的属性/列,每个州/省包含一个2个字母的ID

所以我的目标是:'停止':[['GP','YELLOW']]

然而,当执行如下所示的代码时,代码不会呈现任何填充颜色,我已经在下面的代码中替换了我的PROV_ID,并使用主键属性[numeric]进行测试,并且工作正常

我想问题是,如果填充颜色停止仅限于数字属性吗?

map.addLayer({
        'id': 'countiesLayer',
        'type': 'fill',    /*define the type of layer fill, line, point, fill-extrusion, background, raster, circle*/
        'source': 'mySrcName',
        'source-layer': '3_Fields-83vr21',
        'layout': {
          'visibility': 'visible'
        },

        /*there are many options for styling - this is a simple style*/
        'paint': {
          'fill-color': {
            'property': 'PROV_ID',
            'stops': [['GP', 'YELLOW']]
          },
          'fill-outline-color': 'white'
        }
      });

1 个答案:

答案 0 :(得分:1)

我认为你需要一个带有match函数的表达式。

代码将(未经测试):

map.addLayer({
    'id': 'countiesLayer',
    'type': 'fill',    /*define the type of layer fill, line, point, fill-extrusion, background, raster, circle*/
    'source': 'mySrcName',
    'source-layer': '3_Fields-83vr21',
    'layout': {
      'visibility': 'visible'
    },

    /*there are many options for styling - this is a simple style*/
    'paint': {
      'fill-color': ['match', ['get', 'PROV_ID'], // get the property
                     'GP', 'yellow',              // if 'GP' then yellow
                     'XX', 'black',               // if 'XX' then black 
                     'white']                     // white otherwise
      },
      'fill-outline-color': 'white'
    }
  });

来自文档:

  

匹配

     

选择标签值与输入值匹配的输出,或   如果找不到匹配项,则返回值。输入可以是任何字符串   或数字表达式(例如[" get"," building_type"])。每个标签都可以   要么是单个文字值,要么是值数组。

["match",
input: InputType (number or string),
label_1: InputType | [InputType, InputType, ...], output_1: OutputType,
label_n: InputType | [InputType, InputType, ...], output_n: OutputType, ...,
default: OutputType ]: OutputType