Geoserver圖層SLD樣式編輯問題

一崎坊、線上地圖樣式

SLD:風(fēng)格化圖層描述器(Styled Layer Descriptor)的簡稱唠亚,是2005年OGC提出的一個標(biāo)準(zhǔn)樣式層描述符,這個標(biāo)準(zhǔn)在一定條件下允許WMS服務(wù)器對地圖可視化的表現(xiàn)形式進(jìn)行擴(kuò)展版述。在沒有SLD之前遥巴,只能使用一些已經(jīng)在服務(wù)器上規(guī)定好的樣式來對地圖進(jìn)行可視化。而當(dāng)使用了實現(xiàn)了SLD標(biāo)準(zhǔn)之后嫩痰,它允許我們從客戶端來對地圖進(jìn)行定義自己的樣式,分級顯示等操作窍箍,極大的擴(kuò)展了地圖可視化的靈活性串纺。SLD用于后端渲染圖層給前端返回柵格數(shù)據(jù)。

Mapbox Style:定義地圖視覺外觀的文檔椰棘,要繪制哪些數(shù)據(jù)造垛、繪制地圖的順序以及繪制數(shù)據(jù)時如何對數(shù)據(jù)進(jìn)行樣式晰搀。樣式文檔是具有特定根級和嵌套屬性的JSON對象办斑。此規(guī)范定義并描述這些屬性。Mapbox Style用于前端渲染圖層乡翅,后端只返回矢量切片數(shù)據(jù)。

Geoserver圖層樣式使用的是OGC標(biāo)準(zhǔn)的SLD文件蠕蚜,其對初學(xué)者學(xué)習(xí)成本高,學(xué)習(xí)難度大靶累,如果有類似Mapbox的mapbox studio、百度地圖的個性化地圖編輯器挣柬、高德地圖的自定義地圖編輯器將大大提高地圖制圖效率潮酒。相關(guān)文章《讓maputnik支持geoserver》急黎。

二、SLD樣式編輯軟件

1.QGIS

一個開源的GIS桌面軟件,具有豐富的地圖樣式編輯淤击,功能強(qiáng)大,能夠生成SLD文件故源。

md_4b490654.png
md_c975a26e.png

2.udig

    一個基于Java開發(fā)的GIS桌面應(yīng)用程序污抬,其樣式編輯功能沒有QGIS強(qiáng),界面操作上比QGIS簡單心软,能夠生成SLD文件壕吹,但部分樣式參數(shù)無法編輯需要自行編寫SLD,而且加載大數(shù)據(jù)量的數(shù)據(jù)軟件容易崩潰删铃。
md_5891ae0e.png
md_a7adf3e1.png

3.SLDEditor

編輯地圖樣式的 Java 桌面應(yīng)用程序耳贬,允許使用圖形用戶界面以交互方式創(chuàng)建和編輯OGC 樣式層描述符。能生成SLD文件猎唁,可以完全控制OGC SLD標(biāo)準(zhǔn)的所有方面咒劲;但是無法加載空間數(shù)據(jù),對比著調(diào)節(jié)樣式及時查看效果诫隅;相比前兩個軟件腐魂,這個更像是一個SLD可視化編輯工具。

md_7f89d7a8.png
md_77ad56eb.png

三逐纬、使用maputnik調(diào)節(jié)自定義樣式

通過網(wǎng)上搜索查看了《讓maputnik支持geoserver》這篇博客蛔屹,發(fā)現(xiàn)這就是我想要的工具,一個類似百度豁生、高德地圖那樣的矢量地圖配圖工具兔毒,比起前面的桌面軟件調(diào)節(jié)樣式這個更輕,功能更強(qiáng)大甸箱,操作更友好育叁。不過前提條件Geoserver需要安裝兩個插件:

1.插件安裝

下載Geoserver對應(yīng)版本的插件Vector Tiles、MBStyle Styling芍殖,將解壓安裝包中的所有jar包放在.../webapps/geoserver/WEB-INF/lib目錄下豪嗽,重啟Geoserver,在編輯圖層中Tile Caching標(biāo)簽頁看到“application/vnd.mapbox-vector-tile”說明Vector Tiles插件安裝成功豌骏,新建樣式文件Format下拉框看到“MBStyle”說明MBStyle Styling插件安裝成功龟梦。

