# 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/)