<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>清水正行 on Data Visualization Japan</title>
        <link>https://data-visualization.jp/speakers/%E6%B8%85%E6%B0%B4%E6%AD%A3%E8%A1%8C/</link>
        <description>Recent content in 清水正行 on Data Visualization Japan</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>ja-jp</language>
        <lastBuildDate>Fri, 29 Dec 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://data-visualization.jp/speakers/%E6%B8%85%E6%B0%B4%E6%AD%A3%E8%A1%8C/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>LT：清水 正行／シェーダーを使ったWeb地図のカスタマイズ</title>
        <link>https://data-visualization.jp/lt-shader-webmap/</link>
        <pubDate>Fri, 29 Dec 2023 00:00:00 +0000</pubDate>
        
        <guid>https://data-visualization.jp/lt-shader-webmap/</guid>
        <description>&lt;img src="https://data-visualization.jp/lt-shader-webmap/cover.jpg" alt="Featured image of post LT：清水 正行／シェーダーを使ったWeb地図のカスタマイズ" /&gt;&lt;p&gt;Data Visualization Japan Meetup 2023（2023年12月29・30日開催）における、清水 正行さんのLTです。3Dプログラミングで使われる「シェーダー（shader）」という技術を使って、Web地図をカスタマイズする例を紹介します。&lt;/p&gt;
&lt;hr&gt;
&lt;div class=&#34;video-wrapper&#34;&gt;
    &lt;iframe loading=&#34;lazy&#34; 
            src=&#34;https://www.youtube.com/embed/RhnQ8kkK_xk&#34; 
            allowfullscreen 
            title=&#34;YouTube Video&#34;
    &gt;
    &lt;/iframe&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.google.com/presentation/d/1FEdwmLyqzCDcRgRSNu8qd8hXATO6FWv1jUs83TWqDIQ/edit#slide=id.p&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;スライド&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;「シェーダーを使ったWeb地図のカスタマイズ」というタイトルになります。&lt;/p&gt;