md_19cc60b3.png
md_ca42c136.png

2.設(shè)置圖層開啟矢量切片

OSM地圖本地發(fā)布(四)-----Geoserver發(fā)布自定義地圖中的“taiwan”圖層組開啟矢量切片功能肯适。

md_036321de.png

查看矢量切片鏈接,打開Geoserver首頁點擊TMS:

md_c6bfed7d.png
md_fb318afc.png

900913@pbf鏈接為maputnik要用的鏈接蹦玫,因為mapbox style只支持谷歌Web墨卡托投影EPSG:900913

http://localhost:8080/geoserver/gwc/service/tms/1.0.0/taiwan%3Ataiwan@EPSG%3A900913@pbf

3.使用maputnik打開圖層

不會使用的先看 《讓maputnik支持geoserver》這篇博客、Mapbox Style官方文檔挣输,這里提供一個json樣式模板,其中tiles中的鏈接即為前面TMS中看到的鏈接福贞,source為設(shè)置的數(shù)據(jù)源,source-layer為數(shù)據(jù)源中各個圖層的名字完丽,即taiwan圖層組中的各個圖層的名字:

{
  "version": 8,
  "name": "Taiwan Liberty",
  "metadata": {"maputnik:renderer": "mbgljs"},
  "center": [120.679882, 24.143171],
  "zoom": 4,
  "sources": {
    "taiwan": {
      "type": "vector",
      "scheme": "tms",
      "tiles": [
        "http://localhost:8080/geoserver/gwc/service/tms/1.0.0/taiwan%3Ataiwan@EPSG%3A900913@pbf/{z}/{x}/{y}.pbf"
      ],
      "minZoom": 0,
      "maxzoom": 24
    }
  },
  "sprite": "https://maputnik.github.io/osm-liberty/sprites/osm-liberty",
  "glyphs": "https://api.maptiler.com/fonts/{fontstack}/{range}.pbf?key={key}",
  "layers": [
    {
      "id": "background",
      "type": "background",
      "layout": {"visibility": "visible"},
      "paint": {"background-color": "#F2EFE9"}
    },
    {
      "id": "其他-海洋",
      "type": "fill",
      "source": "taiwan",
      "source-layer": "simplified_water_polygons",
      "layout": {"visibility": "visible"},
      "paint": {"fill-color": "#AAD3DF"}
    },
    {
      "id": "其他-建筑物",
      "type": "fill",
      "source": "taiwan",
      "source-layer": "building",
      "minzoom": 0,
      "maxzoom": 24,
      "paint": {
        "fill-color": "#DCD9D6",
        "fill-outline-color": {
          "base": 1,
          "stops": [[13, "hsla(35, 6%, 79%, 0.32)"], [14, "hsl(35, 6%, 79%)"]]
        }
      }
    },
    {
      "id": "水域",
      "type": "fill",
      "source": "taiwan",
      "source-layer": "water",
      "minzoom": 0,
      "maxzoom": 24,
      "layout": {"visibility": "visible"},
      "paint": {"fill-color": "#B2CEFE"}
    },
    {
      "id": "水域-邊界",
      "type": "line",
      "source": "taiwan",
      "source-layer": "water_outline",
      "minzoom": 0,
      "maxzoom": 24,
      "paint": {"line-color": "#B2CEFE"}
    },
    {
      "id": "水域-河流",
      "type": "line",
      "source": "taiwan",
      "source-layer": "river",
      "minzoom": 0,
      "maxzoom": 24,
      "layout": {"visibility": "visible"},
      "paint": {"line-color": "#B2CEFE", "line-width": 1}
    },
    {
      "id": "公路-line",
      "type": "line",
      "source": "taiwan",
      "source-layer": "route_line",
      "minzoom": 0,
      "maxzoom": 24,
      "layout": {"line-join": "round", "line-cap": "round"},
      "paint": {"line-color": "#4A83BF", "line-opacity": 0.6, "line-width": 0.4}
    },
    {
      "id": "地名-city",
      "type": "symbol",
      "source": "taiwan",
      "source-layer": "placenames_medium",
      "minzoom": 0,
      "maxzoom": 24,
      "layout": {
        "text-field": {"type": "identity", "property": "name"},
        "text-size": 12,
        "text-allow-overlap": false,
        "text-ignore-placement": false,
        "text-font": ["SimSun Regular"]
      },
      "paint": {
        "text-halo-color": "#FFFFFF",
        "text-opacity": 1,
        "text-halo-width": 1
      }
    }
  ],
  "id": "taiwan_liberty"
}

