はじめに (対象読者・この記事でわかること)

この記事は、地理情報システム(GIS)の基本的な知識があり、自前で地図タイルサーバーを構築・運用している方を対象にしています。特に、OpenStreetMapのタイルサーバーとしてmod_tileを利用している方で、独自の地理データを地図上に表示させたいと考えている方に最適です。

この記事を読むことで、mod_tileを利用した地図タイルサーバーにShapefile形式の地理データを追加し、Web地図上でカスタムレイヤーとして表示させる方法を習得できます。また、データ変換からタイル生成、サーバー設定までの一連の流れを理解し、実際の運用にすぐに適用できるようになります。

前提知識

この記事を読み進める上で、以下の知識があるとスムーズです。 - GISの基本的な知識(空間データの種類、座標系など) - Linuxコマンドの基本的な操作 - mod_tileとrenderdの基本的な構築方法 - Shapefileの基本的な構造

mod_tileとShapefile連携の概要と背景

mod_tileは、OpenStreetMapのタイルサーバーソフトウェアであり、高パフォーマンスな地図タイル配信を実現します。一方、ShapefileはEsriが開発した地理空間データ形式で、ベクトルデータ(点、線、ポリゴン)を格納するために広く利用されています。

多くのGISプロジェクトでは、既存のOpenStreetMapデータに独自の情報を重ねて表示したいケースがあります。例えば、自社の営業エリア、自治体の行政区域、災害危険区域などの情報を地図上で視覚化する必要があります。これを実現するには、mod_tileサーバーにShapefileを追加し、カスタムレイヤーとして表示させる必要があります。

この連携により、以下のようなメリットがあります: 1. 既存のインフラを活用して追加データを配信できる 2. タイル形式に変換することで表示パフォーマンスが向上する 3. Webブラウザで直接利用可能な形式になる 4. 複数のレイヤーを重ねて表示できる

Shapefileをmod_tileサーバーに追加する具体的な手順

ステップ1: 必要なツールのインストール

まず、Shapefileを扱うためのツールをインストールします。主に、GDAL/OGRという地理空間データ変換ツールキットを使用します。

Bash
# Ubuntu/Debianの場合 sudo apt update sudo apt install gdal-bin # CentOS/RHELの場合 sudo yum install gdal gdal-devel

GDALのバージョン確認:

Bash
gdalinfo --version

ステップ2: Shapefileの準備と確認

追加したいShapefileを準備します。ここでは例として「admin_areas.shp」というファイルを使用します。まず、Shapefileの情報を確認します。

Bash
# Shapefileの基本情報を確認 ogrinfo -al admin_areas.shp

出力例:

INFO: Open of `admin_areas.shp'
      using driver `ESRI Shapefile' successful.
Layer name: admin_areas
Geometry: Polygon
Feature Count: 10
SRS: EPSG:4326 (EPSG:4326)
...

ステップ3: 座標系の変換(必要な場合)

Shapefileの座標系がWebメルカトル(EPSG:3857)でない場合は変換が必要です。多くの場合、WGS84(EPSG:4326)からWebメルカトルへの変換が必要です。

Bash
# WGS84からWebメルカトルへの変換 ogr2ogr -t_srs EPSG:3857 admin_areas_3857.shp admin_areas.shp

ステップ4: MVT形式への変換

mod_tileで扱うためには、MVT(Mapbox Vector Tile)形式に変換する必要があります。ここではtippecanoeというツールを使用します。

Bash
# tippecanoeのインストール sudo apt install tippecanoe # MVT形式に変換 tippecanoe -o admin_areas.mvt admin_areas_3857.shp

ステップ5: タイルの生成

次に、MVTファイルからタイルを生成します。ここでもtippecanoeを使用します。

Bash
# タイルの生成(ズームレベル0-18まで) tippecanoe -o admin_tiles.mbtiles -z 0 -Z 18 admin_areas.mvt

ステップ6: mod_tileの設定ファイルの編集

mod_tileの設定ファイル(通常は/etc/renderd.conf)を編集して、新しいレイヤーを追加します。

Bash
# 設定ファイルを編集 sudo nano /etc/renderd.conf

