上司に「ひなたGISみたいなの午後までに作って」と言われた時のために


![quiita.gif](https://qiita-image-store.s3.amazonaws.com/0/100567/1b043659-cc29-a9e6-3d3e-ec7730abc6aa.gif)


##はじめに

タイトルは釣りですすません←

**年末オープンジオかくし芸大会** でおなじみの、[FOSS4G Advent Calendar 2017](https://qiita.com/advent-calendar/2017/foss4g)の11日目です。
このかくし芸大会というフレーズは去年と同じなのですが、たぶん今年も[12月24日](http://d.hatena.ne.jp/tmizu23/)あたりが集大成としてがんばってくれるはず、と勝手にハードル上げてFOSS4Gキッズへのプレゼントを今日も積み上げていきましょう。

さて、[ひなたGIS](https://hgis.pref.miyazaki.lg.jp/hinata/)とは、宮崎県情報政策課さんが構築したwebGISで、[RESAS](https://resas.go.jp/)や総務省などの様々なデータをweb上で閲覧・可視化できる国産(宮崎産)webGISの王様です。また、[内閣府主催の第一回RESASアプリコンテストで優勝したり](https://opendata.resas-portal.go.jp/contest/index.html)、掲載データが増えたり、最近ではドロー機能も追加され、さまざまな地域のデータを整理・可視化するコンテンツとして日々進化中です。

![Kobito.utIS0k.png](https://qiita-image-store.s3.amazonaws.com/0/100567/3272e406-a082-f3b4-bbae-e2f789081362.png "ひなたGIS")


##「ひなたGISみたいなの」ってヲイ

ここでいう「ひなたGISみたいなの」というのは、ブラウザ上で様々なデータを地図上に載せてグリグリ動かしたり煮たり焼いたりできるwebGISなコンテンツとします。

>（ ´-｀）。o 0 (15年くらい前はまずアプレットをIEにダウンロードして、スクロールさせたければ矢印ボタンをおしたあと1分くらい悲しい目をしながら画面遷移を待つなんてザラだったのに、今やさくさく動くなんて夢のようですが、これより先はGIS老人会の寄り合いで話しますすみません。

まま、状況としては、あなたが朝出勤したところボスに **「あのさー、QGISでこさえた例のデータ、今日午後にお客さんにネットで見てもらいたいんだよねー」** とアレなオーダーをブン投げられてしまったという想定です。
そんな上司アレとか会社ヤメロとかいう議論はとりあえずおいといて、そんなシチュエーションで困っているであろうあなたに捧げるナレッジをこの記事ではめざしたいと思います。

##どうすっぺか

使用する道具は[QGIS](https://qgis.org/ja/site/)と[QGIS2Web](https://plugins.qgis.org/plugins/qgis2web/)プラグインです。QGIS2webプラグインはそこそこ日本語でも情報はあるので、ご存知の方も多いと思いますが、QGISの表示された状態(プロジェクト）をFOSS4Gの仲間である、[Openlayers](https://openlayers.org/)や[Leaflet](http://leafletjs.com/)の形式にエクスポートしてくれるプラグインです。

たとえ相手先にQGISがなくても、QGIS2Webで吐き出したこれらのファイル一式を送って、先方でindex.htmlを開いてもらえれば、QGISでうまいこと調整した表示を相手のブラウザ上でを再現してくれます。

このため、手軽に結果を見てもらいたいときにも便利ですし、サーバー上に保存して、簡単なwebGISとして公開することも可能です。

あと、OpenlayersやLeafletを0からがっちり独習しなくても、取り急ぎのコンテンツが作れますし、さらに詳細カスタマイズするためにこれらのしくみを学ぶきっかけになると思います。

もちろんOpenlayersやLeafletとデータを使って構築することも可能ですが、既存のQGISであれこれ解析した結果のプロジェクトファイルが先にあれば、すぐエクスポートが可能です。

>（ ´-｀）。o 0 (新人のころはGISでラベル引き出しを1000個ぐらい調整して紙に印刷して校正して速達で送っていたのは何だったのかという気分になりますが（以下略）


##とりあえずQGISでなんかつくる
### 材料データ調達
[2015年のこの記事を](https://qiita.com/Yfuruchin/items/f282d0b31dececbe233e) ~~丸パク~~セルフカヴァーしまして、OpenStreetMapのデータベースから、[OverpassTurbo](http://overpass-turbo.eu/)を使って[車椅子利用に関するタグ](http://wiki.openstreetmap.org/wiki/JA:Key:wheelchair)がついている施設などのデータ一覧をとってきます。

```
[out:json][timeout:999];
// gather results
(
  // query part for: “wheelchair=*”
  node["wheelchair"]({{bbox}});
  way["wheelchair"]({{bbox}});
  relation["wheelchair"]({{bbox}});
);
// print results
out body;
>;
out skel qt;
```

…う、と思うかもしれませんが、コード表示したかっただけですすみません。

手っ取り早くやるには[過去記事](https://qiita.com/Yfuruchin/items/f282d0b31dececbe233e#wheelchair%E3%82%BF%E3%82%B0%E3%81%A3%E3%81%A6%E5%9B%BD%E5%86%85%E3%81%AB%E3%81%A9%E3%82%93%E3%81%A0%E3%81%91%E3%81%82%E3%82%8B%E3%81%AE)にあるように、

1.[OverpassTurbo](http://overpass-turbo.eu/)の地図を関東近辺にズームさせる
（もちろん淡路島でもパナマ運河でもOKですが、火星のデータはまだないです、ごめんなさい）
![image.png](https://qiita-image-store.s3.amazonaws.com/0/100567/52f22444-fb3a-96ec-7f84-183adee06a02.png)

2.`ウィザード`ボタンを押して
>wheelchair=*

と、一行入力後 `クエリ生成` を押す

![Kobito.TkxyeJ.png](https://qiita-image-store.s3.amazonaws.com/0/100567/57990319-2dfc-1d7e-9b8b-795b6f9df2ff.png "Kobito.TkxyeJ.png")


3.データ量によっては左につくられるクエリ内の[timeout:25]だと心もとないので値を
>[timeout:999]

などに変更する

※今回作成したクエリは[こちら](https://overpass-turbo.eu/s/tIY)

4.`実行`ボタンをおしてしばらくするとデータ量の警告が出るが、とりあえず `OK` でドーンと検索結果が表示される。POIだけで12000個位ですね、ふう。

![Kobito.FLq3ZA.png](https://qiita-image-store.s3.amazonaws.com/0/100567/75b08049-81d2-921c-8d4e-e2f83f998348.png "Kobito.FLq3ZA.png")

5.`エクスポート`ボタンをおしてGeoJSONでDLしてみる（17Mくらい）、これで材料が揃う

![Kobito.qjhx4j.png](https://qiita-image-store.s3.amazonaws.com/0/100567/1e3fb614-f067-a720-72d3-60baf6984dc5.png "Kobito.qjhx4j.png")

### QGISでいじる
1.[QGIS](https://qgis.org/ja/site/)を起動、持ってないひとはインストールしてね。WindowsでもOSXでもLinuxでもおk。
![Kobito.ftMrlC.png](https://qiita-image-store.s3.amazonaws.com/0/100567/b71c09ab-8b9c-e1c2-4c6e-e11ba1bc0793.png "Kobito.ftMrlC.png")

>（ ´-｀）。o 0 （[こんなん](https://shop.spreadshirt.com/qgis/)あるんだ…$41.49)


2.[TilelayerPlugin](http://space.geocities.jp/bischofia_vb/qgis-plugins/TileLayerPlugin/)をインストールしてかかっこいい背景図をQGISにのせてみる。わかんないひとは[こことか](https://git.io/vb0eZ)、[このへん](https://github.com/MIERUNE/mierune-qgis)を参照にしてみてください(ステマ)。今回はダーク系背景地図を準備。

![Kobito.aROtgx.png](https://qiita-image-store.s3.amazonaws.com/0/100567/bd76414f-e656-641c-acf9-39700e6e9031.png "Kobito.aROtgx.png")


3.さっきDLしてきたGeoJSONをQGISにドラッグ＆ドロップすると、どのデータ表示させるかきいてくるので、今回はとりあえずPointを選択してOK
![Kobito.hn0Z6J.png](https://qiita-image-store.s3.amazonaws.com/0/100567/6b5ebef0-94cb-de00-39a9-335852c6c079.png "Kobito.hn0Z6J.png")


4.で、ポイントデータがドーン。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/100567/144ac71d-6628-d240-9482-35dda7848e59.png)

##QGIS2webを使う

1.上記と同様に[プラグインをインストール](https://git.io/vb0eZ)。検索窓には`QGIS2web`を入力するとヒット
![image.png](https://qiita-image-store.s3.amazonaws.com/0/100567/a25140db-7150-c423-da8f-b1abe13fc7f1.png)

2．こんなアイコン![image.png](https://qiita-image-store.s3.amazonaws.com/0/100567/38ce168d-4ee7-2793-7eb5-4cdd8d9d7a28.png)がQGISのツールバーに追加されるので、クリック。

3.QGIS2Webが起動し、このようなウインドウが表示される。各エリアの機能はこんなかんじ

![image.png](https://qiita-image-store.s3.amazonaws.com/0/100567/cdad6d20-901c-df47-bb75-22318f9c536e.png)

>いきなり `Update preview` を押してしまうと乗せているデータの重さや構造によってQGISが落ちたり、ものすごい負荷が生じてマシンが止まったり（ひょっとしたら）火事になって凍えた身体の暖がとれたりするので、まずはQGISのプロジェクトを保存して、温かいお茶でも飲んで落ちついて、以下の設定をしてからにしましょう
（いま把握しているのは、レイヤをグループ化しているとなんかエラー吐いて倒れたりします）

4.とりあえずの表示レイヤ設定
>なぜ「とりあえず」かというと、設定して`Update preview`をクリック後、気に入らなかったらいくらでも設定やQGISメイン画面上の表示を変更（これ便利）できるので「とりあえず＝さくっと変換処理と表示ができそうな設定」としています

+ 表示したいデータレイヤを選択、レイヤ名の左側と、`Visiible`の両方にチェックをつける。
+ なんとクラスター（集積）表示もこの子やってくれるので、さっきの暖かいお茶を一口飲んで興奮をおさえつつ `Cluster` にもチェック

![image.png](https://qiita-image-store.s3.amazonaws.com/0/100567/fbab23bb-7b6f-57e1-05d7-14219e8eaef9.png)

5.とりあえずエクスポート設定。

+ `Exporter`は出力先設定で、FTPやローカルが選択できるが、とりあえず`Export to Folder`を選択後...をクリックしてローカルフォルダを指定
 （最初に設定しておかないとデフォルトのものすごい奥深くのフォルダに吐き出されてしまうので、浅くてわかりやすいフォルダを指定してあげるのがよいです、もちろん密林パス探検が大好きな方はそれも素敵だと思います）

+ `Precision`はデータの表示精度設定。maintainが画面そのまま、15から1にかけて荒くなるが、ファイルサイズは小さくなり、処理も軽くなる。
+ `Scale/Zoom`はエクスポートされる表示範囲の設定。
    + Extent（データのエクスポート範囲）はいまQGISのキャンバス(表示範囲)のCanvas extent
    + Zoomlevels(エクスポートされる地図タイルのズームレベル)は16~10とする。もちろん世界レベルで表示させたい場合は1〜5ぐらいでもOK。もちろん幅広く設定しても良いが、処理時間が長くなり、ファイルサイズが大きくなるので注意。
    + Restrict to extent(表示範囲外まで画面移動をロックするか)、なんか見て欲しい範囲外に行っちゃうコンテンツてのもアレなので、チェック（yes）を入れる。
    
>地図タイルのズームレベルの感覚がよくわかんないずら…というかたは[このへん](https://maps.gsi.go.jp/development/tileCoordCheck.html#5/35.362/138.731)みるとわかりよいです


![image.png](https://qiita-image-store.s3.amazonaws.com/0/100567/108c990e-042e-8b6d-bfaf-e50a4ef98f08.png)

+ `Appearance`設定は地図コンテンツ周りのツールボタン(アドレス検索や現在地ボタン・測定機能など)の追加設定。今回はとりあえずデフォルトのナシで。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/100567/e5a31240-cbc7-5c38-31a9-c61f846562bd.png)

+ 設定ウインドウ右下の背景地図選択はとりあえず[Stamen Toner](http://maps.stamen.com/toner/#12/37.7706/-122.3782)を選択
(プラグインの仕様上QGISに表示されている背景地図ではなく、ここのリストにある背景図から選ぶことになるが、あとでコードをちょっこり書き換えることで背景図を変更することが可能)


　![image.png](https://qiita-image-store.s3.amazonaws.com/0/100567/991604b1-7607-523c-1f3c-e069e4053719.png)

6.プレビュー、そしてエクスポート

+ ここまで設定できたら、今回はleafletを選択し `Update preview` をクリック

![image.png](https://qiita-image-store.s3.amazonaws.com/0/100567/bde509d6-d610-641b-400b-665fcc85ec6d.png)

さすれば（ちょっと1‐2分待つかもしれませんが）プレビューが表示されます、わーい
![image.png](https://qiita-image-store.s3.amazonaws.com/0/100567/226154f6-db59-49f5-1b88-0c0a06eede9b.png)

もちろんプレビュー内でもぐりぐり動かすことができるので、表示の仕方や背景を変更したければプラグインやQGISでの設定を適宜いじってみてください。

+ ある程度表示がOKとなったら、 `Export`をクリックするとモニョモニョ処理が始まる
 ![image.png](https://qiita-image-store.s3.amazonaws.com/0/100567/75a787c8-92c4-a985-2644-a187bc3f8455.png)

+ `Exporter`の出力先設定で設定したフォルダにleafletのファイル一式が保存される

![image.png](https://qiita-image-store.s3.amazonaws.com/0/100567/eb11c33a-7b77-ff83-afa6-c6d372769a75.png)

+ ではindex.htmlを開いてみると、わーい

![image.png](https://qiita-image-store.s3.amazonaws.com/0/100567/1771e0dc-1862-5a7a-9f0a-cb5411d7a78e.png)

6.…でも背景地図図変えたい…///

このままでもかっこいいんですが、背景地図も地図タイルデータを呼び出してきているので、index.htmlの記述をちょっと変えてあげると、さらにかっこよくなります（参考：[Mさんありがとうございます](http://www.giscience.sakura.ne.jp/blog/?p=392
)）。

生成されたindex.htmlをメモ帳やエディタで開いて40−50行目あたりに

```
var basemap0 = L.tileLayer('http://a.tile.stamen.com/toner/{z}/{x}/{y}.png', {
            attribution: 'Map tiles by <a href="http://stamen.com">Stamen Design</a>,<a href="http://creativecommons.org/licenses/by/3.0">CC BY 3.0</a> &mdash; Mapdata: &copy; <a href="http://openstreetmap.org">OpenStreetMap</a>contributors,<a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>',

```

という記述があります、ここでは地図タイルをネット経由で読み込んでいるので、このリンクをいじってみましょう。たとえばフリー・オープンライセンスの[MIERUNE地図](https://mierune.co.jp/tile.html)mono(手前味噌ですません)なら

```
        var basemap0 = L.tileLayer('https://tile.mierune.co.jp/mierune_mono/{z}/{x}/{y}.png', {
            attribution: 'Map tiles by <a href="http://mierune.co.jp">MIERUNE</a>,under <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a> &mdash; Mapdata: &copy; <a href="http://openstreetmap.org">OpenStreetMap</a>contributors, under ODbL</a>',
```
と記述して、背景とクレジットを変更するとこのようになります、わーい
![image.png](https://qiita-image-store.s3.amazonaws.com/0/100567/f6cf97e7-3ac9-47bb-e3b4-857dc2845a0c.png)
leafletサンプルは[こちらにあります](https://yfuruchin.github.io/qiita17fc/)

また、有料版[MIERUNE地図](https://mierune.co.jp/tile.html)だとこんなテイストも可能になったりします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/100567/26cc1f3c-89bd-c199-2237-94aa9b8499a3.png)


## その他

+ ポイントだけでなく、ポリゴン・ライン・ラスタも変換可能です。記事の冒頭アニメはラスタも表示させてます。
+ [チュートリアル動画](https://youtu.be/3Q-w7cn725M)は、わかりやすいのでおすすめです、まだちょっといろいろできそう。
+ もっともっとさまざまな調整や機能を使う場合は本家[Openlayers](https://openlayers.org/)や[Leaflet](http://leafletjs.com/)のリファレンスや日本語解説をごらんください。これらを駆使した[ひなたGISパイセン](https://hgis.pref.miyazaki.lg.jp/hinata/)とかさすがっす。 


+ [こちら](https://github.com/Yfuruchin/qiita17fc)にソースをおいてありますので、DLしてチェックしてみてください。適当に作っているので、そのへんはご容赦ください。

+ あと、アレなオーダーは頑張り過ぎないようにね、仕事だけが人生ではありません ;)

## この記事のライセンス
[![クリエイティブ・コモンズ・ライセンス](https://i.creativecommons.org/l/by/4.0/88x31.png)](http://creativecommons.org/licenses/by/4.0/deed.ja)
この記事は[CC BY 4.0（クリエイティブ・コモンズ 表示 4.0 国際 ライセンス）](http://creativecommons.org/licenses/by/4.0/deed.ja)の元で公開します、どうぞどうぞ。