4.使用maputnik調(diào)節(jié)樣式

這里提供一個完整的樣式文件逻族,鏈接: https://pan.baidu.com/s/1qbVC5Jbsa42rbP-p_i5XxQ 提取碼: w2pf聘鳞,文件中的taiwan.json為樣式文件要拂。

md_191f7309.png

打開maputnik將taiwan.json文件導(dǎo)入,即可進(jìn)行樣式調(diào)節(jié)搏嗡。

md_37583d45.png
md_1faf7ea3.png

四彻况、Mapbox樣式轉(zhuǎn)為SLD

1.導(dǎo)出maputnik調(diào)節(jié)好的樣式文件

md_b4a36ba4.png

2.分離不同圖層樣式

    maputnik導(dǎo)出的json文件包含了所有的圖層樣式舅踪,將不同圖層樣式單獨分離出來抽碌,方便導(dǎo)入Geoserver中,以building圖層為例货徙,在layers數(shù)組中找到"source-layer": "building"的樣式皮胡,放入下面模板中:
{
  "version": 8,
  "name": "Taiwan Liberty",
  "metadata": {"maputnik:renderer": "mbgljs"},
  "center": [120.679882, 24.143171],
  "zoom": 4,
  "sources": {
    "taiwan": {
      "type": "vector",
      "scheme": "tms",
      "tiles": [
        "http://localhost:8080/geoserver/gwc/service/tms/1.0.0/taiwan%3Ataiwan@EPSG%3A900913@pbf/{z}/{x}/{y}.pbf"
      ],
      "minZoom": 0,
      "maxzoom": 24
    }
  },
  "sprite": "https://maputnik.github.io/osm-liberty/sprites/osm-liberty",
  "glyphs": "https://api.maptiler.com/fonts/{fontstack}/{range}.pbf?key={key}",
  "layers": [
       //分離的圖層樣式粘貼放在這里!
  ],
  "id": "taiwan_liberty"
}

最終分離樣式文件如下:

{
  "version": 8,
  "name": "Taiwan Liberty",
  "metadata": {"maputnik:renderer": "mbgljs"},
  "center": [120.679882, 24.143171],
  "zoom": 4,
  "sources": {
    "taiwan": {
      "type": "vector",
      "scheme": "tms",
      "tiles": [
        "http://localhost:8080/geoserver/gwc/service/tms/1.0.0/taiwan%3Ataiwan@EPSG%3A900913@pbf/{z}/{x}/{y}.pbf"
      ],
      "minZoom": 0,
      "maxzoom": 24
    }
  },
  "sprite": "https://maputnik.github.io/osm-liberty/sprites/osm-liberty",
  "glyphs": "https://api.maptiler.com/fonts/{fontstack}/{range}.pbf?key={key}",
  "layers": [
    {
      "id": "其他-建筑物",
      "type": "fill",
      "source": "taiwan",
      "source-layer": "building",
      "minzoom": 15,
      "maxzoom": 24,
      "filter": ["all", ["!=", "building", "ferry"]],
      "paint": {
        "fill-color": "#DCD9D6",
        "fill-outline-color": {
          "base": 1,
          "stops": [[13, "hsla(35, 6%, 79%, 0.32)"], [14, "hsl(35, 6%, 79%)"]]
        }
      }
    },
    {
      "id": "水域-建筑物",
      "type": "fill",
      "source": "taiwan",
      "source-layer": "building",
      "minzoom": 13,
      "maxzoom": 24,
      "filter": ["all", ["==", "building", "ferry"]],
      "paint": {
        "fill-color": "#DCD9D6",
        "fill-outline-color": {
          "base": 1,
          "stops": [[13, "hsla(35, 6%, 79%, 0.32)"], [14, "hsl(35, 6%, 79%)"]]
        }
      }
    }
  ],
  "id": "taiwan_liberty"
}

