🚴‍♀️

QGISでHelloCyclingのステーションごとにボロノイ図を作成し需要を可視化する

2025/02/24に公開

やること

市内の移動にHello Cyclingをよく利用します。
行きたい場所に手軽に移動できて大変便利なのですが、思った場所にステーションがなかったり、あっても全ての自転車が貸出中であったりと、時々ステーション探しに難儀することがあります。

HelloCyclingは全てのステーションの情報をGBFS形式で公開しています。そこでステーションの需要をQGISで可視化して、地域ごとのステーション需要を把握してみたいと思います。

手順としては、QGISで境界データの人口密度表示と、ステーションデータのポイントから生成したボロノイ図に重なるエリアの面積を集計し、各ボロノイ多角形に人口密度を付与します。

利用するデータは以下になります。


1. 国勢調査データの取得

1.1 データのダウンロードと読込み

1.2 人口密度の計算

  • 読み込んだ境界データのレイヤーから属性テーブルを開き、人口密度(pop_dens)を計算します。
  • フィールド計算機を開き、人口(JINKO)を面積(area)で割り、新しいフィールド pop_dens を作成します。その際、km2単位となるように1000000をかけます。
    フィールド「pop_dens」の追加

1.3 データの確認

  • 再度属性テーブルを開き、人口密度フィールド(例:pop_dens)が作成されていることを確認します。

フィールド「pop_dens」のフィールド

フィールド「pop_dens」の結果

2. HelloCycling ステーションデータの取得

2.1 HelloCyclingのステーションデータを読み込むために、便利なプラグインである「GBFS-NOW」をインストールします。

GBFS-Nowのインストール画面

2.2 ツールバーから「GBFS-NOW」を起動し、HelloCyclingのステーションデータを読み込みます。

ステーションデータの取得

2.3 読み込まれたステーションデータを確認します。

ステーションの確認


3. 境界データのシンボル設定(人口密度で色分け)

3.1 境界データレイヤの【プロパティ】を開き、【スタイル】タブで「分類(Graduated)」を選択します。

3.2 分類フィールドに人口密度(pop_dens)を指定し、カラースキームを選択して色分け表示します。

人口密度による色分け

3.3 QGISの地図画面に戻り、結果を確認します。

人口密度による色分けの結果


4. ボロノイ図の作成

4.1 属性テーブルを開き、「式による地物選択」を開きます。

4.2 条件式として「"住所" LIKE '%東京都%'」を入力し、「地物を選択」ボタンをクリックし、東京都にあるステーションのみを選択します。結果を別のレイヤーとして保存します。

式による地物選択

4.3 メニューの「ベクタ」 > 「ジオメトリツール」 > 「ボロノイポリゴン」を選択します。

voronoi polygons

4.4 入力レイヤに先ほど保存した東京都内のステーションデータレイヤを指定します。

4.5 作成したボロノイポリゴンレイヤをマップに追加し、確認します。

result voronoi


5. 境界データとボロノイ図の重なり(交差)抽出

5.1 「ベクタ」 > 「ジオプロセシングツール」 > 「Intersection」を選択します。

spatial intersection

5.2 入力レイヤ:ボロノイポリゴンレイヤ、オーバーレイレイヤ:境界データレイヤを指定します。

intersect layer

5.3 交差処理を実行すると、、各ボロノイ多角形と境界データとの交差部分(重なりエリア)のポリゴンが生成されます。出力レイヤを保存し、結果を確認します。

注)「無効なジオメトリがあります」というエラーが表示された場合、下記のようにプロセッシングツールから「ジオメトリを修復」を選択して無効なジオメトリを修復します。

restore geometry


6. ボロノイ多角形ごとに人口密度の集計・付与

6.1 交差レイヤには、各交差ポリゴンについて、もともとの町丁目の人口密度(pop_dens)の情報が含まれています。 まず、各交差ポリゴンについて pop_dens × $area の値を算出するフィールド(例:int_pop)を作成します。

int pop

6.2 「空間集計」ツールを使い、ボロノイ多角形ごとに交差ポリゴンの int_pop の合計値を集計します。(合計値は int_pop_sum となります)

spatial aggregation

select int pop

6.3 ボロノイ多角形内の人口合計 int_pop_sum を面積 $area で割り、人口密度を計算します。その際、km2単位となるように1000000をかけます。

voronoi pop dens


7. 結果の表示

属性テーブルを開き、人口密度に応じてカラーランプを設定します。

voronoi dens color

地図画面に戻り、結果を確認します。

結果1
結果2


まとめ

QGISで町丁目の人口密度を色分け表示し、HelloCyclingのステーションデータから作成したボロノイ図に重なるエリアの面積を集計して、各ボロノイ多角形に人口密度の数値を付与し、ステーションごとの需要を可視化しました。

ここから読み取れる需要はあくまでも国勢調査による人口密度に基づいたものになりますので、必ずしも実際のステーションの需要と一致するものではありません。需要の指標としては「昼間人口」などのデータを用いた方がより現実を反映した結果になるかもしれません。ここで解説した手順に沿って、その他のデータを用いてあらためて可視化してみるとまた違った傾向が見られるでしょう。ぜひお試しいただけたらと思います。


参考

Discussion