2. 最初のステップ

2.1. Debian ベースのシステムへのインストール

ここでは (Ubuntuと派生ディストロを含む) Debian ベースのシステムにおいて最低限の動作をするようなインストール手順を短く簡単に紹介します。とはいえ、他の多くのディストロや OS も QGIS Server のためのパッケージを提供しています。

注釈

Ubuntu では、管理者権限を必要とするコマンドの前に sudo を付けることで、そのコマンドを一般ユーザーとして使用することができます。Debian では、sudo を使用せず、管理者 (root) として作業することができます。

要件や Debian ベースのシステムに QGIS Server をインストールするために必要な QGIS 公式レポジトリを追加する手順は QGIS のインストーラー ページに記載されています。少なくとも最新の LTR ( 長期リリース ) をインストールすることをおすすめします。

対象バージョンのレポジトリを設定し、QGIS Server をインストールできたなら、以下のファイルで正常にインストールされたことを確認できます。

/usr/lib/cgi-bin/qgis_mapserv.fcgi

下記のように出力されるなら、サーバは正常にインストールされたと言えます。

注釈

QGIS のバージョンによっては、qgis_mapserv.fcgi を実行した時の出力はいくらか異なることがあります。

QFSFileEngine::open: No file name specified
Warning 1: Unable to find driver ECW to unload from GDAL_SKIP environment variable.
Warning 1: Unable to find driver ECW to unload from GDAL_SKIP environment variable.
Warning 1: Unable to find driver JP2ECW to unload from GDAL_SKIP environment variable.
Warning 1: Unable to find driver ECW to unload from GDAL_SKIP environment variable.
Warning 1: Unable to find driver JP2ECW to unload from GDAL_SKIP environment variable.
Content-Length: 206
Content-Type: text/xml; charset=utf-8

<ServiceExceptionReport version="1.3.0" xmlns="https://www.opengis.net/ogc">
 <ServiceException code="Service configuration error">Service unknown or unsupported</ServiceException>
</ServiceExceptionReport>

注釈

下記の場合は QGIS がステータス400というコードを返しており、有効な HTTP セッションが存在しないためにリクエストが失敗したことを正しく認識していることが分かります。これはバグではなく、サーバが適切に機能していることを示すものです。

Application path not initialized
Application path not initialized
Warning 1: Unable to find driver ECW to unload from GDAL_SKIP environment variable.
Warning 1: Unable to find driver ECW to unload from GDAL_SKIP environment variable.
Warning 1: Unable to find driver JP2ECW to unload from GDAL_SKIP environment variable.
"Loading native module /usr/lib/qgis/server/libdummy.so"
"Loading native module /usr/lib/qgis/server/liblandingpage.so"
"Loading native module /usr/lib/qgis/server/libwcs.so"
"Loading native module /usr/lib/qgis/server/libwfs.so"
"Loading native module /usr/lib/qgis/server/libwfs3.so"
"Loading native module /usr/lib/qgis/server/libwms.so"
"Loading native module /usr/lib/qgis/server/libwmts.so"
QFSFileEngine::open: No file name specified
Content-Length: 102
Content-Type: application/json
Server:  QGIS FCGI server - QGIS version 3.22.6-Białowieża
Status:  400
[{"code":"Bad request error","description":"Requested URI does not match any registered API handler"}]

サンプルプロジェクトを追加してみましょう。自作することもできますが、下記のように トレーニング用のデモデータ を使用することもできます。

mkdir /home/qgis/projects/
cd /home/qgis/projects/
wget https://github.com/qgis/QGIS-Training-Data/archive/release_3.22.zip
unzip release_3.22.zip
mv QGIS-Training-Data-release_3.22/exercise_data/qgis-server-tutorial-data/world.qgs .
mv QGIS-Training-Data-release_3.22/exercise_data/qgis-server-tutorial-data/naturalearth.sqlite .

もちろん、お好きなGISソフトを使ってこのファイルを開き、設定や利用可能なレイヤを見ることもできます。

QGISサーバーを正しく配置するにはHTTPサーバーが必要です。推奨される選択肢は Apache または NGINX です。

2.1.1. Apache HTTP サーバー

注釈

以下では、qgis.demo をあなたのサーバーの名前または IP アドレスに置き換えてください。

  1. Apacheと mod_fcgid をインストールします:

    apt install apache2 libapache2-mod-fcgid
    
  2. QGIS Serverはデフォルトのウェブサイト上で実行することができますが、これ専用に以下のように 仮想ホスト を設定してみましょう。

    1. /etc/apache2/sites-available ディレクトリに、次の内容の qgis.demo.conf というファイルを作ります:

      <VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName qgis.demo
      
        DocumentRoot /var/www/html
      
        # Apache logs (different than QGIS Server log)
        ErrorLog ${APACHE_LOG_DIR}/qgis.demo.error.log
        CustomLog ${APACHE_LOG_DIR}/qgis.demo.access.log combined
      
        # Longer timeout for WPS... default = 40
        FcgidIOTimeout 120
      
        FcgidInitialEnv LC_ALL "en_US.UTF-8"
        FcgidInitialEnv PYTHONIOENCODING UTF-8
        FcgidInitialEnv LANG "en_US.UTF-8"
      
        # QGIS log
        FcgidInitialEnv QGIS_SERVER_LOG_STDERR 1
        FcgidInitialEnv QGIS_SERVER_LOG_LEVEL 0
      
        # default QGIS project
        SetEnv QGIS_PROJECT_FILE /home/qgis/projects/world.qgs
      
        # QGIS_AUTH_DB_DIR_PATH must lead to a directory writeable by the Server's FCGI process user
        FcgidInitialEnv QGIS_AUTH_DB_DIR_PATH "/home/qgis/qgisserverdb/"
        FcgidInitialEnv QGIS_AUTH_PASSWORD_FILE "/home/qgis/qgisserverdb/qgis-auth.db"
      
        # Set pg access via pg_service file
        SetEnv PGSERVICEFILE /home/qgis/.pg_service.conf
        FcgidInitialEnv PGPASSFILE "/home/qgis/.pgpass"
      
        # if qgis-server is installed from packages in debian based distros this is usually /usr/lib/cgi-bin/
        # run "locate qgis_mapserv.fcgi" if you don't know where qgis_mapserv.fcgi is
        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin/">
          AllowOverride None
          Options +ExecCGI -MultiViews -SymLinksIfOwnerMatch
          Require all granted
        </Directory>
      
        <IfModule mod_fcgid.c>
        FcgidMaxRequestLen 26214400
        FcgidConnectTimeout 60
        </IfModule>
      
      </VirtualHost>
      

      注釈

      上記の設定オプションのいくつかは、サーバの 環境変数pg_service ファイル のセクションで説明しています。

    2. ではQGIS Server のログと認証データベースを格納するディレクトリを作成しましょう:

      mkdir -p /var/log/qgis/
      chown www-data:www-data /var/log/qgis
      mkdir -p /home/qgis/qgisserverdb
      chown www-data:www-data /home/qgis/qgisserverdb
      

      注釈

      www-data はDebianベースのシステムではApacheのユーザーで、Apacheがこれらの場所やファイルにアクセスできる必要があります。chown www-data... コマンドはそれぞれのディレクトリとファイルの所有者を www-data に変更します。

  3. これで、まだ有効になっていなければ、仮想ホストと``fcgid`` mod を有効にすることができます:

    a2enmod fcgid
    a2ensite qgis.demo
    
  4. 新しい設定が反映されるようにApacheを再起動してください:

    systemctl restart apache2
    
  5. これでApacheは、http://qgis.demo へのリクエストに応答する必要があることがわかります。qgis.demo` が誰かわかるようにクライアントシステムをセットアップする必要もあります。そのためには、hosts ファイルに 127.0.0.1 qgis.demo を追加します。

    # Replace 127.0.0.1 with the IP of your server.
    sh -c "echo '127.0.0.1 qgis.demo' >> /etc/hosts"
    

重要

qgis.demo.conf/etc/hosts ファイルの両方が、セットアップが機能するように設定されている必要があることを忘れないでください。/etc/hosts ファイルにアクセスし、qgis.demo の名前をサーバーマシンがネットワーク上に持つIP(ローカルマシンからのみアクセスできるローカルIP 127.0.0.1 は指定しないでください)に指定することで、ネットワーク上の他のクライアント(Windowsやmacosマシンなど)からQGIS Serverへのアクセスをテストすることもできます。。*nix マシンでは hosts ファイルは /etc にあり、Windowsでは C:\Windows\System32\drivers\etc` ディレクトリの下にあります。Windowsではhostsファイルを開く前に管理者権限でテキストエディタを起動する必要があります。

これでQGIS Serverが http://qgis.demo で利用できます。確認するには、簡単には次をブラウザで入力します:

http://qgis.demo/cgi-bin/qgis_mapserv.fcgi?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetCapabilities

2.1.2. NGINX HTTP Server

注釈

以下では、qgis.demo をあなたのサーバーの名前または IP アドレスに置き換えてください。

NGINX を使用して QGIS Server を使用することもできます。Apache とは異なり、NGINX は FastCGI プロセスを自動的に起動しません。FastCGI プロセスは他の何かによって起動されます。

NGINXをインストールする:

apt install nginx
  • 最初の選択肢として、spawn-fcgi または fcgiwrap を使って QGIS Server プロセスを起動し、管理することができます。どちらも公式の Debian パッケージがあります。X サーバーが動作しておらず、例えば印刷が必要な場合には、 xvfb を使用することができます。

  • もう一つの選択肢は、今日ほとんどのLinuxディストリビューションが使用しているGNU/Linuxのinitシステムである Systemd に依存することです。この方法の利点の1つは、他のコンポーネントやプロセスを必要としないことです。これは、シンプルでありながら堅牢で、本番環境でのデプロイメントに効率的であることを意図しています。

NGINXの設定

前の設定で使った include fastcgi_params; は、 /etc/nginx/fastcgi_params からパラメータを追加するために重要です:

fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  REQUEST_SCHEME     $scheme;
fastcgi_param  HTTPS              $https if_not_empty;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

さらに、いくつかの qgis-server-envar を使用して QGIS Server を設定することができます。NGINXの設定ファイル /etc/nginx/nginx.conf では、以下のように fastcgi_param 命令を使ってこれらの変数を定義する必要があります:

location /qgisserver {
     gzip           off;
     include        fastcgi_params;
     fastcgi_param  QGIS_SERVER_LOG_STDERR  1;
     fastcgi_param  QGIS_SERVER_LOG_LEVEL   0;
     fastcgi_pass   unix:/var/run/qgisserver.socket;
 }

FastCGIラッパー

警告

fcgiwrap はすでにSystemdサービスにラップされているので、spawn-fcgi よりもセットアップが簡単です。しかし、spawn-fcgiを使用するよりもはるかに遅いソリューションになります。fcgiwrapでは、リクエストごとに新しいQGIS Serverプロセスが作成されるため、QGISプロジェクトファイルの読み込みや解析を含むQGIS Serverの初期化処理がリクエストごとに行われます。spawn-fcgiを使用すると、QGIS Serverプロセスはリクエストの間中存続するため、パフォーマンスが大幅に向上します。そのため、spawn-fcgiは実運用での使用を推奨します。

spawn-fcgi

spawn-fcgi を使いたい場合は:

  1. 最初のステップはパッケージをインストールすることです:

    apt install spawn-fcgi
    
  2. 次に以下のブロックをNGINXサーバー設定に導入します:

    location /qgisserver {
        gzip           off;
        include        fastcgi_params;
        fastcgi_pass   unix:/var/run/qgisserver.socket;
    }
    
  3. そしてNGINXを再起動して新しい設定を有効にします:

    systemctl restart nginx
    
  4. 最後に、spawn-fcgi用のデフォルトのサービスファイルがないので、ターミナルでQGIS Serverを手動で起動する必要があります:

    spawn-fcgi -s /var/run/qgisserver.socket \
                    -U www-data -G www-data -n \
                    /usr/lib/cgi-bin/qgis_mapserv.fcgi
    

これでQGIS Serverが http://qgis.demo/qgisserver から利用できます。

注釈

spawn-fcgiを使用する場合、サーバを実行する前に環境変数を直接定義することができます。例: export QGIS_SERVER_LOG_STDERR=1

もちろん、起動時や好きな時にQGIS Serverを起動するinitスクリプトを追加することもできます。例えば、systemd を使用して:

  1. この内容でファイル /etc/systemd/system/qgis-server.service を編集します:

    [Unit]
    Description=QGIS server
    After=network.target
    
    [Service]
    ;; set env var as needed
    ;Environment="LANG=en_EN.UTF-8"
    ;Environment="QGIS_SERVER_PARALLEL_RENDERING=1"
    ;Environment="QGIS_SERVER_MAX_THREADS=12"
    ;Environment="QGIS_SERVER_LOG_LEVEL=0"
    ;Environment="QGIS_SERVER_LOG_STDERR=1"
    ;; or use a file:
    ;EnvironmentFile=/etc/qgis-server/env
    
    ExecStart=spawn-fcgi -s /var/run/qgisserver.socket -U www-data -G www-data -n /usr/lib/cgi-bin/qgis_mapserv.fcgi
    
    [Install]
    WantedBy=multi-user.target
    
  2. 次にこのサービスを有効にして起動します:

    systemctl enable --now qgis-server
    

警告

spawn-fcgiは、上のコマンドでQGIS Serverプロセスをひとつだけ起動します。

fcgiwrap

fcgiwrap を使うのは spawn-fcgi を設定するよりとても簡単ですが、ずっと遅いです。

  1. まず、対応するパッケージをインストールする必要があります:

    apt install fcgiwrap
    
  2. 次に以下のブロックをNGINXサーバー設定に導入します:

    1 location /qgisserver {
    2     gzip           off;
    3     include        fastcgi_params;
    4     fastcgi_pass   unix:/var/run/fcgiwrap.socket;
    5     fastcgi_param  SCRIPT_FILENAME /usr/lib/cgi-bin/qgis_mapserv.fcgi;
    6 }
    
  3. 最後に NGINX と fcgiwrap を再起動し、新しい設定を反映させます:

    systemctl restart nginx
    systemctl restart fcgiwrap
    

これでQGIS Serverが http://qgis.demo/qgisserver から利用できます。

Systemd

QGIS Serverを完全に使うには、特に印刷のために、X Serverが動作している必要があります。すでにX Serverが動作している場合は、systemdサービスを使うことができます。

この方法はQGIS Server をデプロイするために 2 つの Systemd ユニットに依存しています: Socket ユニットService ユニット

  1. QGIS Server Socketユニット は、NGINXがQGIS Serverを起動して通信するために使用するファイルシステムソケットを定義して作成します。ソケットユニットは Accept=false で設定する必要があります。これは accept() システムコールの呼び出しがサービスユニットによって作成されたプロセスに委譲されることを意味します。ソケットユニットは /etc/systemd/system/qgis-server@.socket にあり、これは実際にはテンプレートです:

    [Unit]
    Description=QGIS Server Listen Socket (instance %i)
    
    [Socket]
    Accept=false
    ListenStream=/var/run/qgis-server-%i.sock
    SocketUser=www-data
    SocketGroup=www-data
    SocketMode=0600
    
    [Install]
    WantedBy=sockets.target
    
  2. ソケットを有効にして起動します:

    for i in 1 2 3 4; do systemctl enable --now qgis-server@$i.socket; done
    
  3. QGIS Server Serviceユニット はQGIS Serverプロセスを定義し、起動します。重要なのは、Serviceプロセスの標準入力がSocketユニットによって定義されたソケットに接続されていることです。これは /etc/systemd/system/qgis-server@.service にあるサービスユニットの設定で StandardInput=socket を使用して設定する必要があります:

    [Unit]
    Description=QGIS Server Service (instance %i)
    
    [Service]
    User=www-data
    Group=www-data
    StandardOutput=null
    StandardError=journal
    StandardInput=socket
    ExecStart=/usr/lib/cgi-bin/qgis_mapserv.fcgi
    EnvironmentFile=/etc/qgis-server/env
    
    [Install]
    WantedBy=multi-user.target
    

    注釈

    QGIS Server 環境変数 は別のファイル /etc/qgis-server/env で定義されます。以下のようになります:

    QGIS_PROJECT_FILE=/etc/qgis/myproject.qgs
    QGIS_SERVER_LOG_STDERR=1
    QGIS_SERVER_LOG_LEVEL=3
    
  4. ソケットサービスを開始します:

    for i in 1 2 3 4; do systemctl enable --now qgis-server@$i.service; done
    
  5. 最後に、NGINX HTTPサーバーの設定を紹介します:

    upstream qgis-server_backend {
       server unix:/var/run/qgis-server-1.sock;
       server unix:/var/run/qgis-server-2.sock;
       server unix:/var/run/qgis-server-3.sock;
       server unix:/var/run/qgis-server-4.sock;
    }
    
    server {
       
    
       location /qgis-server {
           gzip off;
           include fastcgi_params;
           fastcgi_pass qgis-server_backend;
       }
    }
    
  6. 新しい設定が反映されるようにNGINXを再起動します:

    systemctl restart nginx
    

チュートリアル を共有してくれたOslandiaに感謝します。

2.1.3. Xvfb

QGIS Serverを完全に使用するためには、特に印刷のためにX Serverが動作している必要があります。サーバー上では通常インストールしないことを推奨しますので、 xvfb を使って仮想 X 環境を構築してください。

サーバをグラフィック/X11環境で動作させている場合は、xvfbをインストールする必要はありません。詳細はhttps://www.itopen.it/qgis-server-setup-notes/ 。

  1. パッケージをインストールする:

    apt install xvfb
    
  2. この内容でサービスファイル /etc/systemd/system/xvfb.service を作ります:

    [Unit]
    Description=X Virtual Frame Buffer Service
    After=network.target
    
    [Service]
    ExecStart=/usr/bin/Xvfb :99 -screen 0 1024x768x24 -ac +extension GLX +render -noreset
    
    [Install]
    WantedBy=multi-user.target
    
  3. xvfb.service の状態を有効にし、開始し、チェックします:

    systemctl enable --now xvfb.service
    systemctl status xvfb.service
    
  4. その後、HTTPサーバーに応じて、DISPLAY パラメーターを設定するか、直接 xvfb-run を使います。

    • Apacheを使う:

      1. Fcgid 設定に追加します (Apache HTTP サーバー を参照):

        FcgidInitialEnv DISPLAY       ":99"
        
      2. 新しい設定が反映されるように Apache を再起動します:

        systemctl restart apache2
        
    • NGINXを使う

      • xvfb-run を使った spawn-fcgi を実行する:

        xvfb-run /usr/bin/spawn-fcgi -f /usr/lib/cgi-bin/qgis_mapserv.fcgi \
                                     -s /tmp/qgisserver.socket \
                                     -G www-data -U www-data -n
        
      • HTTPサーバー設定の DISPLAY 環境変数を使用します。

        fastcgi_param  DISPLAY       ":99";
        

2.2. Windowsへのインストール

QGIS Server は、OSGeo4W ネットワークインストーラー (https://qgis.org/en/site/forusers/download.html) の 64 ビット版を使用して Windows システムにインストールすることもできます。

簡単な手順は以下の通りです:

  1. OSGeo4Wインストーラーをダウンロードして実行する

  2. "Advanced Install"に従い、QGIS Desktop, QGIS Server apache, mod_fcgid パッケージをインストールします。

    ../../_images/qgis_server_windows2.png
  3. Apache は Windows ではサービスとして直接インストールされません。次が必要です:

    1. C:\OSGeo4W64\ フォルダー(デフォルトのインストールパスが使用されている場合)のルートにある OSGeo4W.bat ファイルを右クリックし、 管理者として実行 を選択します

    2. コンソールで、apache-install.bat を実行し、次が出力されます

      > apache-install.bat
      Installing the 'Apache OSGeo4W Web Server' service
      The 'Apache OSGeo4W Web Server' service is successfully installed.
      Testing httpd.conf....
      Errors reported here must be corrected before the service can be started.
      ...
      

      レポートにあるようにサービスは開始されています。しかし、カスタム設定がないため、サーバーの実行に失敗する可能性があります。

  4. 次の変更で C:\OSGeo4w64\apps\apache\conf\httpd.conf ファイルを編集します(他にも様々な組み合わせがあります):

    目的

    既存のconfig

    置換

    (オプション)IPやポートを使ってリッスンするアドレスをカスタマイズします。エントリーはいくつでも追加できます。

    Listen ${SRVPORT}
    
    Listen localhost:8080
    

    スクリプトファイルのある場所を示します

    ScriptAlias /cgi-bin/ "${SRVROOT}/cgi-bin/"
    
    ScriptAlias /cgi-bin/ "C:/OSGeo4W64/apps/qgis/bin/"
    

    スクリプトフォルダーに許可を与えます

    <Directory "${SRVROOT}/cgi-bin">
        AllowOverride None
        Options None
        Require all granted
    </Directory>
    
    <Directory "C:/OSGeo4W64/apps/qgis/bin">
        SetHandler cgi-script
        AllowOverride None
        Options ExecCGI
        Require all granted
    </Directory>
    

    スクリプトファイルに使うために拡張を有効にします。アンコメントして完成させます

    #AddHandler cgi-script .cgi
    
    AddHandler cgi-script .cgi .exe
    

    さらにOSGeo4Wカスタム設定変数を加えます

    # parse OSGeo4W apache conf files
    IncludeOptional "C:/OSGeo4W64/httpd.d/httpd_*.conf"
    
    # parse OSGeo4W apache conf files
    IncludeOptional "C:/OSGeo4W64/httpd.d/httpd_*.conf"
    SetEnv GDAL_DATA "C:/OSGeo4W64/share/gdal"
    SetEnv QGIS_AUTH_DB_DIR_PATH "C:/OSGeo4W64/apps/qgis/resources"
    
  5. Apacheウェブサーバーを再起動します

    > apache-restart.bat
    
  6. ブラウザウィンドウを開き、QGIS ServerへのGetCapabilitiesリクエストをテストします。localhost:8080 をリッスンするように設定したIPとポートに置き換えてください。

    http://localhost:8080/cgi-bin/qgis_mapserv.fcgi.exe?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetCapabilities
    

    機能が :file:`XML`ファイルで返されるはずです。これでサーバを使用する準備が整いました。

2.3. プロジェクトを供給する

これでQGIS Serverがインストールされ、稼働しているので、あとは使うだけです。

言うまでもありませんが、作業にはQGISプロジェクトが必要です。もちろん、連絡先情報を定義したり、CRSに正確な制限を加えたり、あるいはいくつかのレイヤを除外したりして、プロジェクトを完全にカスタマイズすることもできます。これについては プロジェクトを設定する で後述します。

ただしここでは、上で説明したように、既に設定され、ダウンロードされている /home/qgis/projects/world.qgs にある簡単なプロジェクトを使うことにします。

プロジェクトを開き、レイヤをざっと見てみると、4つのレイヤが利用できることが分かります:

  • airports

  • places

  • countries

  • countries_shapeburst

今のところ、完全なリクエストを理解する必要はありませんが、ウェブブラウザで次のように countries レイヤを取得することで、QGIS Serverのおかげで前のレイヤのいくつかを含むマップを取得することができます:

  • 上記の手順に従ってApache HTTP Serverをインストールした場合:

    http://qgis.demo/cgi-bin/qgis_mapserv.fcgi?
      MAP=/home/qgis/projects/world.qgs&
      LAYERS=countries&
      SERVICE=WMS&
      VERSION=1.3.0&
      REQUEST=GetMap&
      CRS=EPSG:4326&
      WIDTH=400&
      HEIGHT=200&
      BBOX=-90,-180,90,180
    
  • 上記の手順に従ってNGINX HTTPサーバーをインストールした場合:

    http://qgis.demo/qgisserver?
      MAP=/home/qgis/projects/world.qgs&
      LAYERS=countries&
      SERVICE=WMS&
      VERSION=1.3.0&
      REQUEST=GetMap&
      CRS=EPSG:4326&
      WIDTH=400&
      HEIGHT=200&
      BBOX=-90,-180,90,180
    

次の画像が表示されれば、QGIS Serverは正しく動作しています:

../../_images/server_basic_getmap.png

図 2.1 基本 GetMap リクエストに対するサーバーの応答

なお、MAP パラメータを与える代わりに、QGIS_PROJECT_FILE 環境変数を定義して、デフォルトでプロジェクトを使用することもできます (qgis-server-envar を参照)。

spawn-fcgi を使う例:

export QGIS_PROJECT_FILE=/home/qgis/projects/world.qgs
spawn-fcgi -f /usr/lib/bin/cgi-bin/qgis_mapserv.fcgi \
           -s /var/run/qgisserver.socket \
           -U www-data -G www-data -n

2.4. プロジェクトを設定する

新しい QGIS Server WMS、WFS、OAPIF、または WCS を提供するには、いくつかのデータを含む QGIS プロジェクトファイルを作成するか、現在のプロジェクトの 1 つを使用する必要があります。QGISのレイヤの色とスタイルを定義し、プロジェクトの CRS を定義します。次に、プロジェクト ► プロパティ... ダイアログの QGISサーバー メニューを開き、Service Capabilities タブに OWS に関する情報を入力します。

../../_images/ows_server_definition.png

図 2.2 QGISサーバーのWMS / WFS / WCSプロジェクトの定義

サービス機能が無効になっている場合は、最初に Service Capabilitiesを有効化 する必要があります。これはWMS、WFS、WCSのGetCapabilitiesレスポンスに表示されます。checkbox Service Capabilitiesを有効化 にチェックを入れない場合、QGIS Serverは cgi-bin フォルダにある wms_metadata.xml ファイルにある情報を使用します。

2.4.1. WMS機能

WMS capabilities タブでは、Advertise範囲 の下のフィールドに X と Y の最小値と最大値を入力して、WMS GetCapabilities 応答で広告される範囲を定義できます。

../../_images/ows_server_wms.png

図 2.3 WMSタブにある定義

現在のキャンバス領域を利用 をクリックすると、これらの値がQGIS マップキャンバスに現在表示されている範囲に設定されます。checkbox CRS制限 をオンにすると、QGIS Server がマップをレンダリングする際に提供する座標参照系 (CRS) を制限することができます。これにより、WMS GetCapabilities レスポンスのサイズが小さくなるため、提供する CRS を制限することをお勧めします。下の symbologyAdd ボタンを使用して、座標参照系セレクタからそのCRSを選択するか、使用中 をクリックしてQGISプロジェクトで使用されているCRSをリストに追加します。

プロジェクトで印刷レイアウトが定義されている場合、それらは GetProjectSettings レスポンスにリストされ、GetPrint リクエストで印刷レイアウトのいずれかをテンプレートとして使用して印刷を作成することができます。これはWMS 1.3.0仕様に対するQGIS固有の拡張です。WMSによって公開される印刷レイアウトを除外したい場合は、チェックボックス| レイアウトの除外 をチェックし、下の symbologyAdd ボタンをクリックします。次に、除外レイアウトリストに追加するために、 印刷レイアウトの選択 ダイアログから印刷レイアウトを選択します。

WMSからレイヤまたはレイヤーグループを除外したい場合は、checkbox レイヤの除外 をチェックし、下の symbologyAdd ボタンをクリックします。これにより 制限されたレイヤとグループを選択する ダイアログが開き、公開したくないレイヤとグループを選択することができます。複数のエントリを選択したい場合は Shift キーまたは Ctrl キーを使用してください。WMSのGetCapabilitiesレスポンスのサイズが小さくなり、クライアント側のロード時間が短縮されるため、不要なレイヤは公開しないことをお勧めします。

checkbox レイヤIDを名前に使う をチェックすると、 GetCapabilities レスポンスや GetMap LAYERS パラメータでレイヤを参照する際にレイヤ ID が使用されます。そうでない場合は、レイヤの名前、または定義されている場合は、短い名前 (ref:vectorservermenu を参照) が使用されます。

要求された GetFeatureInfo は、平文テキスト、XML、および GML で受け取ることができます。デフォルトは XML です。

必要であれば、checkbox 地物情報の応答にWKTジオメトリを加える をチェックします。これにより、各地物のバウンディングボックスが GetFeatureInfo レスポンスに含まれます。ref:`WITH_GEOMETRY ` パラメータも参照してください。

多くの Web クライアントはジオメトリの円弧を表示できないため、GetFeatureInfo レスポンスでクライアントに送信する前にジオメトリをセグメント化するオプションがあります。これにより、そのようなクライアントでも地物のジオメトリを表示することができます(例 地物のハイライト表示)。このオプションを有効にするには、 checkbox 地物情報ジオメトリをセグメント化 をチェックする必要があります。

また、GetFeatureInfoジオメトリ精度 オプションを使用して、GetFeatureInfo ジオメトリの精度を設定することもできます。これにより、完全な精度を必要としない場合に帯域幅を節約することができます。

WMS GetCapabilitiesレスポンスでQGIS Serverに特定のリクエストURLを広告させたい場合は、公開URL フィールドに対応するURLを入力します。

さらに、:guilabel:`Maximums for GetMap request`の下にあるそれぞれのフィールドに最大幅と最大高さを入力することで、GetMapリクエストによって返されるマップの最大サイズを制限することができます。

JPEGイメージの品質 の係数を変更することができます。品質係数は0から100の範囲でなければなりません。0を指定すると最大圧縮、100を指定すると非圧縮になります。

地図帳印刷する地物数の上限 フィールドを設定することで、1回のリクエストで印刷する地図帳地物の上限を変更することができます。

QGIS Serverをタイルモードで使用する場合(TILEDパラメータ を参照)、タイルのバッファ(ピクセル) を設定することができます。推奨値は、QGISプロジェクトで最大のシンボルまたは線幅の大きさです。

レイヤーの一つが 地図ヒントディスプレイ を使用している場合(つまり式を使ってテキストを表示するために)これはGetFeatureInfo出力内で表示されます。レイヤーは、その属性のいずれかの値マップを使用している場合は、この情報には、GetFeatureInfo出力に表示されます。

2.4.2. WMTS機能

WMTS機能 タブでは、WMTSとして公開したいレイヤを選択し、PNGまたはJPEGとして公開するかどうかを指定できます。

../../_images/ows_server_wmts.png

図 2.4 WMTSタブにある定義

WMTS機能 セクションの 公開URL フィールドにURLを入力すると、QGIS ServerはWMTS GetCapabilitiesレスポンスでこの特定のURLを広告します。

2.4.3. WFS/OAPIF機能

WFS/OAPIF機能 タブでは、WFSまたはOAPIFとして公開したいレイヤを選択し、更新、挿入、削除操作を許可するかどうかを指定することができます。

../../_images/ows_server_wfs.png

図 2.5 WFS/OAPIFタブにある定義

WFS機能 セクションの 公開URL フィールドに URL を入力すると、QGIS Server は WFS GetCapabilities レスポンスでこの特定の URL を広告します。

2.4.4. WCS機能

WCS機能 タブでは、WCSとして公開したいレイヤを選択することができます。

../../_images/ows_server_wcs.png

図 2.6 WCSタブにある定義

WCS機能 セクションの 公開URL フィールドにURLを入力すると、QGIS ServerはWCS GetCapabilitiesレスポンスでこの特定のURLを広告します。

2.4.5. OWSを微調整する

ベクタレイヤの場合、 レイヤ ► レイヤのプロパティ ダイアログの 属性 メニューで、各属性を公開するかどうかを定義することができます。デフォルトでは、すべての属性がWMSとWFSによって公開されます。特定の属性を公開したくない場合は、 WMS または WFS 列の対応するチェックボックスのチェックを外してください。

プロジェクトファイルにテキスト注記または SVG注記を追加することで、WMS が作成したマップに透かしを重ねることができます。注記の作成方法については 注記ツール セクションを参照してください。注記をWMSの出力に透かしとして表示するには、 注記テキスト ダイアログの 地図の位置固定 チェックボックスのチェックを外す必要があります。このチェックボックスには、注記ツールがアクティブな状態で注記をダブルクリックすることでアクセスできます。SVG注記の場合、( プロジェクト ► プロパティ... ダイアログの 一般情報 メニューで)プロジェクトを絶対パスで保存するように設定するか、SVG画像へのパスを有効な相対パスになるように手動で修正する必要があります。

2.5. サードパーティとの統合

QGIS Serverは、WMS、WFSなど の標準的なOGCウェブサービスを提供します。 したがって、さまざまなエンドユーザーツールで使用することができます。

2.5.1. QGIS Desktopとの統合

QGIS Desktopはマップデザイナーであり、QGIS Server はマップサーバーです。マップまたは QGIS プロジェクトは、OGC 標準を提供するために QGIS Server によって提供されます。これらのQGISプロジェクトは、ファイルでもデータベース内のエントリでもかまいません(QGIS Desktopの プロジェクト ► 保存 ► PostgreSQL を使用します)。

さらに、QGIS Serverで使用されているプロジェクトを更新するには、専用の更新ワークフローを確立する必要があります(プロジェクトファイルをサーバーの場所にコピーし、QGIS Serverを再起動するなど)。今のところ、自動化された処理(メッセージキューサービスを介したサーバーのリロード)は実装されていません。

2.5.2. MapProxyとの統合

MapProxy は、タイルキャッシュサーバーで、あらゆるWMS/WMTSマップサーバーを読み込んで提供することができるため、QGISサーバーのウェブサービスに直接接続することができ、エンドユーザーエクスペリエンスを向上させることができます。

2.5.3. QWC2との統合

QWC2 は QGIS Server 専用のレスポンシブ Web アプリケーションです。レイヤ選択、地物情報など、高度にカスタマイズされたマップビューアを構築するのに役立ちます。また、認証や印刷サービスのような多くのプラグインが利用可能で、完全なリストはこの リポジトリ にあります。