3.將Mapbox樣式導(dǎo)入Geoserver

新建樣式:

md_89ad554e.png

選擇MBStyle锌杀,粘貼上一節(jié)分離的building樣式文件泻仙,Validate檢測一下正確性后保存:

md_5e3ac979.png

4.查看轉(zhuǎn)換后的SLD文件

上一步新建MB_building樣式保存完成后,在.../webapps/geoserver/data/workspaces/

taiwan/styles中可以找到SLD文件:

md_bc0dc598.png

提示:如果沒有看到對應(yīng)的sld文件突想,可能是新建樣式選錯了工作空間或使用了默認(rèn)工作空間究抓,在其他文件夾里找;或者需要打開樣式文件預(yù)覽一下才會生成sld文件刺下。

md_ee0313a9.png

五怠李、總結(jié)

目前來看Mapbox提供的技術(shù)是最好用的開源自定義樣式編輯解決方案,maputnik是基于Mapbox規(guī)范實現(xiàn)的開源的輕量級樣式編輯工具捺癞,Mapbox官方樣式編輯工具是Mapbox Studio

安裝MBStyle Styling插件已經(jīng)支持了Mapbox樣式文件惕鼓,為什么要多此一舉轉(zhuǎn)為SLD文件?從轉(zhuǎn)入過程可以發(fā)現(xiàn)Geoserver支持的樣式格式只有SLD文件箱歧,使用插件也是轉(zhuǎn)為SLD文件在使用一膨,這樣轉(zhuǎn)換后可以將SLD文件導(dǎo)出在其他環(huán)境中使用,比如生產(chǎn)環(huán)境豹绪,其他Geoserver服務(wù)器中;另一方面我一直在尋找SLD轉(zhuǎn)Mapbox Style工具方便已經(jīng)存在的SLD樣式能供Mapbox使用蝉衣、Mapbox Style轉(zhuǎn)SLD工具方便已經(jīng)存在的MB樣式供Geoserver使用巷蚪,這樣能更高效使用,如調(diào)節(jié)一套樣式多平臺上使用屁柏。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末有送,一起剝皮案震驚了整個濱河市娶眷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌届宠,老刑警劉巖乘粒,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異轧铁,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)齿风,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門救斑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人脸候,你說我怎么就攤上這事绑蔫。” “怎么了配深?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長薪寓。 經(jīng)常有香客問我澜共,道長,這世上最難降的妖魔是什么锥腻? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任嗦董,我火速辦了婚禮,結(jié)果婚禮上瘦黑,老公的妹妹穿的比我還像新娘京革。我一直安慰自己奇唤,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布匹摇。 她就那樣靜靜地躺著咬扇,像睡著了一般廊勃。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上梭灿,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天堡妒,我揣著相機(jī)與錄音,去河邊找鬼皮迟。 笑死桑寨,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的烦粒。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼扰她,長吁一口氣:“原來是場噩夢啊……” “哼徒役!你這毒婦竟也來了窖壕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤鸳吸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后晌砾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體烦磁,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年积担,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片帝璧。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡聋溜,死狀恐怖叭爱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情买雾,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布嗤军,位于F島的核電站晃危,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏震叮。R本人自食惡果不足惜鳍鸵,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望击罪。 院中可真熱鬧贪薪,春花似錦、人聲如沸竣稽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽庞萍。三九已至,卻和暖如春钝计,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背债沮。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工本鸣, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人闷煤。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓鲤拿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親署咽。 傳聞我的和親對象是個殘疾皇子近顷,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容