このセクションでは、Mapbox GL JSでTerrain RGBのラスタタイルセットを使用していきます。
Terrain RGBタイルセットがあれば、簡単に陰影起伏図レイヤをstyle.json
に追加できます。
まず、ラスタタイルセットの情報を次のようにsources
に追記します。
"sources": {
"rwanda-dem":{
"type": "raster-dem",
"tiles": [
"https://wasac.github.io/rw-terrain/tiles/{z}/{x}/{y}.png"
],
"tileSize": 512,
"maxzoom": 15
}
}
それから、次のように陰影起伏図レイヤを追加できます。
"layers": [
{
"id": "hillshade",
"type": "hillshade",
"source": "rwanda-dem",
"minzoom": 5,
"maxzoom": 14,
"layout": {},
"paint": {
"hillshade-accent-color": "#5a5a5a",
"hillshade-exaggeration": 0.5,
"hillshade-highlight-color": "#FFFFFF",
"hillshade-illumination-anchor": "viewport",
"hillshade-illumination-direction": 335,
"hillshade-shadow-color": "#5a5a5a"
}
}
]
ルワンダのサイトで陰影起伏図のサンプルを見ることができます。 スタイルをUN Vector
に変更して、Mapboxの陰影起伏図のスタイルと比較してみてください。
水道局では標高はとても重要ですので、Mapbox GL JSのプラグインmapbox-gl-elevationを開発しました。これを使えばTerrain RGBのラスタタイルセットから高度情報を取得できます。
次のようにプラグインをMapbox GL JSにインストールできます。
npm i @watergis/mapbox-gl-elevation --save
それから、標高コントロールをMapオブジェクトに追加します。タイルセットのURLを指定してください。
import MapboxElevationControl from "@watergis/mapbox-gl-elevation";
import '@watergis/mapbox-gl-elevation/css/styles.css';
import mapboxgl from 'mapbox-gl';
const map = new mapboxgl.Map();
map.addControl(new MapboxElevationControl(
'https://wasac.github.io/rw-terrain/tiles/{z}/{x}/{y}.png',
{
font: ['Roboto Medium'],
fontSize: 12,
fontHalo: 1,
mainColor: '#263238',
haloColor: '#fff',
}
), 'top-right');
});
こちらからデモサイトを見れます。
もしMapbox GL JSアプリを既にv2にアップグレードしている場合、style.json
に設定を追記するだけで、Terrain RGBを使って簡単に3Dを実現できます。
まず、次のようにラスタタイルセット情報を追記します。
"sources": {
"rwanda-dem":{
"type": "raster-dem",
"tiles": [
"https://wasac.github.io/rw-terrain/tiles/{z}/{x}/{y}.png"
],
"tileSize": 512,
"maxzoom": 15
}
},
"terrain": {
"source": "rwanda-dem",
"exaggeration": 1.5
},
こちらのMapboxの公式サイトからより詳細な情報を得ることができます。.
sky
レイヤーを追加したければ、style.json
のlayers
セクションに以下のように追記するだけです。
"layers" : [
{
"id": "sky",
"type": "sky",
"paint": {
"sky-type": "atmosphere",
"sky-atmosphere-sun": [0.0, 0.0],
"sky-atmosphere-sun-intensity": 15
}
}
]
こちらからデモサイトを見れます。スタイルをterrain
に変更して3Dビューにできます。
注意! 最近、Mapbox GL JSはライセンスをBSDからプロプライエタリなものに変更しました。もしアプリが無償の利用枠を超えてしまった場合、Mapboxの利用料金がかかってしまう可能性があります。