設定ファイルに以下のセクションを追加します:

[admin_areas]
URI=/tiles/admin_areas/%(zoom)s/%(x)s/%(y)s
TYPE=mbtiles
PRIORITY=1

ステップ7: renderdサービスの再起動

設定を反映させるために、renderdサービスを再起動します。

Bash
sudo systemctl restart renderd

ステップ8: Apache/Nginxの設定

Webサーバー(ApacheまたはNginx)の設定を編集して、新しいタイルへのアクセスを許可します。

Apacheの場合(/etc/apache2/mods-available/tile.conf):

Apache
<IfModule mod_tile> LoadModule tile_module /usr/lib/apache2/modules/mod_tile.so <Location /tiles> Require all granted </Location> </IfModule>

Nginxの場合(/etc/nginx/sites-available/default):

Nginx
location /tiles { proxy_pass http://localhost; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }

Webサーバーを再起動します:

Bash
# Apacheの場合 sudo systemctl restart apache2 # Nginxの場合 sudo systemctl restart nginx

ステップ9: 地図へのレイヤー追加

最後に、フロントエンドの地図アプリケーション(LeafletやMapbox GL JSなど)に新しいレイヤーを追加します。

Leafletの場合の例:

Javascript
var adminLayer = L.tileLayer('http://{s}.yourdomain.com/tiles/admin_areas/{z}/{x}/{y}.pbf', { maxZoom: 18, minZoom: 0, attribution: '© Your Organization' }); map.addLayer(adminLayer);

ハマった点やエラー解決

問題1: タイルが表示されない - 原因: タイルへのアクセス権限の問題 - 解決策: Apache/Nginxの設定でタイルディレクトリへのアクセス許可を確認

問題2: タイルが正しく表示されない(座標がずれる) - 原因: 座標系の不一致 - 解決策: Shapefileの座標系をWebメルカトル(EPSG:3857)に変換しているか確認

問題3: タイル生成に時間がかかる - 原因: データ量が多いまたはズームレベルが広すぎる - 解決策: 必要なズームレベルに絞って生成する(例: -z 5 -Z 15

問題4: renderdサービスが起動しない - 原因: 設定ファイルの記述ミス - 解決策: renderdのログを確認(/var/log/syslog)して設定を修正

解決策

これらの問題を解決するための一般的なアプローチは以下の通りです:

  1. アクセス権限の確認 ```bash # タイルディレクトリの権限確認 ls -la /path/to/tiles/

# 必要であれば権限を変更 sudo chown -R www-data:www-data /path/to/tiles/ ```

  1. 座標系の再確認 ```bash # 座標系の確認 ogrinfo -al -so -geom=NO admin_areas.shp | grep "SRS"

# 必要であれば再変換 ogr2ogr -t_srs EPSG:3857 admin_areas_3857.shp admin_areas.shp ```

  1. タイル生成の最適化 ```bash # データ量を減らして生成 tippecanoe -o admin_tiles.mbtiles -z 5 -Z 15 -s 256 admin_areas_3857.shp

# 複数のファイルをマージして効率化 tippecanoe -o combined.mbtiles file1.mbtiles file2.mbtiles ```

  1. 設定ファイルのデバッグ ```bash # renderdの設定ファイルの構文チェック sudo -u renderd renderd -c /etc/renderd.conf -f

# ログの確認 tail -f /var/log/syslog | grep renderd ```

まとめ

本記事では、mod_tileを利用した地図タイルサーバーにShapefileを追加する方法について解説しました。

  • ShapefileをMVT形式に変換する手順
  • mod_tileとrenderdの設定方法
  • Webサーバーでのタイル配信設定
  • フロントエンドでのレイヤー追加方法

この記事を通して、独自の地理データを既存のmod_tileサーバーに追加して表示させる方法を習得できたはずです。これにより、OpenStreetMapのベースマップ上に独自の情報を重ねて表示する、より価値の高い地図アプリケーションを構築できるようになります。

今後は、大量のデータを効率的に扱うためのタイル生成最適化や、複数のレイヤーを動的に切り替えるインタラクティブな地図の実装についても記事にする予定です。

参考資料