こんにちは、Elastic認定アナリストのshiroiです。
業務では、Kibanaでビジネスログやセキュリティ情報の可視化を行っています。
Kibanaで地図を活用した可視化を行う場合、
標準で用意されている世界地図や日本地図の上にデータを描画することが一般的ですが、
独自に作成した地図(Custom Map)を利用することも可能です。
本ブログでは、KibanaでCustom Mapを利用する方法を紹介します。
Custom Mapのユースケースと利用方法
国/県/地域など、広いエリアにおける可視化を行う場合、標準で用意されている世界地図/日本地図を利用します。
一方で「遊園地/アウトレットモールなどの施設」や「オフィス/会議室などの建物内エリア」など、
標準地図でカバーできない限定エリアにおける可視化を行う場合には、Custom Mapを利用します。
KibanaでCustom Mapを利用するには、2つの方法があります。
- 「Elasticsearch」からCustom Mapを読み込む
- 「GeoServer」からCustom Mapを読み込む
1. 「Elasticsearch」からCustom Mapを読み込む
ElasticsearchからCustom Mapを読み込む場合、Shapeファイルを利用します。
Shapeファイルとは、「地形などの図形情報と、地名や位置などの属性情報をもった地図データ」が集まったファイルです。
Kibana Mapsでは、Shapeファイルを登録するだけでCustom Mapを利用可能であるため、
手軽に独自の地図で可視化をしたい場合におすすめのアプローチです。
一方、地図の拡大縮小に合わせて、表示するラベルのサイズを変更したり、複数の地図のデザインを統一するような細かな制御ができません。
2. 「GeoServer」からCustom Mapを読み込む
GeoServerは、地理情報を編集し、地図情報を配信することが可能なOSSです。
このGeoServerを使えば、CSSのような設定で複数の地図に対して、デザインを統一することや、
拡大縮小に合わせて、表示するラベルの制御を行うことが可能です。
注意点として、ブラウザが直接GeoServerと通信して地図情報を読み込む仕様であるため、
不特定多数の人が利用するにはGeoServerを一般公開する必要があります。
どちらかというとイントラネットでの利用に向いています。
本記事では、1の「Elasticsearch」からCustom Mapを読み込む方法を解説します。
2のGeoServerを使用したKibana Mapsでの可視化は、別の記事で紹介する予定です。
今回書かないこと
今回は、以下の内容は、対象外とします。
- Shapeファイルの作り方
- GeoJSONの作り方
GeoJSONとは、位置情報とその位置についてのラベル情報や形状(点や矩形など)情報を持ったJSONです。
実際に試してみる
今回は、コワーキングスペースの可視化を想定し、1週間の平均利用時間と各部屋のWifi強度を可視化します。
インデックスは以下です。
インデックス名:room-availability-weekly-yyyy-MM-dd
フィールド名 | 概要 |
---|---|
room_name | ルーム名 |
use_count | ルームの利用回数 |
use_date | ルームの利用日時 |
use_hours | ルームの利用時間 |
wifi_intensity | wifiの強度 |
独自の地図(Shapeファイル)の登録
最初にコワーキングスペースの1フロアを表示するShapeファイルを作成します。
Shapeファイルを作成する時は、IllustratorやQGISなどを利用するとよいでしょう。
Shapeファイルを作成すると、以下4種の形式のファイルが作成されます。
- shp
- dbf
- prj
- shx
上記4種全てを、Kibana Maps画面の「Add layer」を選択し、「Upload file」から登録します。
4つのファイルを登録すると、以下のような画面になります。
登録したShapeファイル群は、indexとして登録されます。
index名を入力し、登録した後は、「Add as document layer」をクリックして、レイヤー名や表示する不透明度、登録した地図の色を設定します。
ここでは、地図の不透明度を100%とします。
表示したい地図が固定されるように、以下のFilteringのチェックを外しておきます。
Layer Styleで地図に塗る色を設定後、保存します。
これで地図部分は完成です。
レイヤー別に塗り色を変える必要があるため、今回は以下3つに分けて独自の地図を作成しました。
- 部屋の枠と床の部分
- 机と椅子
- ルーム名
各地図について、それぞれ同じ操作を繰り返して登録します。
順番に登録していくと以下のような地図になります。
GeoJSONの登録
ShapeファイルをGeoJSONファイルにコンバートしましょう。
Kibana Maps画面の「Add layer」を選択し、「Upload file」から生成したGeoJSONを登録します。
この時に、Shapeファイル登録時と同様に、index名を指定します。
「Add as document layer」をクリックし、レイヤー名や不透明度を設定します。
Terms joinsで登録したGeoJSONで指定されたエリアをデータの値別に色が塗られるようにします。
色設定では、「By Value」にすることで、値別に塗り色を変えることができます。
これで設定は完了です。
データを表示すると以下のようになります。
この図面では、各部屋の利用時間が長ければ長いほど、濃い赤になり、利用時間が短ければ短いほど、薄い赤になります。
上記の地図では、GeoJSONで矩形表示をできるように設定していました。
エリアの中心に位置情報を設定したGeoJSONを登録すれば、以下のように円の色やサイズでWifi強度を表現することも可能です。
Wifi強度が強ければ強いほど、オレンジ色で丸の大きさが大きくなります。
弱いところは、青色で丸の大きさも小さくなります。
まとめ
今回は、簡単に独自の地図で可視化したいときの作り方を解説しました。
次回は、GeoServerを使用して、より高度なCustom Mapを作成する方法を紹介します。