&lt;h2 id=&#34;自己紹介&#34;&gt;自己紹介
&lt;/h2&gt;&lt;p&gt;清水正行と言います。群馬県高崎市に住んでいて、2015年から2020年までは日経に在籍していました。現在はフリーランスで、データビジュアライゼーションや Web技術のエンジニアをやっています。&lt;/p&gt;
&lt;p&gt;こんな感じで地図を使ったコンテンツを作ったりしています。地図の比較ができるようなツールなども制作しました。&lt;/p&gt;
&lt;p&gt;ほかにブログもやっています。最近あまり更新できていないのですが、地図などに関するサンプルコードや解説記事を載せています。&lt;/p&gt;
&lt;h2 id=&#34;シェーダーとは&#34;&gt;シェーダーとは
&lt;/h2&gt;&lt;p&gt;さて、今回の本題です。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;シェーダー&lt;/strong&gt;とは、3次元コンピューターグラフィックスにおいて&lt;strong&gt;シェーディング（影をつける作業）をするコンピュータープログラム&lt;/strong&gt;のことです。スケッチで質感をつけることを「シェーディング」と言いますが、これを 3DCG で行うための仕組みがシェーダーと呼ばれています。&lt;/p&gt;
&lt;p&gt;シェーダーは専用の言語を使って書く必要があります。WebGL（フロントエンド）で使う場合は &lt;strong&gt;GLSL&lt;/strong&gt; という言語が用いられます。GLSL は C言語に似た書式で書くもので、一般的な JavaScript とは別の言語です。&lt;/p&gt;
&lt;h2 id=&#34;なぜ地図でシェーダーなのか&#34;&gt;なぜ地図でシェーダーなのか
&lt;/h2&gt;&lt;p&gt;実は、&lt;strong&gt;最近のモダンな地図ライブラリは、地図を描画する際にほとんど WebGL という技術を用いています&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;そして地図ライブラリの中には、開発者がシェーダーを使って独自にカスタマイズできる API を提供しているものがあります。今回はその中でも、シェーダーを使ったカスタマイズがしやすい &lt;strong&gt;deck.gl&lt;/strong&gt; を使った例を紹介します。&lt;/p&gt;
&lt;h3 id=&#34;deckgl-とは&#34;&gt;deck.gl とは
&lt;/h3&gt;&lt;p&gt;Uber 社がオープンソースとして公開していたデータビジュアライゼーションのフレームワークです。現在は Linux Foundation 傘下の組織に移管されて管理されており、WebGL を用いて&lt;strong&gt;大規模なデータセットの視覚化&lt;/strong&gt;が行えるライブラリになっています。&lt;/p&gt;
&lt;p&gt;シェーダーを使うと、&lt;strong&gt;画面全体にエフェクトをかけたり、レイヤーごとにエフェクトをかけたり&lt;/strong&gt;することができます。&lt;/p&gt;
&lt;h2 id=&#34;-画面全体にシェーダーを適用するポストエフェクト&#34;&gt;① 画面全体にシェーダーを適用する（ポストエフェクト）
&lt;/h2&gt;&lt;p&gt;まず、画面全体にシェーダーを適用する例です。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;チルトシフト&lt;/strong&gt; — 画面の上と下をぼかすことで、ミニチュアっぽい見え方にする処理です。このエフェクトは「ポストエフェクト」という機能でシェーダーを使ってかけています。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;レトロなテレビ風&lt;/strong&gt; — 先月やった「30 Day Map Challenge」の時にも作ったものですが、Google の 3D フォトリアルタイルを使い、エフェクトをかけて古いテレビ風に見せています。&lt;/p&gt;
&lt;p&gt;実装手順はいくつかステップがありますが、時間の都合で簡単に説明します。サンプルコードを載せていますので、関心がある方はご覧いただければと思います。GLSL を書いている部分は、&lt;strong&gt;JavaScript のテキストとしてコードを書く&lt;/strong&gt;という形になります。&lt;/p&gt;
&lt;h2 id=&#34;-レイヤーごとにシェーダーを適用する&#34;&gt;② レイヤーごとにシェーダーを適用する
&lt;/h2&gt;&lt;p&gt;次に、レイヤーごとにシェーダーを適用する例です。&lt;/p&gt;
&lt;p&gt;ポリゴンのサーフェスにシェーダーでアニメーションをつける、といったことができます。&lt;/p&gt;
&lt;p&gt;さらに、deck.gl には ArcLayer や LineLayer といったラインを表示するレイヤーがありますが、&lt;strong&gt;それらには「線が伸びていく」ようなアニメーションを作る機能がありません&lt;/strong&gt;。ですがシェーダーを使えば、こうしたアニメーションを独自に実装できます。&lt;/p&gt;
&lt;p&gt;応用例として、ArcLayer をアニメーションさせて&lt;strong&gt;世界各国の空港の行き来を表示&lt;/strong&gt;するものも作りました。これもシェーダーでアニメーションさせて表示させています。&lt;/p&gt;
&lt;p&gt;レイヤーのエクステンションの使い方についても、スライドを公開しますのでそちらをご覧ください。サンプルコードも載せています。ポストエフェクトとレイヤーエフェクトでは書き方が少し違うのですが、その理由の細かい説明は割愛します。&lt;/p&gt;
&lt;h2 id=&#34;どうやって学ぶか&#34;&gt;どうやって学ぶか
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GLSL&lt;/strong&gt; については、YouTube で講義を行っている方がいるので、それを参考にするのがいいと思います。Udemy などにもシェーダーの書き方のコースがあります&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;deck.gl&lt;/strong&gt; の公式ドキュメントにも、シェーダーの書き方を説明したページがあります&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;そういったものを参考にすると、シェーダーを使ったカスタマイズがいろいろ作れるのではないかと思います。&lt;/p&gt;
&lt;p&gt;以上です。&lt;/p&gt;</description>
        </item>
        <item>
        <title>清水 正行／汎用的な可視化ツールとしての deck.gl</title>
        <link>https://data-visualization.jp/deckgl-general-purpose/</link>
        <pubDate>Wed, 29 Dec 2021 00:00:00 +0000</pubDate>
        
        <guid>https://data-visualization.jp/deckgl-general-purpose/</guid>
        <description>&lt;img src="https://data-visualization.jp/deckgl-general-purpose/cover.jpg" alt="Featured image of post 清水 正行／汎用的な可視化ツールとしての deck.gl" /&gt;&lt;p&gt;Data Visualization Japan Meetup 2021（2021年12月29・30日開催）における、清水 正行さんの講演です。deck.gl の概要と、地図以外の可視化への応用を紹介します。&lt;/p&gt;
