---
# System prepended metadata

title: 0_1. 要求定義_2024年度計画

---

# 1. 要求定義

## 1.1. システム開発の目的

* NPOがホストするWebサービス(地図アプリ)をリリースしたい。
* 利用対象は会員企業
* 会員企業が本Webサービスを利用することでWebGISを体験してほしい。
* 一般業務でも活用してほしい。

## 第１弾

* 自前の地図をアップする。まずはラスタタイル。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 リリース


## 第２弾

* 調査システムの実装
* 属性については最初は固定
* 任意属性は後から。定義ファイルをアップして自動設定

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