地理空間情報分析とは？衛星画像と位置情報データを触ってみる

![gis_batch.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2789179/09c73b3a-31ee-a86b-f6b0-25f5b6d1061a.gif) 
> *位置情報 (GPS) データ - 乗車エリアごとのNYCタクシー運行距離(時系列)*

# 目次
- [はじめに](#はじめに)
- [地理空間情報分析とは](#地理空間情報分析とは)
- [実際に触ってみた](#実際に触ってみた)
    - [衛星画像](#衛星画像)
    - [位置情報データ](#位置情報データ)
- [おわりに](#おわりに)

# はじめに

皆さんは地理空間情報がお好きでしょうか。

「天網恢恢疎にして漏らさず」と老子は言ったそうですが、現代では「地理空間情報」と呼ばれる位置情報が付与されているデータが時々刻々と生み出されており、どこで何が起きているか教えてくれます。今回は世界で何が起きているかを解き明かす「地理空間情報分析」について紹介します。
- 対象読者: 衛星画像や位置情報を使ったデータ分析に興味のあるエンジニア/分析担当者
- 目的: 地理空間情報分析で取り扱われるデータ（衛星画像・位置情報）を把握する

留意事項として、今回はそれぞれの処理の詳細な説明はいたしません。ご興味のある方は LinkedIn や弊社ホームページなどからお問い合わせいただけますと幸いです。

また、今後も記事執筆を継続するモチベーションに繋がりますので「いいね」や記事の保存、SNSで共有いただけると嬉しいです。

# 地理空間情報分析とは

地理空間情報分析とは「特定エリアに関する位置情報とそれに紐づく事象のデータから有益な知見や発見を得ること」を指します。代表的なデータには衛星画像や船舶・飛行機・車載機器・携帯電話などから取得できる位置情報データが存在し、それらを使ってデータを可視化・分析して地球上で何が起きているのか理解できます。

また世界で大きなポテンシャルを秘めている領域と考えられており、[米国の市場調査会社のひとつ](https://www.fortunebusinessinsights.com/geospatial-analytics-market-102219)は、世界の高精度な地理空間情報ビジネスの市場規模は、2020 年時点で 568.8 億ドル（約 7兆 6,788 億円）、その後 2020 年から年 12.8％のペースで成長し、2028 年には 1,475.8 億ドル（約 19 兆 9,233 億円）に達すると予測しています。

日本でも衛星画像分析用のプラットフォーム [Tellus](https://www.tellusxdp.com/) や位置情報を使った人口の統計情報 [モバイル空間統計](https://mobaku.jp/) をNTTドコモ社が運営されていたりと、多くの企業・団体がサービスを展開して盛り上がっている市場です。

# 実際に触ってみた

今回はDatabricksのプラットフォーム上で衛星画像と位置情報データを触ってみます。
宣伝臭くなってしまいますが、Databricks上では[Mosaic](https://github.com/databrickslabs/mosaic)というSparkで地理空間情報を行うためのフレームワークを用意しており、そちらにUberが開発した可視化ツール Kepler が含まれています。また、こちらも Uber が開発した[H3](https://www.uber.com/en-IL/blog/h3/)へ位置情報を変換する関数なども用意しており、地理空間情報を行う上で生産性を向上させる工夫が盛り込まれています。最後に、Databricks上ではデータをデルタフォーマットという形式に変換・処理しており、表形式の構造化データも画像形式の非構造化データもSQL・Pythonで処理を行うことができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2789179/24bca137-6905-e1db-d829-c15cbc914738.png)

## 衛星画像
まずは衛星画像の解析から始めていきます。
皆さんも一度は Google Earth Engine など衛星画像を見たことがあるのではないでしょうか。

衛星によっては高解像度かつ広範囲に渡る撮影が可能なため、GPSデータが取得できないエリアなどにおいても地表の変化モニタリングや災害監視などの様々な用途で利用できます。また、定期的に撮影されるため、時系列的な変化も把握することができます。衛星には光学衛星と合成開口レーダー衛星（SAR）の大きく2種類がありますが、今回は光学衛星から取得できる画像を使った例をご紹介します。光学衛星とSARの違いは[こちらの宙畑さまのブログ](https://sorabatake.jp/279/)をご参照ください。

また、下記の条件を満たす分析テーマに取り組む際に取り扱われることが多いです。
① 位置情報データ(GPS/AISデータ)が取得できない場合
② 広範囲なエリアが分析対象である場合

今回はKaggleから[Airbus](https://www.kaggle.com/competitions/airbus-ship-detection/overview)のデータを取得してきて使用します。
下記が船舶の含まれる画像と含まれない画像の例です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2789179/092a675b-2788-eea1-f28f-f39a6a865616.png)

### データを読み込む
まずはSparkを使ってダウンロードしてきたデータを読み込み、ノートブック上で表示してみます。読み込みが終わると"content"列に衛星画像が確認でき、海上の画像と一部には船舶が存在することがわかります。こちらの画像だけだと正解の船舶データがどこに存在するかわからず、モデルの学習ができないので次に正解データと結合していきます。
![satellite_read.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2789179/16f5489d-5aae-46ce-3e61-0e629c4718ca.gif)

### 衛星データに正解データを付与する
読み込んだデータに対して正解データを付与して、Databricks Notebook上で表示してみます。
"mask"列に船舶の位置が白く表示されている正解データ、"content"列に衛星画像が存在することがわかります。これで機械学習作成のための学習データが準備完了です。
![satellite_join.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2789179/08ea4f23-98c1-cde2-5c06-09df47d8cc38.gif)

### 船舶を検出してみる - REST API
今回はモデル学習の箇所は割愛しますが、データブリックスでは物体検出モデルを開発するパッケージが用意されています。モデル推論を行うと下記のようになります。
データブリックス上でモデルを使った推論を行うREST API化することができます。具体的には左の衛星画像をリクエストとして送信すると、右側の画像のように船舶の検出を行うことができます。
![Screenshot 2022-12-02 at 15.36.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2789179/93b075ae-52c2-6a57-41f7-1c357d10c55b.png)

### 船舶を検出してみる - バッチ推論
また、APIとしてではなくバッチ推論を行うこともできます。下記を見ていただくと、左に入力されている画像、右側「prediction」列に船舶の検出結果が表示されていることがわかります。想定される業務としては毎日取得される衛星画像をバッチで処理して対象エリアに船舶が存在するか把握、適切なアクションを講じるということです。
![model_batch.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2789179/eedf2f95-aa61-d1a7-92ac-f20886ffc4f6.gif)

ご覧いただいた様に、弊社のDatabricksプラットフォームはストリーミングデータにも対応しており、リアルタイムに衛星画像を取り込んで処理・推論を行うことも可能です。

良く使われる事例としては防衛・諜報や製造業におけるサプライチェーン監視などがあり、各国が衛星画像を使って世界で何が起きているかを分析しています。代表的な会社にはAirbus社やPlanet社が存在します。

- 防衛・諜報
    - [北朝鮮の核実験を衛星画像で確認](https://asia.nikkei.com/Spotlight/N-Korea-at-crossroads/Satellite-images-show-North-Korea-s-path-back-to-nuclear-testing)
- 経済活動研究
    - [紛争によるイエメンの経済活動へのインパクト分析](https://blogs.worldbank.org/arabvoices/yemen-using-geospatial-data-and-modeling-show-economic-impact-conflict)
- 都市開発
    - [土地の用途分類](https://www.oecd-ilibrary.org/docserver/dc8e85d5-en.pdf?expires=1670218043&id=id&accname=guest&checksum=62C4D938B5D7F408CD9DF9968107777F)

## 位置情報データ
位置情報データは携帯電話から取得できるGPSデータ、船舶AISデータ、自動車エンジン・タイヤなどから取得できるデータが存在します。皆さんの持っている携帯電話も日々位置情報データを発しています。

### データを読み込む
ニューヨーク市のタクシーデータを使った例をご紹介します。
データソースは[こちら](https://data.cityofnewyork.us/Transportation/2018-Yellow-Taxi-Trip-Data/t29m-gskq)をご参照ください。ベンダーIDや乗車日時/降車日時、走行距離といった情報に加えて位置情報（緯度・軽度）が存在する、地理空間情報であることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2789179/8c33997a-9403-b58b-932a-4ba3838bb88f.png)

### Keplerを使って可視化してみる
ここでは乗車エリアごとに運行距離の平均を算出して可視化しています。
![gis_batch.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2789179/09c73b3a-31ee-a86b-f6b0-25f5b6d1061a.gif)

### おまけ
直近で弊社が開発している [Mosaic](https://databrickslabs.github.io/mosaic/models/spatial-knn.html)というフレームワークにおいて、位置情報のK近傍法を実装しており簡単にクラスタリングを行うことができます。下記が可視化の例です。詳細は[こちら](https://databrickslabs.github.io/mosaic/models/spatial-knn.html)をご参照ください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2789179/e1d039be-ae68-19ec-36b7-e595b8f599c0.png)

- 需要予測
    - 店舗とその周辺の通行パターンを分析し、新規出店の投資対効果を把握
    - 何人の人と自動車が広告塔の前を通り過ぎるか分析して、広告効果を算出
    - エリアごとに電力消費量を予測し、電力供給量が追いつかないエリアを特定
- サプライチェーン効率化
    - 配達サービスにおけるデリバリー最適化
    - 原材料入手経路の最適化

# おわりに

この記事では地理空間情報分析についてご紹介しましたが、いかがでしたでしょうか。

皆さんのご興味に合う情報がありましたら幸いです。また、Databricksでは地理空間情報分析が簡単に実施できるような機能が多数搭載されております。ご興味のある方はLinkedInなどからお問い合わせ頂けますと幸いです。

最後に記事を読んで少しでもためになったと思われた方は「いいね」や記事の保存、SNSでシェアいただけると嬉しいです！また今後読みたい記事などコメントいただけると幸いです。

# 参照記事
Geospatial Analytics: https://www.heavy.ai/technical-glossary/geospatial-analytics#:~:text=Geospatial%20analytics%20gathers%2C%20manipulates%20and,street%20address%20and%20zip%20code.
Qiitaで良い記事を書く技術: https://qiita.com/t12u/items/8c28484100dfd3a6351b
Mosaic: https://databrickslabs.github.io/mosaic/models/spatial-knn.html
Kaggle Airbus: https://www.kaggle.com/competitions/airbus-ship-detection/overview