[deck.gl]React x TypeScript x DeckGL Part2
13384 ワード
Nx(React)ワークスペースにdeck.glの環境構築を行った際の備忘録その2
前回の記事はこちら
[deck.gl]React x TypeScript x DeckGL Part1
事前準備
Mapboxにアカウント登録し、アクセストークンを取得する
https://account.mapbox.com/
トークンはgit管理下に置かないように注意
react-map-glを使って地図を表示する
react-map-glのhooksサンプルに沿ってシンプルな地図を表示する
-
MAPBOX_ACCESS_TOKEN
にはMapboxアカウントで取得したトークンを記述する - useStateに型パラメータが渡せるので
react-map-gl
からimportしたMapboxProps
型を渡した
my-map.tsx
import React, { useState } from 'react';
import ReactMapGL, { MapboxProps } from 'react-map-gl';
import './my-map.scss';
export const MyMap = () => {
const MAP_STYLE = 'mapbox://styles/mapbox/streets-v10';
const MAPBOX_ACCESS_TOKEN = 'pk.xxxxxxxxxxxxxx' // 取得したAPIトークン
const [viewport, setViewport] = useState<MapboxProps>({
width: '100vw',
height: '100vw',
latitude: 34.704048,
longitude: 135.494883,
zoom: 15,
});
return (
<ReactMapGL
{...viewport}
mapStyle={MAP_STYLE}
mapboxApiAccessToken={MAPBOX_ACCESS_TOKEN}
onViewportChange={setViewport}
/>
);
};
export default MyMap;
表示結果
http://localhost:4200を開くと地図が表示される
deck.glのレイヤーを表示する
deck.glを使ってレイヤーを使ったレイヤーの利用。
シンプルな例として地図上にScatterplotLayer(散布図)を表示する
変更点
* ベースの地図はStaticMap
に変更し、アクセストークンとスタイルのみを定義する
* 緯度経度の情報はDeckGLのコンポーネントに渡す
my-map.tsx
import React from 'react';
import DeckGL from '@deck.gl/react';
import { ScatterplotLayer } from '@deck.gl/layers';
import { StaticMap } from 'react-map-gl';
import './my-map.scss';
export const MyMap = () => {
const MAP_STYLE = 'mapbox://styles/mapbox/streets-v10';
const MAPBOX_ACCESS_TOKEN = 'pk.xxxxxxxxxxxxxx' // 取得したAPIトークン
const initialViewState = {
longitude: 135.495734,
latitude: 34.700559,
zoom: 14,
};
const layers = [
new ScatterplotLayer({
id: 'example',
data: [
{
name: '梅田',
radius: 12000,
coordinates: [135.495734, 34.700559],
},
{
name: '淀屋橋',
radius: 12000,
coordinates: [135.501413, 34.692552],
},
],
stroked: false,
filled: true,
// eslint-disable-next-line @typescript-eslint/no-explicit-any
getPosition: (d) => d.coordinates as any,
getRadius: (d) => Math.sqrt(d.radius),
getFillColor: [0,204,102],
}),
];
return (
<DeckGL
initialViewState={initialViewState}
controller={true}
layers={layers}
effects={[]}
width="100%"
height="100%"
>
<StaticMap
width="100%"
height="100%"
mapboxApiAccessToken={MAPBOX_ACCESS_TOKEN}
mapStyle={MAP_STYLE}
/>
</DeckGL>
);
};
export default MyMap;
表示結果
所感
- 環境構築から導入までは比較的簡単
- 実際に導入する際はDeckGLの初期値に渡すオブジェクトの型定義を丁寧に行いたい
参考資料
Author And Source
この問題について([deck.gl]React x TypeScript x DeckGL Part2), 我々は、より多くの情報をここで見つけました https://qiita.com/takeshiemoto/items/a8c32789923f203d8184著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .