0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

qwc-services による Web GIS の構築 #1 qgis-docker

Last updated at Posted at 2025-02-28

「QGIS データを Web で表示」という一連の記事において、QGIS で作成したデータ("プロジェクト")を Web ページで表示する方法について、ノウハウを共有しました。

そこでは、QGIS ServerQWC2(QGIS Web Client 2)MapCache をそれぞれ単独でインストールして連携させるという方法を採用しました。

今回は、QGIS ServerQWC2 を中核とし、QWC2 をサポートする各種サービスを統合した Web GIS 構築環境である qwc-services を利用します。

これによって、単体としての QWC2 では実現できない次のような機能を追加することが出来ます。

  • ユーザの認証と権限
  • 編集機能
  • 全文検索
  • コンパクトな永続リンク
  • 高度プロファイル
  • カスタム地物情報テンプレート
  • 地図情報ポップアップ
  • レポート (Jasper)

私がもっとも必要としているのは「ユーザの認証と権限」の機能です。これが無いと、ウェブ上で公開できる地図の内容に大きな制約を伴うことになります。つまり、誰に見せても良い地図しか取り扱えないということになると、ウェブ地図アプリの有用性が大きく損なわれることになります。

ですので、当面は、これまでに QGIS Server + QWC2 + MapCacche で実現した機能に「ユーザの認証と権限」の機能を追加することを目標にします。

なお、引き続いて AlmaLinux 9.5 の環境で作業を進めます。また、QWC2 スタンドアロン環境での設定方法がそのまま通用するところは、説明を割愛します。

1. Docker

qwc-services は一連の Docker イメージとして提供されています。

従って、最初に Docker をインストールするところから始めます。

普通に dnf install docker とすると、なるほど、Docker はインストールされるのですが、うまく動いてくれません。podman-docker というパッケージが入るのですが、それでは具合が悪いようです。

まず Docker の公式レポジトリを追加します。

sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

入っているかも知れない podman, buildah パッケージを削除。

sudo dnf remove podman buildah

docker-ce, docker-ce-cli, containerd.io をインストール。

sudo dnf install docker-ce docker-ce-cli containerd.io

そして、docker サービスを起動。

sudo systemctl start docker.service
sudo systemctl enable docker.service

docker がインストールされたかどうかを確認。

sudo docker version
または
sudo docker info

通常ユーザで docker 操作ができるように、ユーザ docker を 通常ユーザのグループに追加。

sudo usermod -aG docker $USER

グループの追加を有効にするために再起動。

sudo reboot

以上については、下記を参照しました。

2. qwc-docker でデモ版をインストール

マニュアルに従って作業を進めます。

qwc-docker レポジトリを gitHub からクローンします。

git clone --recursive https://github.com/qwc-services/qwc-docker.git

qwc-docker ディレクトリに入って、サンプルの設定ファイルをコピーします。

cd qwc-docker
cp docker-compose-example.yml docker-compose.yml
cp api-gateway/nginx-example.conf api-gateway/nginx.conf

docker-compose.ymlpostgres のスーパユーザのパスワードを設定します。

docker-compose.yml
  qwc-postgis:
    image: sourcepole/qwc-base-db:<version>
    environment:
      POSTGRES_PASSWORD: '<SET YOUR PASSWORD HERE>'

秘密鍵を作成。

python3 -c 'import secrets; print("JWT_SECRET_KEY=\"%s\"" % secrets.token_hex(48))' >.env

docker-compose.yml で QWC サービスを走らせる UID/GID を変更し、ホストの共有ボリュームの所有者に合せます。

docker-compose.yml
    x-qwc-service-variables: &qwc-service-variables
      JWT_SECRET_KEY: $JWT_SECRET_KEY
      JWT_COOKIE_CSRF_PROTECT: 'True'
      JWT_COOKIE_SAMESITE: 'Strict'
      # Uncomment if the application is exclusively run over HTTPS to ensure cookies are only sent with HTTPS requests
      # JWT_COOKIE_SECURE: 'True'
      # Set these to override the UID/GID which runs uwsgi. Useful to ensure uwsgi runs under the same user/group
      # which owns the shared volumes on host, avoiding the need to change the ownership/permissions of those files/folders.
-     # SERVICE_UID: 1000
-     # SERVICE_GID: 1000
+     SERVICE_UID: 1000
+     SERVICE_GID: 1000
      # Uncomment this for multi-tenant support, see also api-gateway/nginx-example-multitenant.conf
      # TENANT_HEADER: Tenant

上記の 1000 という UID/GID は一例です。私の vmware 環境では 1000 でしたが、運用サーバの環境では 1001 でした。/etc/passwd を見て調べてください。

共有される solrdata volume のパーミッションを変更します。

sudo chown 8983:8983 volumes/solr/data

マニュアルには記載されていませんが、docker compose upversion について不平を述べますので、docker-compose.ymlversion の記述をコメントアウトします。

docker-compose.yml
-   version: '3.4'
+   # version: '3.4'
    
    x-qwc-service-variables: &qwc-service-variables
      JWT_SECRET_KEY: $JWT_SECRET_KEY
      JWT_COOKIE_CSRF_PROTECT: 'True'
      JWT_COOKIE_SAMESITE: 'Strict'
      ...

全てのコンテナを立ち上げます。初回は全ての docker イメージを dockerhub からダウンロードするため、少し時間がかかります。

docker compose up

http://localhost:8088/ にアクセスして、動作を確認します。

image.png

管理画面は http://localhost:8088/qwc_admin です。ユーザ名 admin パスワード admin でログインしてください。初回のログイン時に、パスワードの変更を求められます。

image.png

以上で、デモ版のインストールは完了しました。

ここまでの所は、あっけないほど簡単ですね。

3. テーマの構成

3-1. テーマの構成ファイル

テーマの構成に関わるファイルは、qwc-docker/volumes/config-in/<tenant>/themesConfig.json です。

ここで <tenant> は、マルチ・テナントをサポートする場合のテナント名ですが、シングル・テナントの場合は、テナント名が default と決っていますので、qwc-docker/volumes/config-in/default/themesConfig.json となります。(以下、シングル・テナントを前提として話を進めます)

3-2. テーマの自動構成

使用したいテーマ(QGIS プロジェクト)を qwc-docker/volumes/qgs-resources/scan ディレクトリの下に配置します。

そして、QWC Admin の画面で、Generate service configuration を押すと、themesConfig.json の設定内容と QGIS Server から取得した QGIS プロジェクトの内容を統合したテーマ設定が自動作成されます。QWC2 スタンドアロン環境と同じですね。

背景レイヤや外部レイヤの設定を themesConfig.json に書くのも、スタンドアロン環境と同じです。

ただし、生成される構成ファイルは、qwc-docker/volumes/config/default の下の mapViewerConfig.json というファイルです。これは、スタンドアロン環境でのビューワ設定(config.json)とテーマ設定(themes.json)を一つに合せたものです。http://localhost:8088/themes.json でテーマ設定の内容を確認することが出来ます。

3-2-1. デフォルト・テーマの指定

使用したいテーマ(QGIS プロジェクト)をデフォルト・テーマとしたい場合は、themesConfig.jsondefaultTheme を次のように設定できます。

themesConfig.json
    "defaultTheme": "isg",

上のように、拡張子 ".qgs" は付けません。

3-3. QGIS プロジェクトの格納場所を変更できる?

マニュアルによると、themesConfig.jsonqgis_projects_scan_base_dir を設定すると、QGIS プロジェクトの格納場所を変更することが可能であるそうですが、手許の環境でいろいろと試してみましたが、qwc-docker/volumes/qgs-rerouces/scan ディレクトリ以外をスキャンしてくれませんでした。

マニュアルの誤記で、themesConfig.json ではなく、tenantConfig.json での設定ではないかと思いますが、試していません。

3-4. テーマのサムネール

テーマのサムネール画像は qwc-docker/volumes/qwc2/assets/img/mapthumbs の下に <pboject_basename>.png (例えば "isg.png")として置きます。

もう一度、テーマの自動構成を実行する必要があります。

3-5. 日本語フォント

qwc-qgis-server のコンテナには日本語フォントが入っていないので、そのままだと、地物の日本語ラベルが豆腐の列になります。

日本語フォントを入れる必要があるのですが、ホストに入っているフォントを使用することが出来ればそれでオーケーです。

qwc-docker/docker-compose.ymlqwc-qgis-server で、次のように、ホストの google-noto-cjk フォントを volumes で共有して読めるようにします。

:docker-compose.yml
      qwc-qgis-server:
        image: sourcepole/qwc-qgis-server:3.34
        # ports:
        #   - "127.0.0.1:8001:80"
        environment:
          # QGIS_SERVER_LOG_LEVEL: 0
          # LOCALE: 'de_DE'
          # QGIS_SERVER_IGNORE_BAD_LAYERS: 1
          FCGID_EXTRA_ENV: 'PRINT_LAYOUT_DIR'
          PRINT_LAYOUT_DIR: '/layouts'
        volumes:
          - ./volumes/qgs-resources:/data:ro
          - ./pg_service.conf:/etc/postgresql-common/pg_service.conf:ro
          - ./volumes/qgis-server-plugins/print_templates:/usr/share/qgis/python/plugins/print_templates:ro
          - ./volumes/qgis-server-plugins/split_categorized:/usr/share/qgis/python/plugins/split_categorized:ro
          - ./volumes/qgis-server-plugins/filter_geom:/usr/share/qgis/python/plugins/filter_geom:ro
          - ./volumes/qgis-server-plugins/clear_capabilities:/usr/share/qgis/python/plugins/clear_capabilities:ro
          - ./volumes/print-layouts:/layouts:ro
+         - /usr/share/fonts/google-noto-cjk:/usr/share/fonts/google-noto-cjk:ro

このように追記してからコンテナを再起動すればオーケーです。

なお、ホストに日本語フォントが入っていない場合もあるようです。その場合は、dnf でインストールしてください。

sudo dnf install google-noto-sans-cjk-jp-fonts google-noto-sans-cjk-ttc-fonts google-noto-serif-cjk-ttc-fonts

3-6. 背景レイヤの設定

背景レイヤの設定方法は、"QWC2" スタンドアロン環境とほとんど同じです。

qwc-docker/volumes/config-in/default/themesConfig.json に下記の内容を追記して、テーマの自動構成を実行します。