&lt;hr&gt;
&lt;div class=&#34;video-wrapper&#34;&gt;
    &lt;iframe loading=&#34;lazy&#34; 
            src=&#34;https://www.youtube.com/embed/CBon7oJmNYA&#34; 
            allowfullscreen 
            title=&#34;YouTube Video&#34;
    &gt;
    &lt;/iframe&gt;
&lt;/div&gt;

&lt;p&gt;「汎用的な可視化ツールとしての deck.gl」の講演を始めさせていただきます。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;deck.gl は地図ライブラリとして認識されていることが多い&lt;/strong&gt;のですが、&lt;strong&gt;地図以外でも使えるんだぞ&lt;/strong&gt;というところをお伝えできたらと思っています。&lt;/p&gt;
&lt;h2 id=&#34;自己紹介&#34;&gt;自己紹介
&lt;/h2&gt;&lt;p&gt;清水と申します。&lt;strong&gt;群馬県高崎市&lt;/strong&gt;に住んでいて、現在はフリーランスのデータビジュアライゼーション、Web GIS（Web 地図）のエンジニアとして働いています。&lt;/p&gt;
&lt;p&gt;主な仕事は&lt;strong&gt;日経ビジュアルデータ&lt;/strong&gt;です。もともとフリーランスになる前は日経新聞の社員としてコンテンツ制作に関わっていました。現在も継続して携わらせていただいています。&lt;/p&gt;
&lt;h3 id=&#34;直近の仕事&#34;&gt;直近の仕事
&lt;/h3&gt;&lt;p&gt;10月末の&lt;strong&gt;衆院選のコンテンツ&lt;/strong&gt;を作成しました。各市区町村の得票率を見られる地図コンテンツで、政党ごとの得票率や、2017年と2021年でどう変化したかを見られます。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;一番反響が多かったのは、日本維新の会が大阪で2017年から2021年にかけて大きく得票率を上げている&lt;/strong&gt;という点で、SNS でよく取り上げてもらいました。&lt;/p&gt;
&lt;p&gt;**実はこのコンテンツは deck.gl では作っていません。**Mapbox GL を使っています。&lt;strong&gt;IE に対応する必要があった&lt;/strong&gt;のですが、deck.gl はひと世代前のバージョンで IE を切ってしまっているので使えませんでした。&lt;/p&gt;
&lt;p&gt;もう一つ、実際に deck.gl で作ったものが&lt;strong&gt;日本全体の地価を可視化した&lt;/strong&gt;コンテンツです。2Dと3Dを切り替えられて、&lt;strong&gt;リーマンショックのあった2008年と2021年を比較すると、都市部は地価が戻っているのに対して地方はまだ下がったまま&lt;/strong&gt;だと分かります。&lt;/p&gt;
&lt;p&gt;**こちらは IE に対応するために deck.gl のバージョンをダウングレードして作りました。**ダウングレードすれば IE にも対応できるのですが、&lt;strong&gt;他にいろいろ問題が出るのであまりおすすめしないやり方&lt;/strong&gt;です。&lt;/p&gt;
&lt;h3 id=&#34;ブログと-advent-calendar&#34;&gt;ブログと Advent Calendar
&lt;/h3&gt;&lt;p&gt;「&lt;strong&gt;群馬GISギーク&lt;/strong&gt;」というブログをやっています。最近はほとんど deck.gl に関する記事ですが、一時期は D3.js の使い方の記事を書いていました。&lt;/p&gt;
&lt;p&gt;今月は &lt;strong&gt;deck.gl の Advent Calendar&lt;/strong&gt; を主催しています。&lt;strong&gt;ほとんど私一人で書いている&lt;/strong&gt;のですが……サンプルコード付きの解説なので、&lt;strong&gt;今日の講演ではコードの説明はほとんどしない&lt;/strong&gt;ので、コードに興味がある方はそちらを見ていただけるとありがたいです。&lt;/p&gt;
&lt;h2 id=&#34;deckgl-とは&#34;&gt;deck.gl とは
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;WebGL を使った地図ライブラリ&lt;/strong&gt;です。もともと &lt;strong&gt;Uber 社がオープンソースとして公開しているデータビジュアライゼーションのフレームワーク&lt;/strong&gt;の一つで、JavaScript でフロントエンドの地図描画やコンテンツ制作に使えます。&lt;/p&gt;
&lt;h3 id=&#34;visgl-ファミリー&#34;&gt;vis.gl ファミリー
&lt;/h3&gt;&lt;p&gt;deck.gl を含む Uber 社公開のデータ可視化ツール群が &lt;strong&gt;vis.gl&lt;/strong&gt; です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;deck.gl&lt;/strong&gt; ——地図コンテンツを作るライブラリ&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;luma.gl&lt;/strong&gt; ——3Dモデルを描画するライブラリ。&lt;strong&gt;deck.gl はこれをベースに開発されている&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;react-map-gl&lt;/strong&gt; ——Mapbox GL を React で使えるようにラップしたもの&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;react-vis&lt;/strong&gt; ——React でチャートを表示するコンポーネント&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;math.gl&lt;/strong&gt; ——ベクトルや行列の操作を行う数値演算モジュール&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;nebula.gl&lt;/strong&gt; ——deck.gl 上に GeoJSON を編集する機能を追加するコンポーネント&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;loaders.gl&lt;/strong&gt; ——CSV や JSON など様々なデータセットを読み込んで使いやすい形に変換&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;uber-の手を離れた&#34;&gt;Uber の手を離れた
&lt;/h3&gt;&lt;p&gt;deck.gl は現在、&lt;strong&gt;アーバンコンピューティング財団&lt;/strong&gt;に移管されており、**Uber 社の手を離れています。**バージョン 8.2 からオープンガバナンスという形で移管されました。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;「Uber 社に対していろいろ思うところがある」という方も安心して使える&lt;/strong&gt;ようになっています。&lt;/p&gt;
&lt;h3 id=&#34;google-との連携強化&#34;&gt;Google との連携強化
&lt;/h3&gt;&lt;p&gt;2020年から今年にかけて、&lt;strong&gt;Google Earth のチームが deck.gl の開発に参加するケースが多く&lt;/strong&gt;、&lt;strong&gt;Google Maps Platform との連携が大幅に強化&lt;/strong&gt;されました。deck.gl 8.6 からです。&lt;/p&gt;
&lt;p&gt;公式サイトのサンプルを見ると——&lt;strong&gt;ビルのポリゴンはすべて Google マップがレンダリングしているもの&lt;/strong&gt;で、&lt;strong&gt;走っているトラックは deck.gl がレンダリングしている3Dモデル&lt;/strong&gt;です。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;建物の裏側にトラックが入っていくと、きちんと影に隠れる。&lt;strong&gt;つまり&lt;/strong&gt;単に deck.gl の描画を Google マップにオーバーレイしているのではなく、3D空間として統合されていてオクルージョン処理が行われている。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Google マップ側のエンジニアのブログによると&lt;strong&gt;かなり難しい処理だった&lt;/strong&gt;らしく、「頑張った」と書かれていました。&lt;/p&gt;
&lt;p&gt;このように deck.gl は単体でも使えますが、&lt;strong&gt;Google マップ、ArcGIS、CARTO、Mapbox などと組み合わせて使える汎用的な地図ライブラリ&lt;/strong&gt;になっています。&lt;/p&gt;
&lt;h2 id=&#34;派生ライブラリ&#34;&gt;派生ライブラリ
&lt;/h2&gt;&lt;h3 id=&#34;pydeck&#34;&gt;pydeck
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;py という文字が頭についていることから分かるように、Python で deck.gl を使うためのライブラリ&lt;/strong&gt;です。&lt;strong&gt;Jupyter Notebook と組み合わせて使えるよう最適化&lt;/strong&gt;されていて、Google Colaboratory でも使えます。&lt;/p&gt;
&lt;p&gt;CSV データを読み込んで deck.gl のビューとして表示するサンプルを公開しているので、興味がある方は使ってみてください。&lt;/p&gt;
&lt;h3 id=&#34;deckgl-native&#34;&gt;deck.gl-native
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;まだ実験的なプロジェクト&lt;/strong&gt;で完全に使えるものではないのですが、&lt;strong&gt;Google Earth のチームと、deck.gl の元々の開発者（現在は CTO になられている方）&lt;/strong&gt; が一緒に作っています。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;deck.gl を C++ で再実装する&lt;/strong&gt;というもので、これができると&lt;strong&gt;スマートフォンや様々なデバイスでネイティブアプリとして利用できる&lt;/strong&gt;ようになります。フロントエンドでも &lt;strong&gt;WebAssembly&lt;/strong&gt; という形で活用できるので、&lt;strong&gt;いろんなプラットフォームで deck.gl が使える&lt;/strong&gt;ぞ、と。&lt;/p&gt;
&lt;p&gt;GitHub で公開されていてダウンロードして Xcode に読み込んで使うこともできるのですが、&lt;strong&gt;2020年9月以降あまり情報の公開がない&lt;/strong&gt;ので、このまま進むのかは分かりません。&lt;strong&gt;個人的に応援しているプロジェクト&lt;/strong&gt;なので紹介させていただきました。&lt;/p&gt;
&lt;h2 id=&#34;特徴-巨大なデータの可視化&#34;&gt;特徴① 巨大なデータの可視化
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;deck.gl 最大の特徴は、巨大なデータの可視化が行える&lt;/strong&gt;ことです。&lt;/p&gt;
&lt;p&gt;公式サイトのサンプルでは&lt;strong&gt;85万8400件のポイントデータを一度に描画&lt;/strong&gt;しています。近づいていくと&lt;strong&gt;点一つ一つがすべて描画されている&lt;/strong&gt;のが分かります。&lt;/p&gt;
&lt;p&gt;WebGL を使っていない地図ライブラリだと数が多すぎて動かなくなってしまうところ、&lt;strong&gt;deck.gl はサクサク動きます。&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&#34;実測してみた&#34;&gt;実測してみた
&lt;/h3&gt;&lt;p&gt;ランダムなポイントを配置して&lt;strong&gt;どれだけ表示できるか試してみました。&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;点数&lt;/th&gt;
          &lt;th&gt;結果&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;1万&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;完全にサクサク&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;10万&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;全然問題なし&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;50万&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;全体表示すると追従が少し遅れる&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;100万&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;かなり重い。ただしズームして表示点数が減れば問題なし&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;500万&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;マウス操作がかなり遅れて反映される。ズームすれば表示可能&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;1000万&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;ブラウザのタブが完全に落ちて表示できず&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;テストに使ったのは&lt;strong&gt;ゲーミングノートPC&lt;/strong&gt;で、一般的なノートPCより高いスペックです。それで&lt;strong&gt;上限は500万ポイントくらい&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;閲覧する側のスペックに依存するところはありますが、かなり多くのデータを一度に可視化できるライブラリ&lt;/strong&gt;です。&lt;/p&gt;
