# 1. 要求定義
## 1.1. システム開発の目的
* NPOがホストするWebサービス(地図アプリ)をリリースしたい。
* 利用対象は会員企業
* 会員企業が本Webサービスを利用することでWebGISを体験してほしい。
* 一般業務でも活用してほしい。
## 第1弾
* 自前の地図をアップする。まずはラスタタイル。PC-MAPPINGから地図タイルを作成してサーバー上に配置。
* 点群データアップローダーの考え方でアップロード
### 分業
https://hackmd.io/j5IWkN6BRmq78babH4nY1w
1. ユーザー認証(Webサービス)【担当:鈴木】5日
* ユーザーテーブルの定義
* 鈴木担当回りメモ https://hackmd.io/@BATkGzd4S8COa_NUQczMHQ/rJF_u_cUC
* アップロードするユーザー(フルアクセス)
* Linuxユーザー
* ユーザー名 zgis_guest_[user_name]
* パスワード テーブルにあわせる
* グループ名 zgis_guests
* SSHログイン禁止
* 認証ページで登録し、アプリに使用
* ユーザ名, パスワード, メールアドレス
* 閲覧のみのユーザー(限定公開用)
* .htaccessでBASIC認証などで十分
* 限定公開じゃないページはログインなし
-- DDL generated by Postico 2.1 dev
-- Not all database features are supported. Do not use for backup.
-- Table Definition ----------------------------------------------
CREATE TABLE unvt.users (
user_id SERIAL PRIMARY KEY,
role_id numeric(1,0) NOT NULL REFERENCES unvt.list_role(role_id), -- admin|editor|guest
user_name character varying(64) UNIQUE, -- Linuxユーザー名は zgis_guest_[user_name]
user_password character varying(64), -- .{4,64}
email character varying(64), -- 通知用
disp_name character varying(64), -- 表示用
user_status numeric(1,0), -- 管理用コード(ユーザ有効かどうかなど)
created_at timestamp with time zone,
updated_at timestamp with time zone,
last_login_at timestamp with time zone
);
COMMENT ON TABLE sv1.users IS 'ユーザー';
COMMENT ON COLUMN sv1.users.user_id IS 'ユーザーID';
COMMENT ON COLUMN sv1.users.role_id IS '役割ID';
COMMENT ON COLUMN sv1.users.user_name IS 'ユーザー名';
COMMENT ON COLUMN sv1.users.password IS 'パスワード';
COMMENT ON COLUMN sv1.users.email IS 'Eメール';
COMMENT ON COLUMN sv1.users.disp_name IS '表示名';
COMMENT ON COLUMN sv1.users.status IS 'ユーザーの状態';
COMMENT ON COLUMN sv1.users.created IS '登録日時';
COMMENT ON COLUMN sv1.users.loggedin IS 'ログイン日時';
-- Indices -------------------------------------------------------
CREATE UNIQUE INDEX pkey_users ON sv1.users(user_id int4_ops);
CREATE UNIQUE INDEX key_users_user_name ON sv1.users(user_name text_ops);
* ユーザーテーブルにはアップロード可能ファイルサイズ、FTPアカウント情報等をセットする(または外部テーブルに持たせ外部参照させる)
* サーバーのグループ、FTPユーザ権限の割り当て(将来的にはSCPでのアップロード)検討
* ユーザー登録・管理画面(追加・編集・削除)・・・APIとフロントエンドが必要
* 工程的に難しければ申請式にしてDBに手動登録
* ユーザーの追加削除、グループの割り当てのシェルスクリプトを作成する
```mermaid
---
title: API Diagrams
---
sequenceDiagram
actor U as User / JS App
participant P as PHP App
participant S as Shell Script
participant L as Linux System
participant D as DB
par Create User
Note over U : JS: Validate UserName
Note over U : JS: Validate Password
Note over U : JS: Validate MailAddr
U->>+P: Request
Note right of U : string UserName
Note right of U : string Password
Note right of U : string MailAddr
Note over P : PHP: Validate UserName
Note over P : PHP: Validate Password
Note over P : PHP: Validate MailAddr
Note over P : PHP: Verify MailAddr
P->>+S: Run
Note right of P : string UserName
Note right of P : string Password
Note right of P : string MailAddr
S->>+L: getent passwd<br> zgis_guest_[UserName]
L-->>-S: Return EXIT STATUS
S->>+D: select id from unvt.users<br> where user_name=[UserName]
D-->>-S: Return UserID
S-->>-P: データ
P-->>-U: HTML
U->>+S: Request
S-->>-U: JavaScript / CSS
and Remove User
Note right of P : string UserID
end
```
```
Validator regex
UserName: 小文字英数4~20文字(Linuxユーザ名の上限が32文字)
[a-z0-9]{4,20}
Password: 4~64文字のすべての文字
.{4,64}
MailAddr: 英数字と_-および連続せず1文字目以外に出現する「.」、英数字と_-に挟まれた1度の@
^[a-zA-Z0-9_\-]+(\.[a-zA-Z0-9_\-]+)*@([a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9]\.)+[a-zA-Z]{2,}$
```
2. データアップローダー【担当:伊藤・小西】5日
* デスクトップアプリ(点群データアップローダーを改修)
* 設定画面・ファイルにアクセスできないようにして配布
* 利用時にユーザーログインが必要
* ユーザーログイン時にFTPユーザー名・パスワードを取得する
* ユーザーログイン時にアップロード可能ファイルサイズ等の利用者ごとの情報を取得する
* FTPアップロード時には取得したFTPユーザー名・パスワードを使用する(ユーザーの手元には情報を残さない)
* タイルの認証設定はBASIC認証
* 自前の地図は1種類に限定
* アップロード時の同意画面に強制削除する旨のメッセージを表示する
3. データプレビューアプリ【担当:増村・船山】10日
* Web地図表示ライブラリ:MapLibre GL JS(または、Mapbox GL JS)
* データアップロード時にWebアプリ一式を同梱してアップロードされる。
* 住所検索機能(現状、Mapbox 住所検索API)
* 背景地図の表示・非表示
* 背景地図:地理院地図 標準地図・淡色地図・シームレスオルソ・OSM、(Mapbox なら詳細な地図が使える)
* 自前の地図は1種類に限定
* 開発用のサンプルタイル:大山さんで準備する。伊藤が配置先ディレクトリを用意する。
4. データ管理の仕組み【担当:鈴木・清水】3日
* 期間限定(2週間とかで定期強制削除するShellスクリプトをCRONで定期実行)(鈴木)
アップロード時の同意画面に強制削除する旨のメッセージを表示する
ディレクトリ名に日付を採番する
./demo/[UserName]/[-]YYMMDDhhmmss/*
* 例外については申請させる
* アップロード可能サイズを決める(Linuxではディレクトリごとのクォータまたはユーザーごとにクォータを決められる)
10GB/ユーザー
* ディスク残量(80%)をSlackに通知する機能(鈴木)
* さくらのVPSにNFS(400GB)を追加する(阿部さんから連絡を受けたのち伊藤)
* 利用者がデータの使用量/使用可能容量を確認、データの削除ができるデータ管理画面をユーザーページに用意する(鈴木)
* ベースディレクトリを決定する(伊藤→決定後鈴木さんに連絡する)
5. ドキュメント作成【担当:大山・石垣】5日〜10日
* データ作成説明書
* データアップローダーの操作説明書
* データプレビューアプリの操作説明書(PDFファイル → 利用者向けの操作説明ページ)
* 管理者向けデータ管理説明書
### 作業工程
7月
7/23 UNVT-WG
7月末までのもので発表資料作成
8月
8/29 全国大会
9月
10月
11月
12月
12/1 リリース
## 第2弾
* 調査システムの実装
* 属性については最初は固定
* 任意属性は後から。定義ファイルをアップして自動設定
## 1.2. システムに求める機能
* Webサービスのランディングページ(訪問者が最初にアクセスするページ)を表示する
* 利用者は利用規約へ同意することでシステムを利用できる
* 利用者は利用者登録することでシステムを利用できる
* 会員企業はWebサービスを無償利用できる
* 利用者は複数プロジェクトを作成できる
* 自分が作成したプロジェクトの編集・削除ができる
* プロジェクトの公開・非公開ができる
* 一般的な地図アプリと同等の基本的な地図操作(移動拡縮)ができる
* レイヤを任意に定義できる
* レイヤの表示・非表示ができる
* 現地調査結果などをデータ入力できる項目を任意に定義できる
* デスクトップ・タブレット・スマホで入力できる
* 現地調査箇所の位置にポイントマーカーを追加できる
* 背景地図上に図形や文字をメモ書きできる
* モバイル端末のGPSで現在地を地図上に表示できる
* PC-MAPPINGの活用・連携
* UNVTでのタイル作成・登録・利用ができる
## 1.3. 類似サービス
* [Google マイマップ](https://www.google.co.jp/intl/ja/maps/about/mymaps/)
* [ArcGIS Online](https://www.arcgis.com/)