前回に引き続き、DECK.GLを使ってGoogleMapのタイムラインをビジュアル化してみよう!の第3弾の記事です。
前回は基本的なReactのコードが動くことをブラウザで確認できました。
今回は実際にDECK.GLを組み込んでいきたいと思います。
目次
本記事は全5回に渡り説明していきます。
- ReactとDECK.GLの環境構築
- 基本的なReactのコードをブラウザで確認
- DECK.GLを使った簡単なデータの表示 ←今回はコレ
- マップコンポーネントの表示
- GoogleMapタイムラインデータ表示
前回のおさらい
前回は、App.jsx にReactの基本的なコードを書きました。
import React from "react";
export default class App extends React.Component {
render() {
return <div>Hello, DECK.GL!!</div>;
}
}
これにDECK.GLを加えていきましょう。
レイヤー
DECK.GLにはいろんな種類の「レイヤー」が用意されています。
これを使うことで、様々なビジュアライズを行うことができるのです!
※レイヤーについての詳しい説明は今回は割愛します。
本家のサイトに詳しく載っているので、興味がある方はそちらをご覧ください。
コンポーネントのimport
今回は PathLayer
というレイヤーを使ってビジュアライズしたいと思います。
まずはじめにApp.jsx
に必要なコンポーネントをimportしましょう。
importするのは、DECK.GL
とPathLayer
のコンポーネントです。
import React from "react";
import DeckGL from "@deck.gl/react";
import { PathLayer } from "@deck.gl/layers";
初期設定
次に画面に表示する際の初期設定を書いていきます。
viewState
では、初期表示時に「どの位置で」「どのくらいズームさせて」表示するかを指定します。
data
では、DECK.GLを使って描画する地理データを指定します。
PathLayer
では、[緯度,経度]の配列データが必要です。これらのデータをパスで繋いでレンダリングしてくれます。
今回はpath
オブジェクトに[緯度,経度]のデータを代入しておきましょう。
// Viewport 初期設定
const viewState = {
longitude: -122.5,
latitude: 37.75,
zoom: 11
};
// 描画する地理データ
const data = [{
path: [
[-122.45, 37.7],
[-122.5, 37.8],
[-122.6, 37.7]
]
}];
レンダリング
最後に画面にレンダリングする部分を書いていきましょう。
引数としてviewState(描画情報)
と layers(レイヤー情報)
を指定し、DeckGL
コンポーネントをリターンします。
viewState
には、上記で指定した変数をそのままセットすればOK。
layers
には、下記のようなオブジェクトをセットします。今回はPathLayer
を利用する際に最低限必要な定義を指定しています。
export default class App extends React.Component {
render() {
const layer = [
new PathLayer({
id: "path-layer", // PathLayerを使う場合、"path-layer"を指定
data, // 描画したい地理データセットを指定
getPath: d => d.path, // データセットから地理データを取得
getWidth: 30 // 描画する際の線の太さを指定
})
];
return <DeckGL viewState={viewState} layers={layer}></DeckGL>;
}
}
それぞれのレイヤーで指定する内容は異なるので、レイヤーを使う際には何を指定すべきかしっかり確認しましょう!
※レイヤーについての詳しい説明は今回は割愛します。
本家のサイトに詳しく載っているので、興味がある方はそちらをご覧ください。
ブラウザで表示
それでは今書いたコードをブラウザで表示してみましょう!
前回同様、動作確認はyarn start
のコマンドでしたね。
こんな感じで表示されるはずです。
今回はDECK.GLのPathLayer
を使って、3つの座標を線で繋いでみました。
簡単ですね!
次回予告
まだ地図情報が何もないので、あまりパッとしませんよね。
次回はマップコンポーネントを組み込んで表示させてみたいと思います。
GoogleMapタイムラインの表示までもう少々お待ちください〜
App.jsxの全体像
import React from "react";
import DeckGL from "@deck.gl/react";
import { PathLayer } from "@deck.gl/layers";
// Viewport 初期設定
const viewState = {
longitude: -122.5,
latitude: 37.75,
zoom: 11
};
// 描画する地理データ
const data = [
{
path: [
[-122.45, 37.7],
[-122.5, 37.8],
[-122.6, 37.7]
]
}
];
export default class App extends React.Component {
render() {
const layer = [
new PathLayer({
id: "path-layer",
data,
getPath: d => d.path,
getWidth: 30
})
];
return <DeckGL viewState={viewState} layers={layer}></DeckGL>;
}
}