PostGISからmbtilesを生成する

PostGISからmbtilesを生成する(vtで作業します)

  • watergis/postgis2mbtiles : このモジュールはPostGISからデータをGeoJSONで取り出しmbtilesを作成します。mapbox/tippecanoeを使用しているため、Windows環境ではmbtiles生成のためにはDockerを使います。しかし、マシンがMacOSUbuntuの場合は直接モジュールを使うことができます。watergis/postgis2mbtiles-dockerはDockerで実行するためのソースコードです。

まず、config.js上でそれぞれのレイヤに対してSQLを作成する必要があります。そうすることで、postgis2mbtilesツールがPostGISから必要なデータを取り出して、mbtilesファイルが生成されます。

レイヤに対する基本的な設定

次はPostGISからGeoJSONを取り出す典型的な例です。

{
    name: 'pipeline', //レイヤー名を指定してください。
    geojsonFileName: __dirname + '/pipeline.geojson', //一時的に使用するGeoJSONファイル名を使用してください。
    select: `
    SELECT row_to_json(featurecollection) AS json FROM (
      SELECT
        'FeatureCollection' AS type,
        array_to_json(array_agg(feature)) AS features
      FROM (
        SELECT
          'Feature' AS type,
          ST_AsGeoJSON(ST_MakeValid(x.geom))::json AS geometry,
          row_to_json((
            SELECT t FROM (
              SELECT
                14 as maxzoom,
                11 as minzoom
            ) AS t
          )) AS tippecanoe,
          row_to_json((
            SELECT p FROM (
              SELECT
                x.pipe_id as fid,
                x.material,
                x.pipe_size,
                x.pressure,
                x.construction_year,
                x.rehabilitation_year,
                x.input_date
            ) AS p
          )) AS properties
        FROM pipeline x
        WHERE NOT ST_IsEmpty(x.geom)
      ) AS feature
    ) AS featurecollection
    `
}

最小・最大ズームレベルを設定可能な特別なtippecanoe用の設定項目があります。

row_to_json((
  SELECT t FROM (
    SELECT
      14 as maxzoom,
      11 as minzoom
  ) AS t
)) AS tippecanoe,

もし座標系がEPSG:4326(WGS84)でない場合は、次のようなSQLで座標変換をしなければなりません。

ST_TRANSFORM(geom,4326)

ユースケース

自身のデータベース用のSQLを作ることは、非常に重要なステップです。しかし、場合によってはこれは困難な作業になるかもしれません。次の水道事業体での設定方法の事例などが参考になるかもしれません

  • Narok Water and Sewerage Services Co., Ltd, KENYA : config.js
  • Water and Sanitation Corporation, Ltd, RWANDA : config.js
  • Nakuru Water and Sanitation Services Co., Ltd, KENYA : config.js

このアプローチはSQL言語を使って直接PostGISからデータを取り出すので、ほとんど全ての水道事業体のGISデータベースに柔軟に対応することができます。

ベクトルタイルのデザインの例

ベクトルタイルのデザインをどうするかはGISデータベースの設計とあなたのやりたいことによって変わってきます。次のデザインの例はベクトルタイルを設計する際に参考になるかもしれません。