プログラマーのメモ書き

伊勢在住のプログラマーが気になることを気ままにメモったブログです

openstreetmap-carto が用いるshapfileについて

OpenStreetMap のタイルサーバーのセットアップの際に、地図描画のスタイルとして openstreetmap-carto を利用します。

こちらの記事に書いたように、タイルサーバーを再セットアップした際に、 openstreetmap-carto が利用するシェープファイルデータのダウンロード先が変わってました。

どうして、いろいろと変更があったのかちょっと興味があったので、調べてみたことをメモっておきます。

利用するファイルの比較

セットアップ時点

最初にセットアップした際は、v4.6.0 に当たるコミット ( 2017/12/18 ac7d4fb )でした。

この時は、データソースとして

を用いていました。

2020/9/9 再セットアップ時点

再セットアップでは 2020/9/7 b10aef3 のコミットを用いており、ダウンロードするファイルは、 以下になっていました。

ダウンロードしているファイルの内容

それぞれのファイルの内容をサイトの説明とファイル名から推測すると

ファイル名 内容
simplified-land-polygons-complete-3857 大陸や土地のポリゴン, 低ズームレベル用の単純化版, 分割なし
land-polygons-split-3857 大陸や土地のポリゴン, 分割あり
simplified-water-polygons-split-3857 海のポリゴン, 低ズームレベル用の単純化版, 分割あり
water-polygons-split-3857 海のポリゴン, 分割あり
antarctica-icesheet-polygons-3857 南極のポリゴン
antarctica-icesheet-outlines-3857 南極のアウトライン
ne_110m_admin_0_boundary_lines_land 国境に関するデータ ?
world_boundaries-spherical ?

となっているようです。

背景描画方法の変更

その後、 2019/3/25 b5938d6 のコミットにて、描画方式が、

  • 海の背景上に大陸(土地部分)のポリゴンを描画

から

  • 土地の背景上に海のポリゴンを描画

に変更になっています。

その理由としては、 PR #3694

This will allow solving several issues related to mud flats, mangroves, wetlands and areas of parkland at the coast. It also makes it possible to use different colors for rivers and lakes, if desired. It also makes it easier to render maritime borders less prominently

とあります。意訳すると

干潟、マングローブ林、湿地、海岸の緑地などに関連する問題をいくつか解決しいます。また、川や湖に異なる色を使うことを可能にします。また、海岸線を目立たないように描画するのが簡単になります。

ということのようです。

ですが、残念ながらレンダリングの中身まで追いかけてないので、この説明がピンとこないですね(あと、議論全部が追えてないので、誤解があるかもしれませんがご容赦ください)。

ダウンロード先サーバーを切り替え

2019/3/31 080b8ea のコミットで、シェープファイルをダウンロードするサーバーを切り替えています。これは単に既存のサーバーの運用停止に伴うもののようです。

world-boundaries を不使用

さらに、2019/4/22 2bff971 のコミットで、world_boundaries-spherical.tgz を利用しなくなります(特に理由が見当たらないのでなぜ急に不要になったかは不明です)。

シェープファイルの内容をdbで管理

そのうえで、再セットアップの際にあったように、2019/4/27 6782400 のコミットで、シェープファイルの扱いが変わり、DB内のテーブルに格納するようになったみたいです。

シェープファイルセットアップ前のgisデータベースのテーブルとして、タイルサーバー再セットアップ時に調べた以前のテーブル構成を見てみると、

osm@map:~$ psql -d gis
psql (9.5.23)
Type "help" for help.

gis=> \d
               List of relations
 Schema |        Name        | Type  |  Owner   
--------+--------------------+-------+----------
 public | geography_columns  | view  | postgres
 public | geometry_columns   | view  | osm
 public | planet_osm_line    | table | osm
 public | planet_osm_nodes   | table | osm
 public | planet_osm_point   | table | osm
 public | planet_osm_polygon | table | osm
 public | planet_osm_rels    | table | osm
 public | planet_osm_roads   | table | osm
 public | planet_osm_ways    | table | osm
 public | raster_columns     | view  | postgres
 public | raster_overviews   | view  | postgres
 public | spatial_ref_sys    | table | osm
(12 rows)

gis=> 

ですが、シェープファイルセットアップ後は、

mor@map:/home/osm/src$ sudo -u postgres -i
[sudo] mor のパスワード: 
postgres@map:~$ 
postgres@map:~$ psql gis
psql (9.5.23)
Type "help" for help.

gis=# \d
                        List of relations
 Schema |                Name                 | Type  |  Owner   
--------+-------------------------------------+-------+----------
 public | external_data                       | table | osm
 public | geography_columns                   | view  | postgres
 public | geometry_columns                    | view  | osm
 public | icesheet_outlines                   | table | osm
 public | icesheet_polygons                   | table | osm
 public | ne_110m_admin_0_boundary_lines_land | table | osm
 public | planet_osm_line                     | table | osm
 public | planet_osm_nodes                    | table | osm
 public | planet_osm_point                    | table | osm
 public | planet_osm_polygon                  | table | osm
 public | planet_osm_rels                     | table | osm
 public | planet_osm_roads                    | table | osm
 public | planet_osm_ways                     | table | osm
 public | raster_columns                      | view  | postgres
 public | raster_overviews                    | view  | postgres
 public | simplified_water_polygons           | table | osm
 public | spatial_ref_sys                     | table | osm
 public | water_polygons                      | table | osm
(18 rows)

gis=# 

となりました。確かに、シェープファイル名に対応するテーブルが追加されているのがわかります。

このように変更した理由は特に明記されていませんが、コミット時のコメントを見ると、

  • 運用中でもデータの更新ができる
  • ダウンロードするデータの日付けを見てダウンロードする

といったことが書いてあるので、データ更新を容易にするための変更ではないかと推測しています。

雑感

地図データの描画なんて、安定していて、データの更新以外はそうそう変更があるように思ってなかったんですが、意外といろいろと変わっていくものなんですね。

海岸線は、オフラインマップの生成でもかかわるので、機会を見つけていろいろと調べようと思います。