執筆中の [ango](https://github.com/un-vector-tile-toolkit/ango)
===


## :pencil2: ご自由にコメントしてください :pencil2:
# ango の目的
ango は 2019年9月13日に開催される FOSS4G Niigata 2019 のハンズオンセッション「国連と始めるベクトルタイル」に使うことを想定した、国連ベクトルタイルツールキットのハンズオン教材を開発することを目的としたレポジトリです
ango の目標は「国連ベクトルタイルツールキットを使ってウェブ上のオープンデータをあなたの手でベクトルタイルに変換する」方法をできるだけ分かりやすく伝えることです。Niigata のハンズオンまでは日本語をふんだんに使って作業をしていくつもりですが、いずれは英語化して国際的に使うことも想定しています。
ango というレポジトリ名は新潟市出身の作家坂口安吾の名からもらっています。
## 国連ベクトルツールキットとは
ここでは、国連ベクトルツールキットとは、ogr2ogr と Tippecanoe と vt-optimizer と Maputnik と Node を使ってベクトルタイルを生産しホストする方法論を指しているものと考えていただければと思います。なお、地物ストリームのワイヤフォーマットとしては GeoJSON Text Sequences を使うことになると思います。
詳細は、[FOSS4G 2019 Bucharest に投稿した論文](https://github.com/un-vector-tile-toolkit/bucharest-paper-drafts/blob/master/draft/Fujimura_et_al_FOSS4G2019.pdf)を見ていただけるとありがたいです。
ちなみに、国連ベクトルタイルツールキットは常に参加パートナーを求めています。しかし、まだ大したガバナンスメカニズムはありません。ちなみに、もう少し軌道に乗ってきた段階でちゃんとガバナンスを作って OSGeo incubation process に乗せたい、という話はあります。
# ango の実装技術選定
いきなり枕草子みたいで恐縮ですが、ハンズオンマテリアルの実装技術として、次の技術を使おうと現時点で思っています。
[GitHub](https://github.com/un-vector-tile-toolkit/an)
~ ファイルを置きます。
[GitHub Issues](https://github.com/un-vector-tile-toolkit/ango/issues)
~ クローズ可能な課題を置きます。なお、ドキュメントは HackMD で、コミュニケーションは Gitter で行きましょう。いずれも、気軽に書き込んでください。
[HackMD](https://hackmd.io/@hfu/ango-in-writing/edit)
~ ドキュメントを Markdown で書いていきます。
[Gitter](https://gitter.im/un-vector-tile-toolkit/ango)
~ コミュニケーションを行います
[Speaker Deck](https://speakerdeck.com)
~ スライドを共有する必要がある場合には Speaker Deck を使うかもしれません。でも、HackMD のスライドモードで頑張るかもしれません。
[asciinema](https://asciinema.org/)
~ コンソールのスクリーンキャストに使います。[HackMD のスライドモードと組み合わせられること](https://hackmd.io/@hfu/HJbdbD0eH#/1)は確認済み。`asciinema rec -i 1` といったコマンドで収録をします。
# ハンズオンの諸元
タイトル
~ 国連と始めるベクトルタイル
タイトル(英語仮訳)
~ Getting started on vector tiles with the United Nations
# 想定するハンズオンのフロー
1. いきなりデモ。今日のハンズオンが終わった時にはあなたがこれを作ってますよ、と訴える。生産とホストの作業の流れも続けて説明する。また、変換対象のオープンデータを案内し、生産対象を特定する。
1. 計算機環境の準備。ツールキット全部入りの Dockerfile である rasv を使ってもらうことを基本とする。
1. 各コマンドの動きを確認する。
1. ソースデータから mbtiles への変換をする。とりあえず modify.js はお仕着せ。具体的には、modify.js と材料データを含めたレポジトリ から取っていただく。
1. Express サーバを立ち上げて実際に見てみる。とりあえず style.json はお仕着せ。
1. ここから散開。違うデータに取り組むもよし、modify.js を修正してサイズ最適化に挑戦するもよし、style.json を Maputnik あるいは Node.js で書き換えてスタイルを整えるもよし。
1. 成果のご紹介、質問、ラップアップ、集合写真撮影
```flow
st=>start: スタート
e=>end: 終了
op1=>operation: デモ・座学説明
op2=>operation: 計算機環境の動作確認
op3=>operation: コマンドの動作確認
op4=>operation: 生産
op5=>operation: ホスト
cond=>condition: 余力がある?
op6=>operation: (バリエーションコース)
スタイル調整・最適化・
別データに挑戦など
op7=>operation: (まとめ)
成果紹介・質疑・ラップアップ・
集合写真撮影
st->op1->op2->op3->op4->op5->cond
cond(yes)->op6->op7
cond(no)->op7
op7->e
```
# ハンズオンで変換対象とするデータ
[こちらにあるリスト](https://github.com/optgeo/ideas/issues)の中から[国土数値情報の河川データで流域ポリゴンと川の地図](https://github.com/optgeo/ideas/issues/6)を共通課題として最初に実施することにしたいと思っています。
# ハンズオン用に構成するネットワーク
モラトゥワのときと同じく、会場から提供されるネットワークに藤村持参の AirPort Extreme を吊るして、そのネットワークに研修員は入ってもらうようにし、適宜ファイルサーバなどもそのネットワークの中にぶら下げます。いざという時にログインしてもらう予備計算機なども、このネットワークにぶら下げます。
```graphviz
digraph network {
internet [label="会場インターネット"]
airport [label="Airport Extreme"]
fileserver [label="サーバ(必要な場合)"]
pc1 [label="研修員PC 1"]
pc2 [label="研修員PC 2"]
rp1 [label="Raspberry Pi 1"]
internet -> airport
airport -> {fileserver rp1 pc1 pc2}
pc2 -> rp1
rp1 -> fileserver
pc1 -> fileserver
}
```
## 会場ネットワークについて
最善で WiMAX 一つ、と考えておくとそれほど外れないような気がします。そうすると、あまり大きなイメージをインターネットからとるような形にはしたくないかもしれませんね。
次の施策で緩和することをいずれ考えましょう。
- unvt/rasv は、できるだけ事前に pull しておいてください。
- クラウド上の環境 (EC2 とか) でお受けになることも歓迎します。
# 新ハンズオン資料 ango を構成するサブ・プロダクト
ハンズオンの流れを改めてサブ・プロダクトを考えるために整理しますと、次の通りだと思っています。
1. マルチアーキテクチャ Docker コンテナイメージである rasv を使って、国連ベクトルタイルツールキットが入った環境を立ち上げる。
2. 河川データ GeoJSONS を入手する。
3. ステップバイステップの誘導により、河川データ GeoJSONS からベクトルタイル を生産し、ホストする
4. 余力がある人は、optgeo 的なアプローチで自由な作業をしてもらう。
しかしとりあえず河川データについては調整があるので、当面の間、自然災害伝承碑のデータでハンズオンマテリアルを作っていきます。
これを実現するために必要なサブプロダクトは、次の通りだと思っています。
1. **国連ベクトルタイル Docker イメージ** [gh:un-vector-tile-toolkit/rasv](https://github.com/un-vector-tile-toolkit/rasv)
2. **自然災害伝承碑 GeoJSONS** [gh:optgeo/mokuroku2geojsons](https://github.com/optgeo/mokuroku2geojsons) -> [gh:optgeo/geojsons-natural-disaster-monuments](https://github.com/optgeo/geojsons-natural-disaster-monuments)
3. **ango の生産スクリプト** [gh:un-vector-tile-toolkit/ango-produce](https://github.com/un-vector-tile-toolkit/ango-produce)
4. **ango のホストスクリプト** [gh:un-vector-tile-toolkit/ango-host](https://github.com/un-vector-tile-toolkit/ango-host)
5. **ango のハンズオンスライド** [hackmd:ango-sides](https://hackmd.io/@hfu/ango-slides)
これらを、並行して作っていき、だんだんと参加型で修正・改善可能にしていきたいと思います。また、おおむねまとまってきたところで、1. - 4. を一つのコンテナイメージにまとめた [unvt/ango](https://github.com/un-vector-tile-toolkit/ango) を作成することになると思っており、実際に並行作業を進めています。
この他に、vt-optimizer を使うと思います。<strike>rasv にまだ同梱していないのですが、同梱することを考えるかもしれません。</strike>rasv への同梱を進めています。
# Annex: かんばん
- [x] <s>[rasv に入れ込んでおくべきテキストエディタは?](https://github.com/un-vector-tile-toolkit/rasv/issues/1)</s>
- [x] Docker コンテナイメージのサーバをローカルに立てることは可能なのか確認する。可能な場合には、スタンドアローンでできる可能性が高まります。→ [できます](https://docs.docker.com/registry/deploying/)
# Annex: 仮説あるいは目標
ango の一連の作業を通じて検証したい仮説あるいは達成したい目標としては、次のような命題を考えています。
- $35 の Raspberry Pi と、$200 の hp Stream と、それから $1500 の MacBook Pro では、当然できることは違うけれども、どの機種でも rasv でベクトルタイルの生産とホストができる。また、種類で言って80%以上の地理空間情報は、Raspberry Piでハンドルできるような規模である。
- ハンズオンのネットワークという極限の環境は、教育現場のネットワークという極限の環境、行政現場のネットワークという極限の環境、災害対応現場のネットワークという極限の環境に類似している。RPi ベースのサーバを同じネットワーク・セグメント内にぶら下げるという ango のアプローチは、これらの極限環境に共通のソリューションを提供できる可能性がある。