&lt;h2 id=&#34;特徴-多彩なレイヤー&#34;&gt;特徴② 多彩なレイヤー
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;レイヤーは deck.gl の中核をなす機能&lt;/strong&gt;です。データを取得して、そのデータをレイヤー上で色やポリゴンに関連付けてレンダリングします。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ポイントデータを集約してヒートマップ風に表示する&lt;/strong&gt;レイヤー&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GeoJSON のラインデータ&lt;/strong&gt;——大量のラインを一度に表示してもサクサク動く&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ヘキサゴンレイヤー&lt;/strong&gt;——ポイントを集約して六角形の範囲内に何点あるかを表示。3D表現も可能&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;影をつけたレンダリング&lt;/strong&gt;——単に3Dになっているだけでなく、&lt;strong&gt;3Dポリゴンの影が表示される&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;他にも非常に多くのレイヤーが用意されています。&lt;/p&gt;
&lt;p&gt;そして&lt;strong&gt;このレイヤーは deck.gl 単体で使うだけでなく、Google マップ、Mapbox GL、ArcGIS の JavaScript ライブラリなど、他の地図ライブラリの中にレイヤーだけを差し込んで使うこともできます。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;本題--deckgl-は地図だけのものではない&#34;&gt;本題 ― deck.gl は地図だけのものではない
&lt;/h2&gt;&lt;p&gt;deck.gl が優れた地図ライブラリであることはお伝えできたかと思いますが、&lt;strong&gt;必ずしも地図だけを表示するためのライブラリではありません。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;公式サイトのトップの説明文はこうです。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;deck.gl は大規模なデータセットを視覚的・探索的に分析するための、WebGL を用いたフレームワークです。&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;どこにも「地図」とは書かれておらず、「大量データの可視化に活用できる」ことが強調されています。&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&#34;2d表現-ネットワーク図&#34;&gt;2D表現① ネットワーク図
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;D3.js で力学グラフを計算して、deck.gl で表示&lt;/strong&gt;したものです。&lt;strong&gt;ノードの座標を計算しているのは D3.js。ノードとノードをつなぐラインを計算しているのも D3.js。deck.gl は最終的なレンダリング部分だけ&lt;/strong&gt;を行っています。&lt;/p&gt;
&lt;p&gt;D3 で描画すると SVG で表示することが多いと思いますが、&lt;strong&gt;キャンバス要素の中にまとめて WebGL として表示されています。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;もう一つ、&lt;strong&gt;はてなブックマークで話題になっていた「Spotify のデータによる地下アイドルのネットワーク分析」&lt;/strong&gt; の記事でデータが公開されていたので、それを使って描画してみました。&lt;strong&gt;かなり大量のラインがありますが、deck.gl なら描画できます。&lt;strong&gt;地図でよく使う&lt;/strong&gt;パン・ズームの機能も簡単に実装できます。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;コード量は、分割されてはいますが全体で100行程度&lt;/strong&gt;でこういったネットワークが描画できます。&lt;/p&gt;
&lt;h3 id=&#34;2d表現-バブルチャート&#34;&gt;2D表現② バブルチャート
&lt;/h3&gt;&lt;p&gt;公式サンプルですが、こちらも &lt;strong&gt;D3.js と deck.gl の組み合わせ&lt;/strong&gt;です。&lt;strong&gt;pack と呼ばれるレイアウト&lt;/strong&gt;でバブルを配置しています。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;バブルの大きさや配置位置の計算は D3 が行い、XY座標として返してきたものを deck.gl が WebGL としてレンダリング&lt;/strong&gt;する仕組みです。&lt;strong&gt;小さなところまでズームできる&lt;/strong&gt;のは deck.gl で作ると簡単にコントローラーを設定できるからです。&lt;/p&gt;
&lt;h3 id=&#34;2d表現-大量のチャート&#34;&gt;2D表現③ 大量のチャート
&lt;/h3&gt;&lt;p&gt;これも公式サンプルで、&lt;strong&gt;deck.gl と D3 でかなり大量のチャート&lt;/strong&gt;を作っています。寄っていくと一つ一つのラインが見えます。&lt;strong&gt;座標計算はすべて D3 が行い、最終的な WebGL 出力を deck.gl が担う。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;ソースコードが GitHub で公開されていますが、&lt;strong&gt;200行程度でこういった複雑な描画ができる&lt;/strong&gt;ようになっています。&lt;/p&gt;
&lt;h3 id=&#34;3d表現-点群ポイントクラウド&#34;&gt;3D表現① 点群（ポイントクラウド）
&lt;/h3&gt;&lt;p&gt;昨日、静岡県さんの講演でも点群の話があったかと思いますが、deck.gl でも表示できます。&lt;/p&gt;
&lt;p&gt;最近&lt;strong&gt;iPhone の LiDAR センサーで点群をスキャンできるアプリ&lt;/strong&gt;にハマっていまして——これは私が住んでいる&lt;strong&gt;高崎市柳川町の裏通り&lt;/strong&gt;、ちょっと昭和っぽい雰囲気を残した通りをスキャンしたものです。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;FirstPersonView を使っているので、まっすぐ歩いていくような表現&lt;/strong&gt;ができます。ところどころスキャンしきれなかった箇所もありますが、**手元の点群をサクッと Web に載せたい時、deck.gl を使うと簡単に表現できます。**このドアの感じとかが個人的にお気に入りだったりします。&lt;/p&gt;
&lt;h3 id=&#34;3d表現-ポストエフェクト&#34;&gt;3D表現② ポストエフェクト
&lt;/h3&gt;&lt;p&gt;先ほどの点群に &lt;strong&gt;PostEffects&lt;/strong&gt; をかけたものです。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;deck.gl は WebGL のシェーダーに非常にアクセスしやすいように作られている&lt;/strong&gt;ので、シェーダーの機能を使うと表現を変更できます。これは&lt;strong&gt;ポスタリゼーションっぽいフィルターをかけて、さらに周辺を暗くするシェーダー&lt;/strong&gt;を追加しています。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;シェーダーをバリバリ書くぞという方は、deck.gl を使うとこういったエフェクトを地図や3Dモデルに簡単に適用できます。&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&#34;3d表現-3dモデル&#34;&gt;3D表現③ 3Dモデル
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;glTF&lt;/strong&gt; の3Dモデルを表示したものです。これも&lt;strong&gt;iPhone でスキャンした、群馬県庁前にあるぐんまちゃんの像&lt;/strong&gt;です。&lt;/p&gt;
&lt;p&gt;**3Dビューアのようなものも非常に簡単に作れます。**glTF 以外では OBJ 形式が表示できますが、&lt;strong&gt;FBX は読み込みが難しくできない&lt;/strong&gt;ので、&lt;strong&gt;glTF に変換していただく&lt;/strong&gt;とビューが作れます。&lt;/p&gt;
&lt;p&gt;もちろん&lt;strong&gt;地図上に3Dモデルを表示する&lt;/strong&gt;こともできます。点群も地図上に表示できるので、&lt;strong&gt;点群を使った地図表現&lt;/strong&gt;も作ってみたいと思っています。&lt;/p&gt;
&lt;h3 id=&#34;3d表現-ライフゲーム&#34;&gt;3D表現④ ライフゲーム
&lt;/h3&gt;&lt;p&gt;deck.gl で&lt;strong&gt;ライフゲーム&lt;/strong&gt;を作ってみました。&lt;strong&gt;セルオートマトンは山火事のシミュレーションなどに使われる&lt;/strong&gt;ので、&lt;strong&gt;地図と組み合わせて活用できないか&lt;/strong&gt;と思って作ったものです。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2000×2000のグリッド&lt;/strong&gt;を計算させて表示しています。量が多くなると処理は重くなりますが、&lt;strong&gt;deck.gl を使えばこのくらいの大きさは表現できます。&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&#34;3d表現-360度動画&#34;&gt;3D表現⑤ 360度動画
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;360度見回せる動画&lt;/strong&gt;を deck.gl で表示することもできます。&lt;/p&gt;
&lt;p&gt;FirstPersonView を使って&lt;strong&gt;球体を作り、その内側にテクスチャーとして動画を貼り付ける&lt;/strong&gt;という形で作られています。&lt;/p&gt;
&lt;p&gt;※ このイラストはダウンロード元が思い出せず&lt;strong&gt;著作権表示ができていない&lt;/strong&gt;ので、後で差し替えるつもりです。&lt;/p&gt;
&lt;h2 id=&#34;まとめ&#34;&gt;まとめ
&lt;/h2&gt;&lt;p&gt;deck.gl は&lt;strong&gt;地図だけでなく、2Dのビジュアライゼーション、3Dモデル、点群データなどを可視化するツールとして使えます。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;最近では &lt;strong&gt;PLATEAU&lt;/strong&gt; や静岡県の点群データなど、&lt;strong&gt;単純な表データにとどまらないオープンデータが公開されることが増えてきました。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;PLATEAU の3Dモデルを deck.gl でいろいろ試した記事も書いています。&lt;strong&gt;3Dモデルを読み込んで高さを測れる機能をつけたもの&lt;/strong&gt;などを作ってみました。3Dタイルを読み込んで PLATEAU の3Dモデルを地図で表現する、といったこともやっています。&lt;/p&gt;
&lt;p&gt;静岡県が公開している点群も、&lt;strong&gt;ダウンロードして loaders.gl に読み込ませてサクッと表示&lt;/strong&gt;できました。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PLATEAU や点群のデータは、フロントエンドのエンジニアには馴染みのないデータかもしれません。そういうものをフロントエンドで扱ってコンテンツを作りたい時、deck.gl を使うと割と作業が進む&lt;/strong&gt;のではないかと思います。&lt;/p&gt;
&lt;h2 id=&#34;deckgl-の始め方&#34;&gt;deck.gl の始め方
&lt;/h2&gt;&lt;p&gt;deck.gl は単純な JavaScript ライブラリとしても使えますが、&lt;strong&gt;基本的には React と組み合わせて使うことが多い&lt;/strong&gt;ライブラリです。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;React の開発環境構築が負担だ&lt;/strong&gt;というお話をよく聞くので、&lt;strong&gt;テンプレートをいくつか作っています。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CodeSandbox&lt;/strong&gt; で新しいコードを書く際にテンプレート検索で私のアカウント名を入力していただくと、&lt;strong&gt;React 版と Pure JS 版の2つのテンプレート&lt;/strong&gt;が出てきます。&lt;strong&gt;日本地図が表示され、GeoJSON を読み込んで都道府県ごとの値を表示するサンプル&lt;/strong&gt;になっているので、これをベースにレイヤーを追加していくと理解しやすいかと思います。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ZIP ファイルとしてダウンロードもできる&lt;/strong&gt;のでローカル開発も可能です。私のアカウントには&lt;strong&gt;他にも deck.gl のサンプルをいろいろ載せている&lt;/strong&gt;ので、ダウンロードしたりフォークして書き換えたりしていただけます。&lt;/p&gt;
&lt;p&gt;もう一つ、&lt;strong&gt;create-react-app&lt;/strong&gt; を使っている方向けに &lt;strong&gt;deck.gl のテンプレート&lt;/strong&gt;も作っています。npm でインストールして、プロジェクト作成時に&lt;strong&gt;テンプレートオプションを付ける&lt;/strong&gt;とテンプレートが生成され、deck.gl の開発がサクッと始められます。&lt;/p&gt;
&lt;p&gt;以上で deck.gl の紹介を終わらせていただきます。ありがとうございました。&lt;/p&gt;</description>
        </item>
        
    </channel>
</rss>
