<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      mapboxgl 地圖樣式 - 重分類渲染

      上回,我們在《mapboxgl 地圖樣式 - 唯一值渲染》中了解到case、match、get等表達式,通過表達式來完成了唯一值渲染。

      在實際情況下,我們還經常需要進行重分類渲染,將某范圍的值重分為一類,并將另一個范圍重分為其它類。

      今天我們繼續了解新的表達式來實現重分類渲染。

      重分類效果圖:

      方式一:使用step表達式

      "fill-color":[
          "step",
          ["get","population"],
          "#ffd0a6", 50,
          "#ffaa7f", 100, 
          "#ff704e", 150, 
          "#f04040", 200, 
          "#b50a09"
      ]
      

      上面表達式的意思是:

      • get獲取屬性值population,小于50,顏色是#ffd0a6
      • 大于等于50,但小于100時,顏色是#ffaa7f
      • 大于等于100,但小于150時,顏色是#ff704e
      • 大于等于150,但小于200時,顏色是#f04040
      • 大于等于200,顏色是#b50a09

      看到這里是不是奇怪step是起什么作用的?step譯為步,一步一步就是分段的意思,它產生階梯式結果,把一段值歸為一類,小于50的是一類,大于等于50又小于100是一類,每一類step都會輸出一個值,在效果圖中展示為50萬人口以下地區是一個顏色,大于等于50又小于100萬人口區間的地區為另一個顏色。

      我們在下篇漸變色渲染的文章中將會了解interpolate表達式,與step表達式產生的階梯式結果相反,interpolate表達式將會產生連續結果。

      翻譯成js是:

      function getColor(feature){  //feature是geojosn格式中的Feature
        if(feature.properties.population<50){    
          return '#ffd0a6'
        }
        else if(feature.properties.population<100){  
          return '#ffaa7f'
        }
        ...
        else{
          return '#b50a09'
        }
      }
      

      step表達式語法規則:

      1. "step"是表達式的名稱
      2. ["get","adcode"]是輸入值,必須為數值類型或者是數值表達式
      3. "#ffd0a6"是輸出值
      4. 50是判斷值
      5. ...(根據實際情況兩兩出現的輸出值、判斷值)
      6. "#b50a09"是輸出值

      step表達式有5個必需參數,并且不能亂序:表達式的名稱、輸入值、輸出值、判斷值,... ...,輸出值(省略部分為輸出值、判斷值,在省略部分里如果出現了,就必須兩兩出現)。也就是說除了表達式的名稱和輸入值以外,最少還需要一個輸出值、一個判斷值、再加一個輸出值。

      //必需參數
      "fill-color":[
          "step", //表達式的名稱
          ["get","population"], //輸入值
          "#ffd0a6",  //輸出值
          50, //判斷值
          "#b50a09" //輸出值
      ]
      

      step表達式寫起來較為簡潔,但需要注意的一點是判斷值必須遵循升序規則

      在線示例:http://gisarmory.xyz/blog/index.html?demo=mapboxglStyleReclass2

      方式二:使用 case 表達式

      case表達式類似js里的if判斷語句。表達式的實現效果比較依賴于屬性值,通常我們先使用get表達式去獲取屬性值,再去判斷這個屬性值,以此達到在同一圖層上實現不同的展示效果。

      "fill-color":[
          "case",
          ['boolean',['<',["get","population"],50]],"#ffd0a6",
          ['boolean',['<',["get","population"],100]],"#ffaa7f",
          ['boolean',['<',["get","population"],150]],"#ff704e",
          ['boolean',['<',["get","population"],200]],"#f04040",
          '#b50a09'
      ]
      

      上面表達式的意思是:

      • t獲取屬性值population,小于50,顏色是#ffd0a6

      • 大于等于50,但小于100時,顏色是#ffaa7f

      • 大于等于100,但小于150時,顏色是#ff704e

      • 大于等于150,但小于200時,顏色是#f04040

      • 大于等于200,顏色是#b50a09

      在線示例:http://gisarmory.xyz/blog/index.html?demo=mapboxglStyleReclass1

      翻譯成js是:

      function getColor(feature){  //feature是geojosn格式中的Feature
        if(feature.properties.population<50){    
          return '#ffd0a6'
        }
        else if(feature.properties.population<100){  
          return '#ffaa7f'
        }
        ...
        else{
          return '#b50a09'
        }
      }
      

      case表達式寫起來較為繁瑣,但它對判斷值沒有升序這種要求,只要是true或false就行了。

      方式三:分圖層設置

      {
          "id": "beijing200plus",
          "type": "fill",
          "source": "beijing",
          "paint":{
              "fill-color":"#b50a09"
          },
          "filter":['>=',["get","population"],200]
      },
      {
          "id": "beijing200",
          "type": "fill",
          "source": "beijing",
          "paint":{
              "fill-color":"#f04040"
          },
          "filter":['all',['<',["get","population"],200],['>=',["get","population"],150]]
      },
      {
          "id": "beijing150",
          "type": "fill",
          "source": "beijing",
          "paint":{
              "fill-color":"#ff704e"
          },
          "filter":['all',['<',["get","population"],150],['>=',["get","population"],100]]
      },
      {
          "id": "beijing100",
          "type": "fill",
          "source": "beijing",
          "paint":{
              "fill-color":"#ffaa7f"
          },
          "filter":['all',['<',["get","population"],100],['>=',["get","population"],50]]
      },
      {
          "id": "beijing50",
          "type": "fill",
          "source": "beijing",
          "paint":{
              "fill-color":"#ffd0a6"
          },
          "filter":['<',["get","population"],50]
      }
      

      分圖層是使用filter篩選實現,上面代碼里出現了新的表達式all,all表達式相當于js里的&&,當他后面的參數都為true就會返回true,否則返回false,我們舉個例子:

      "filter":['all',['<',["get","population"],200],['>=',["get","population"],150]]
      

      翻譯成js是:

      function getFilter(feature){  //feature是geojosn格式中的Feature
        if(feature.properties.population<200 && feature.properties.population>=150){
            return true
        }else{
            return false
        }
      }
      

      filter分圖層可以在maputnik中直接調顏色,但是圖層會變多,不方便管理。

      在線示例:http://gisarmory.xyz/blog/index.html?demo=mapboxglStyleReclass3

      最后小結:

      1. case和filter的優點都是相對于step而言的,而且case和filter寫起來都避免不了繁瑣這一點。
      2. 僅從“重分類”概念的角度來說,最合適的表達式是step,它本身產生分段式結果會更契合“重分類”這一概念。
      3. case和filter更適合作為一種“補充”,在某些情況下使用。因為它們并不要求判斷值必須升序,更為靈活。
      4. 在mapbox里重分類更推薦使用step表達式,case表達式和filter分圖層可以作為補充方法來了解。

      * * *

      原文地址:http://gisarmory.xyz/blog/index.html?blog=mapboxglStyleReclass

      歡迎關注《GIS兵器庫

      本文章采用 知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議 進行許可。歡迎轉載、使用、重新發布,但務必保留文章署名《GIS兵器庫》(包含鏈接: http://gisarmory.xyz/blog/),不得用于商業目的,基于本文修改后的作品務必以相同的許可發布。

      posted @ 2022-03-11 15:50  GIS兵器庫  閱讀(328)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 色婷婷五月综合久久| 九九热在线观看精品视频| 亚洲欧美日韩综合一区在线 | 亚洲国产精品线观看不卡| 中文字幕日韩欧美就去鲁| 丽水市| 国产精品小仙女自拍视频| 久久亚洲av成人一二三区| 日韩国产中文字幕精品| 亚洲一区二区精品极品| 亚洲乱码国产乱码精品精| 色偷偷亚洲精品一区二区| 亚洲女同精品久久女同| 国产微拍一区二区三区四区| 国产精品成人网址在线观看| 一个人看的www免费高清视频| 封丘县| 久久精品国产99亚洲精品| 国产精品中文字幕在线| 性欧美老人牲交xxxxx视频| 人妻系列中文字幕精品| 中文字幕制服国产精品| 55夜色66夜色国产精品视频| 亚洲欧洲精品一区二区| 无码人妻一区二区三区AV| 欧美激情一区二区三区成人| 国产精成人品| 亚洲自拍偷拍福利小视频| 日韩国产精品无码一区二区三区| 国产午夜福利在线机视频| 国产高在线精品亚洲三区| 99久久久国产精品免费无卡顿| 熟女丰满老熟女熟妇| 国产av一区二区久久蜜臀| 亚洲欧洲日韩精品在线| av综合网男人的天堂| 久久精产国品一二三产品| 性男女做视频观看网站| 免费无码黄动漫在线观看| 国产一二三五区不在卡 | 国产熟妇另类久久久久久|