themesConfig.json
    ...
    "defaultTheme": "isg",
    "themes": {
        "items": [
            {
                "id": "isg",
                "name": "isg",
                "url": "/ows/scan/isg",
                "backgroundLayers": [
                    {
                        "name": "",
                        "printLayer": "bg"
                    },
                    {
                        "name": "gsijp-std",
                        "printLayer": "gsijp-std"
                    },
                    {
                        "name": "gsijp-photo",
                        "printLayer": "gsijp-photo"
                    },
                    {
                        "name": "g-map",
                        "printLayer": "g-map"
                    },
                    {
                        "name": "g-sat",
                        "printLayer": "g-sat",
                        "visibility": true
                    }
                ]
            },
            ...
        ]
        "backgroundLayers": [
            {
                "name": "gsijp-std",
                "type": "xyz",
                "title": "国土地理院-標準地図",
                "tiled": true,
                "url": "https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png",
                "thumbnail": "gsijp-std.png"
            },
            {
                "name": "gsijp-photo",
                "title": "国土地理院-航空写真",
                "type": "xyz",
                "tiled": true,
                "url": "https://cyberjapandata.gsi.go.jp/xyz/seamlessphoto/{z}/{x}/{y}.jpg",
                "thumbnail": "gsijp-photo.png"
            },
            {
                "name": "g-map",
                "title": "Google Map",
                "type": "xyz",
                "tiled": true,
                "url": "https://mt1.google.com/vt/lyrs=m&x={x}&y={y}&z={z}",
                "thumbnail": "g-map.png"
            },
            {
                "name": "g-sat",
                "title": "Google Satellite",
                "type": "xyz",
                "tiled": true,
                "url": "https://mt1.google.com/vt/lyrs=s&x={x}&y={y}&z={z}",
                "thumbnail": "g-sat.png"
            },
            ...
        ]

注意点が三つあります。

  • テーマの "url""/ows/scan/<project>" の形で必ず指定する
    • "url" が正しく指定されていないと、テーマの自動構成でエラーが発生します
    • "id""name" は省略しても構いません
  • 背景グループも "printLayer" 指定する
    • 上記では "bg" が背景グループの識別名です
    • "printLayer" 指定をしないと、空っぽのグループだけがレイヤ・ツリーに出現します
    • "name""" が良いでしょう
  • 背景レイヤのサムネールはテーマのサムネールと同じ場所に置く
    • qwc-docker/volumes/qwc2/assets/img/mapthumbs です

3-7. 外部レイヤの設定(MapCache の利用)

外部レイヤを設定して MapCache を利用する方法も、QWC2 スタンドアロン環境とほとんど同じです。

マニュアルでは QGIS プロジェクトの「外部URL」設定を利用する方法が解説されていますが、themesConfig.json を直接に編集する方が確実であり、手間も少ないと思います。

qwc-docker/volumes/config-in/default/themesConfig.json に下記の内容を追記して、テーマの自動構成を実行します。

themesConfig.json
    ...
    "defaultTheme": "isg",
    "themes": {
        "items": [
            {
                "id": "isg",
                "name": "isg",
                "url": "/ows/scan/isg",
                "externalLayers": [
                    {
                        "name": "spots",
                        "internalLayer": "spots"
                    }
                ],
                "backgroundLayers": [ ... ],
            },
            ...
        ],
        "externalLayers": [
            {
                "name": "spots",
                "type": "wms",
                "url": "https://webgis.mydomain/mc/",
                "params": {
                    "SERVICE": "WMS",
                    "VERSION": "1.3.0",
                    "TRANSPARENT": true,
                    "FORMAT": "image/png",
                    "LAYERS": "spots",
                    "tiled": true
                },
                "featureInfoUrl": "/api/v1/featureinfo/scan/isg",
                "queryLayers": [
                    "spots"
                ],
                "legendUrl": "/api/v1/legend/scan/isg",
                "infoFormats": [
                    "text/xml"
                ]
            }
        ],
        "backgroundLayers": [ ... ]
  • "url": 上記は、従来の QGIS Server + QWC2 + MapCache の環境で動作している MapCache の URL をそのまま使用しています
    • とりあえずは MapCache が利用できることを確認できれば良しとしますが、qwc-servicesMapCache を連携させる方法については後で検討します。その結果として、異なる URL を使うようになるかもしれません
  • "featureInfoUrl": qwc-services 環境では、地物情報の取得を qwc-feature-info-service 経由で行いますので、そのための URL を指定します
  • "legendurl": qwc-services 環境では、凡例の取得を qwc-legend-service 経由で行いますので、そのための URL を指定します

MapCache 側の設定変更も、/etc/mapcache.xml における "source"URLqwc-qgis-serverURL に変更するだけで済みそうです。

3-8. その他のテーマ設定

デフォルト縮尺リストや検索プロバイダなどを QWC2 スタンドアロン環境と同じように設定します。対象の設定ファイルが変るだけで、設定する内容は同じです。

4. ビューワの設定

QWC2 マップ・ビューワの設定方法もスタンドアロン環境とほとんど同じです。

変るのはディレクトリ構成ぐらいです。

  • 設定ファイル:
    • QWC2 スタンドアロン環境: qwc2-demo-app/static/config.json
    • qwc-docker 環境: qwc-docker/volumes/config-in/default/config.json
  • ロゴ用画像ファイル格納ディレクトリ
    • QWC2 スタンドアロン環境: qwc2-demo-app/static/assets/img
    • qwc-docker 環境: qwc-docker/volumes/qwc2/assets/img

qwc-services による各機能の向上や設定内容の追加・変更などがありますが、それについては、おいおいと見ていくことにします。メニュー項目やボタンの追加・削除・変更などであれば、QWC2 スタンドアロン環境でのノウハウがそのまま通用しますので、ここでは改めての説明は割愛します。

ちなみに、qwc-docker のデモ版では、「ポータル」がごっそり削除されています。あれは要りませんよね、やっぱり。

5. MapCache との連携

qwc-servicesMapCache を連携させるためには、相互に呼び出しが可能なように、QGIS ServerMapCacheURL を決定することが必要にして十分な条件となります。つまり、各モジュールのルーティングを決めれば良いわけです。

5-1. ルーティング

基本構想は以下の通りです。

  • MapCache はホストで動作しているものをそのまま使用
    • ホストで MapCache を動かしている httpd もそのまま使用
  • qwc-services はコンテナで動作しているものをそのまま使用
    • QGIS Server
    • QWC2 Viewer
    • qwc-api-gatewaynginx もそのまま使用
  • ホストの nginx で全体をまとめる
    • http ポート(80)、https ポート(443) を使う
    • MapCache へのルーティング
    • qwc-services へのルーティング
全体図
-- nginx -----+---- httpd ----------- MapCache
   (80,443)   |     (8080)
              |
 - - - - - - | - - - - - - - - - - - - - - - - - - -
              | 
              +---- nginx ------+---- QGIS Server
                  (8088:80)     +---- QWC2 Viewer
                                +---- etc.,

nginx が二段のリバース・プロキシを構成してます。

一つにまとめたら良いんじゃないの?とも思いますが、いろいろと面倒くさそうです。

  • 前段のホストの nginx にまとめた場合
    • qwc-servises 内でのルーティングに不安
  • 後段のコンテナ内 nginx にまとめた場合
    • コンテナ内の nginx からホストの MapCache へルーティングするという問題
    • Let's Encrypt 証明書更新の問題

結局、前段のホストの nginx の設定を変更するだけで済む方法を採るのが簡明で良いと判断しました。

5-2. MapCachehttpd 設定

ホストの MapCachehttpd 設定は従来と変りません。

httpd.conf
...
# listen 80
listen 8080
...
mapcache.conf
<IfModule mapcache_module>
    <Directory "/mc">
        Require all granted
    </Directory>
    MapCacheAlias /mc "/etc/mapcache.xml"
</IfModule>

5-3. qwc-api-gateway コンテナの nginx 設定

docker-compose.ymlqwc-api-gateway にも、qwc-docker/api-gateway/nginx.conf にも、変更はありません。

5-4. ホストの nginx 設定

ホストの nginx のための /etc/nginx/conf.d/webgis.conf を以下のように編集します。

webgis.conf
# webgis.mydomain ... qwc-services / MapCache
server {
    listen 80;
    server_name webgis.mydomain;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    http2 on;
    server_name webgis.mydomain;

    ssl_certificate /etc/pki/tls/certs/vmware.crt;
    ssl_certificate_key /etc/pki/tls/certs/vmware.key;

    proxy_set_header    Host                $host;
    proxy_set_header    X-Real-IP           $remote_addr;
    proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
    proxy_set_header    X-Forwarded-Proto   $scheme;

    # MapCache
    location /mc {
        proxy_pass http://localhost:8080/mc;
    }

    # qwc-services
    location / {
        proxy_pass http://localhost:8088;
    }
}

要は MapCacheqwc-services とのルーティングを行っているだけです。

5-5. MapCache 外部レイヤの URL を変更する

themesConfig.jsonMapCache を参照している外部レイヤの URL を全て変更します。

:themesConfig.json
            "externalLayers": [
                {
                    "name": "spots",
                    "type": "wms",
-                   "url": "https://webgis.mydomain/mc/",
+                   "url": "/mc",
                    "params": { ... }
                }

5-6. MapCacheQGIS Server URL を変更する

/etc/mapcache.xml"source" として参照している QGIS Server の URL を全て変更します。

mapcache.xml
        <source name="spots" type="wms">
            <getmap>
                <params>
                    <VERSION>1.3.0</VERSION>
                    <FORMAT>image/png</FORMAT>
                    <LAYERS>spots</LAYERS>
                    <TRANSPARENT>true</TRANSPARENT>
                </params>
            </getmap>
            <http>
-               <url>https://webgis.mydomain/qsv/isg/</url>
+               <url>https://webgis.mydomain/ows/scan/isg</url>
            </http>
        </source>

6. 翻訳

6-1. マニュアル

ラベルやメッセージの翻訳を修正・追加する方法については、下記にマニュアルがあります。

しかし、このマニュアルに記載されている手順は QWC2 スタンドアロン環境を前提にしているようで、qwc-services 環境での翻訳の修正・追加は実際にどうやったら良いのか、よく分りません。

6-2. 翻訳の選択的な上書き?

唯一、"Selectively overriding translation strings" の節が qwc-services 環境での適用方法を記述しています。翻訳を選択的に上書き出来るというもので、これは有難いと思ったのですが、指示通りにやってみてもうまく行きませんでした。やり方が間違っているのかも知れませんが、何の変化も無いのです。

6-3. QWC2 をカスタム・ビルドして使用する?

どうも、qwc-services の一部として動作させる場合の QWC2 はビルド済みのもの、すなわち、スタンドアロン環境で yarn run prod を実行した後の prod ディレクトリに生成されるものである必要があるようです。

マニュアルの "Compiling an application bundle" の節を読むと、次のように説明されています。

望むようにソースを編集したら、運用環境用のデプロイ可能なアプリケーション・バンドルをコンパイルします。

yarn run prod

qwc-docker を使う場合は、qwc2-app/prod フォルダーのコンテンツを qwc-docker/volumes/qwc2 にコピーし、そのカスタム・ビルドを qwc-map-viewer-base とともに使用するように qwc-docker/docker-compose.yml を修正します。

qwc-map-viewer:
  image: sourcepole/qwc-map-viewer-base:vYYYY.MM.DD
  environment:
    <<: *qwc-service-variables
    SERVICE_MOUNTPOINT: '/'
  volumes:
    - ./pg_service.conf:/srv/pg_service.conf:ro
    - ./volumes/config:/srv/qwc_service/config:ro
    - ./volumes/qwc2:/qwc2:ro

これって、要するに、スタンドアロン環境でビルドした QWC2 を使え、ということですよね。

そりゃ、まあ、そうやれば、翻訳の修正や追加は思い通りに出来るでしょう。しかし、そんな面倒くさいこと出来ますか? 私はイヤです。

6-4. 翻訳ファイルを共有する

結局のところ、最も手軽で実際的な方法は、QWC2 の翻訳ファイル全てをコンテナとホストで共有するという荒っぽい方法でしょうか。

      qwc-map-viewer:
        image: sourcepole/qwc-map-viewer:latest-2025-lts
        environment:
          <<: *qwc-service-variables
          SERVICE_MOUNTPOINT: '/'
        volumes:
          - ./pg_service.conf:/srv/pg_service.conf:ro
          - ./volumes/config:/srv/qwc_service/config:ro
+         - ./volumes/qwc2/translations:/qwc2/translations:ro
          - ./volumes/qwc2/assets:/qwc2/assets:ro

qwc-docker/volumes/qwc2/translations フォルダには、最新の qwc2 の翻訳ファイルを github から取得してきて設置し、適宜、内容を修正・追加します。

この方法では、今後、github において qwc2 の翻訳が更新された場合にちょっと困る(手作業による更新作業が必要になる)訳です。まあ、それぐらいは大目に見ようという、だからこれは「荒っぽい」方法です。

このあたり、エレガントな方法をご存知の方がいらしたら、是非ご教示ください。

7. スタンドアロン環境との小さな相違点

qwc-services による地図ビューワを動かしていると、いくつかスタンドアロン環境との相違点に気付きます。本格的な作業に入る前に、ちょっと見ておきます。

7-1. 「線を計測」と標高プロファイル

「線を計測」ツールを実行すると、下の図のように、線の長さだけでなく、通過点の標高データが自動的に出力されます。

image.png

これは、図のような山間地にあっては、非常に魅力的な機能です。

しかし、精度が悪すぎます。

図では、集落の北端に位置する山頂と、南端に位置する谷の狭隘部を通過する直線を引いて、標高プロファイルを表示させています。それぞれの標高が 770m および 419m と表示されていますが、実際には 1,005m と 267m です。こんなに差があっては実用になりません。

原因は、qwc-elevation-service が使用している標高取得用データにあります。

qwc-docker/volumes/config/default/elevationConfig.json に設定があります。

elevationConfig.json
{
  "$schema": "https://github.com/qwc-services/qwc-elevation-service/raw/master/schemas/qwc-elevation-service.json",
  "service": "elevation",
  "config": {
    "elevation_dataset": "/vsicurl/https://data.sourcepole.com/srtm_1km_3857.tif"
  }
}

データ・ファイルは、ファイル名から推測して、形式は geoTIFFCRSEPSG:3857 WGS 84 / Pseudo-Mercator、そして 1km という非常に粗いメッシュ・データであるようです。ダウンロードして QGIS で開いてみたらその通りでした。

このデータ・ファイルを差し替えれば良いのだろう、という事で、isg-dem-3857.tif というファイルを用意して、それを読み込ませるために、いろいろと試してみました。

  • elevationConfig.json の書き換え ... ダメ
    • "elevation_dataset" の値を書き換えても、Generate service configuration ボタンを押すたびに元に戻される
  • config-in/defaultelevationConfig.json を置く ... ダメ
    • config/defaultelevationConfig.json は変化しない
  • 環境変数 ELEVATION_DATASET でデータ・ファイルを指定 ... OK!!

qwc-docker/docker-compose.ymlqwc-elevation-service を以下のように編集すると、データ・ファイルの差し替えが出来ました。

docker-compose.yml
      qwc-elevation-service:
        image: sourcepole/qwc-elevation-service:latest-2025-lts
        environment:
          <<: *qwc-service-variables
          SERVICE_MOUNTPOINT: '/api/v1/elevation'
+         ELEVATION_DATASET: '/isg-dem-3857.tif'
        volumes:
          - ./volumes/config:/srv/qwc_service/config:ro
+         - ./volumes/elevation/isg-dem-3857.tif:/isg-dem-3857.tif:ro

isg-dem-3857.tif は、qwc-docker/volumes/elevation というディレクトリを作って、そこに置いています。

image.png

これで正確な標高を示すようになりました。

isg-dem-3857.tif は兵庫県が提供している 1m メッシュ・データを元にして作成したものですので、精度は十分です。ただし、目が細かい分、カバーしている範囲は小さくなっていて、集落とその周辺だけしか対応できません。

なお、標高データ用 GeoTIFFCRSEPSG:3857 WGS 84 / Pseudo-Mercator でなければならないようで、EPSG:6673 JGD2011 / Japan Plane Rectangular CS V では正常に動作しませんでした。

7-2. 外部レイヤの透明度

次の図は、スタンドアロン環境の QWC2 の画面です。

image.png

「棚田」というレイヤの透明度を設定したつもりですが、無視されています。

QGIS Server から直に取得するレイヤでは透明度の設定が効くのですが、MapCache から取得する外部レイヤでは、スライドを動かしても何の効果もありません。

そして、次は qwc-services 環境でのビューワの画面です。

image.png

同じく MapCache から取得している外部レイヤなのですが、こちらでは透明度の設定が効いています。

これは嬉しいですね。

7-3. 地物検索

qwc-services 環境のビューワではメニューに「地物検索」がありませんが、qwc-docker\volumes\config-in\default\config.jsonFeatureSearch を追加することで、スタンドアロン環境と同様に「地物検索」のパネルを使用することが出来ます。

config.json
{
        ...
        "plugins": {
            "common": [
                ...
+               {
+                   "name": "FeatureSearch"
+               },
                ...
                {
                    "name": "TopBar",
                    "cfg": {
                        "menuItems": [
                            ...
+                           {
+                               "key": "FeatureSearch",
+                               "icon": "search"
+                           },
                            ...

image.png

And so, what's next?

何か、あっけない感じですけれど、qwc-services による Web GIS はこれで動くようになりました。

最初から qwc-services を利用したら良かったのに、とも思いますが、QGIS Server + QWC2 + MapCache で一から組み上げた経験があるからこそ、統合環境が簡単で便利に見えるという面もあるでしょう。

今のところ、この Web GIS は、スタンドアロンの QWC2 ビューワと同等の機能しか備えていません。

次回以降、qwc-services で拡張された機能について調べていきます。

最初は「ユーザの認証と権限」です。

おまけ - 運用中の実例

兵庫県の中山間地、棚田の里-岩座神の地図です。

今はまだ、一般に公開して良いデータしか表示していませんが、ゆくゆくは、農地や山林の管理に役立つデータも追加していきたいと考えています。例えば、農地については、地番・面積・所有者・耕作者・作付け状況などのデータが表示できれば良いなあ、と。しかし、そうなると、公開するユーザを限定しなければいけません。ですので、「ユーザの認証と権限」の機能は必須の要件となるわけです。

おいおいと内容を充実して、HINATA GIS に負けない Web GIS に育てていきたいと思っています。(無理無理)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?