Space Syntaxを用いて都市・街における道路網をヒートマップ化する方法

# はじめに
今回は、Space Syntaxを用いて、道路をヒートマップ化する方法についてまとめました。

どの道路がどれだけ重要なのか、どれほど自動車や歩行者が集まりやすいかなどを推測することができます！
![四万十市IntegrationHH.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3753744/9b7c2abc-d76e-3c09-6ff1-377e08f1c1c3.png)

上の画像は、高知県四万十市の道路網です。Space SyntaxのIntegrationという指標も用いてヒートマップにしたもので、道路の統合度・重要性を表しています。

今回は、このようなヒートマップを作成する手順を紹介します。

Space Syntax理論自体の説明については、以下の記事で説明していますので、ぜひご覧ください！

https://qiita.com/hiro_tan5/items/16604e51fba56f89c609

## depthmapXのインストール
まず最初に、depthmapXというソフトウェアをインストールします。Space Syntaxの分析では、このdepthmapXというソフトウェアを使います。

https://github.com/SpaceGroupUCL/depthmapX/releases

GithubのdepthmapX（上記リンク）を開いて、一番上にある最新バージョン（本記事執筆時点では8.0)をダウンロードします。

下のような画面が出てくるので、各自のPCに合ったものをクリックして、zipファイルをダウンロードしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3753744/17a8e822-3014-8781-d1eb-7684f1f80300.png)

ダウンロードが終わったら、zipファイルを解凍します。解凍すると、ファイルの中身が下のようになっていると思うので、赤で囲った部分をダブルクリックしてソフトウェアをインストールします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3753744/6407b58a-3c65-9777-03e1-2514a97cfa0f.png" width=300px">

基本的に案内にそのまま従って進んで大丈夫です。

これで、ソフトウェアの準備は終わりです。

では次に、分析を行うためのデータを準備しましょう。今回は、実際の都市空間の道路網を扱います。

そこで一点、覚えておかなくてはいけないことがあります。それは、depthmapXは、**dxf**という拡張子をもつファイルしか扱えないのです！！

#### dxfファイルとは
dxfとは、CADの拡張子の一つです。CADとは、コンピューター上で設計や製図を行うツールで、建築や機械系の分野で主に用いられています。

詳しくは、他にまとめてくださっている方々がいらっしゃるので、そちらをご参照ください。


## データ準備　-地理情報データの取得とCAD変換-

#### 必要なパッケージのインストール
道路網データを取得するためのOSMnxと、CADの拡張子の一つであるdxfを扱えるezdxfをインストールします。

```python
pip install osmnx ezdxf
```
#### 対象地域の道路ネットワークを所得
分析したい地域の道路ネットワークを取得し、グラフに変換します。`place_name`の部分に対象地域を設定します。（例：さいたま市大宮区）
高知県四万十市の場合は、`"Shimanto,Kochi,Japan"`のように入力します。
```python
import osmnx as ox
import geopandas as gpd

# 特定の地域の道路ネットワークを取得
place_name = "Omiya, Saitama, Japan"
G = ox.graph_from_place(place_name, network_type='all')

# グラフを道路データのGeoDataFrameに変換
nodes, edges = ox.graph_to_gdfs(G, nodes=True, edges=True)
```

好きな都市・街を選択してかまいませんが、あまり広い範囲を選択してしまうと、後の分析に長い実行時間がかかります。

#### dxfファイルに変換
最後に、道路網データをdxfファイルに変換します。この変換によって、depthmapXによるSpace Syntaxの分析が可能になります。
`dxf_filename`の部分は各自ファイル名を設定してください。
```python
import ezdxf

# DXFファイルの作成
doc = ezdxf.new()
msp = doc.modelspace()

# 新しいレイヤーを作成
roads_layer = doc.layers.new(name='Roads')

# 道路データをDXFに変換
for _, row in edges.iterrows():
    coords = list(zip(row.geometry.xy[0], row.geometry.xy[1]))
    if len(coords) > 1:
        msp.add_lwpolyline(coords, close=False, dxfattribs={'layer': 'Roads'}) # 'layer'をdxfattribsで指定

# DXFファイルとして保存
dxf_filename = 'roads_Omiya.dxf'
doc.saveas(dxf_filename)
```

## depthmapX上での分析
depthmapXを開いて、`File` → `New`をクリックします。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3753744/c773d3b9-1846-0e3c-ff41-2293e38f1853.png" width=450px>

次に、`Map` → `Import`で、先ほど作成したdxfファイルを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3753744/c364339f-bacc-db90-e0b9-ce5309f616c1.png)
データを上下に移動したいときは、上図の手のマークをクリックして操作します。拡大したいときは、その右の✙を選択して（縮小の場合は▼から－を選択）、クリックすると拡大・縮小ができます。

拡大・縮小の操作はたまにうまくいかないことがありますが、何度か試してみてください。

#### Axial Mapへの変換
準備が整ったら、`Map` → `Convert Drawing Map`を選択し、`New Map Type`の部分をData Mapから`Axial Map`に変更します。
（もちろん分析の対象や目的に応じて選択項目は変わりますが、今回は一例を紹介します。）

すると、緑色だけだった道路網がカラフルになるのではないかと思います。（下の写真のように）

![depthmapXの分析画面説明.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3753744/ee764ced-a1e6-57b9-e498-e9d81e62d317.png)

画面左のConnectivityの➡が青色になっていますが、これは今Connectivityという指標で評価していることを意味しています。Connectivityは、ある道路が他のいくつの道路と隣接しているかを表す指標です。

カーソルを地図上の道路に近づけると、その道路のConnectivityがカーソルの右下に表示されます。

ただ、少し厄介なことにソフトウェア上では、かなり細かい単位で分割されてしまっており、実際の隣接数を表しているわけではないことがほとんどです。この点に関しては、私も詳しくわかっていません。

#### さらなる分析
さらに分析を続けるには、`Tools` → `Axial/ Concex/ Pesh` → `Run Graph Analysis`を選択します。
一番上は`n`のままで、選択項目が４つありますが、最初は何も選択せずにOKを押してしまって構いません。後からもう一度選択することができます。

:::note warn
データによっては、この分析で長い実行時間がかかります。最初は何も選択せずに実行してみて、余裕がありそうであれば、分析したい項目を選択してみてください。
:::

個人的には、上から３つ目のRA, RRA, total depthはSpace Syntaxにおいて比較的コアな指標だと思っています。RRAは、ネットワークの規模に寄らず、相対的にどの程度入り組んでいるかを定量化した指標です。

＊ちなみに、高知県四万十市の分析には、実行に約10時間かかりました。

先ほどと同様に、画面左の分析したい指標をクリックすると、➡が青色に変わり、その指標におけるヒートマップが作成されます。

## まとめ
今回は、Space Syntaxを用いた道路網のヒートマップを作成しました。これによって、道路網ネットワークの観点から見た人の集まりやすさなどを定量的に可視化できるのです。

また、今回は道路網を対象としましたが、建築空間を対象とした分析も同じようにできます。

最後まで読んでくださりありがとうございました。何か誤り等ございましたら、ご訂正を頂けると幸いです。

再掲ですが、ヒートマップの値の意味などSS理論自体については、以下の記事で説明していますので、こちらもぜひご覧ください！

https://qiita.com/hiro_tan5/items/16604e51fba56f89c609