科学・技術
チェルナルスを地理参照し、実世界で訪れる(2021年)
Georeferencing Chernarus and visiting in real life (2021) (longcreek.me)
要約
この記事では、シェルスクリプトを使用してタイルサーバーからマップタイルを結合して高解像度のラスターマップを取得する方法を解説します。QGISで特徴とそれに対応する実世界の場所を手動で一致させることで、架空のマップを実在の場所に地理参照します。その後、GDALを使用したPythonスクリプトで、地理参照されたマップをGarmin互換のKMZファイルに変換し、携帯GPSデバイスで使用できるようにします。このプロセスは、チェコ共和国のÚstí nad Labem近郊の実際の地域に基づいた架空のマップ、チェルナルスに適用されます。
全文翻訳
この記事では、タイルサーバーからマップタイルを結合して高解像度のラスターマップを取得する方法を解説します。
QGISで特徴とそれに対応する実世界の場所を手動で一致させることで、架空のマップを実在の場所に地理参照します。
GDALを使用したPythonスクリプトで、地理参照されたマップをGarmin互換のKMZファイルに変換し、携帯GPSデバイスで使用できるようにします。
これは、チェルナルスという架空のマップに適用されます。チェルナルスはチェコ共和国のÚstí nad Labem近郊の実際の地域に基づいています。
最終的な製品は、その地域を訪れる際にGPSハンドヘルドに搭載できる、地理参照されたGarmin互換のKMZファイルです。
下のマップは、チェルナルス(左)と実際の地域(右)を重ね合わせたものです。
マップを移動させてスライダーをドラッグして比較できます。
フルスクリーンバージョンのマップはこちらをクリックしてください。
背景
チェルナルスは、ゲームArma IIで導入された架空の国であり、ゲームに登場する約15x15 kmの広大な地形の名前です。
それはまた、ゲームを「ミリタリーシミュレーター」からゾンビサバイバルゲームに改造したDayZ modで使用された主な場所でもあり、後にスタンドアロンゲームに拡張されて、元の地形(Chernarus+として知られる)に新しい詳細と町が追加されました。
チェルナルスのマップは、チェコ共和国北部ボヘミアのÚstí nad LabemとDěčínの間にある地域に密接に基づいており、多くの実際の建物がゲームにも登場するため、実際の場所と非常によく似ています。
コミュニティの中には、Googleストリートビューや実際の訪問からのゲームと実際の場所を比較する写真を時折投稿し、初めて訪れたにもかかわらず、その場所がどれほど馴染み深く感じられるかに言及する人もいました。
マップは、地理参照して実際の場所に重ね合わせることもかなり正確に行えます。
数年前、私はその地域にいたとき、マップをGPSハンドヘルドに載せて、ハイキング中に参考として使用することにしました。
それを機能させるには多少の努力と学習が必要でした。この記事では、私がそれをどのように行ったかを説明します。
同じプロセスは、他の架空のマップ、歴史的なマップ、またはコピーを持っている珍しいマップなど、実際の場所と十分に似ている任意のマップに使用できます。
タイルサーバーから高解像度マップをダウンロードして結合する
チェルナルスの高解像度マップを取得するために、タイルサーバーからタイルをダウンロードし、それらを1つの大きなマップに結合します。
タイルサーバーは、ウェブ用のマップを提供する一般的な方法です。大きなマップは多数の小さなタイルとしてレンダリングされるため、フルマップをロードする必要はありません。
このプロジェクトでは、iZurvive Chernarusマップをソースとして使用しました。
タイルサーバーのアドレスは https://maps.izurvive.com/maps/CH-Mod/1.7.9/tiles/${z}/${x}/${y}.png です。
この形式では、${z}はズームレベル、${x}と${y}はxおよびyの整数タイル座標、または単にタイル番号です。
したがって、ズームレベルz=6(サーバーの最高レベル)では、x=4、y=3のタイルは https://maps.izurvive.com/maps/CH-Mod/1.7.9/tiles/6/4/3.png にあり、このようになります。
マップ全体はこのように分割されており、目標はチェルナルスマップのすべてのタイルをダウンロードして結合することです。
すべてのタイルをダウンロードするために、シェルスクリプト(GIS Stackexchangeのこの質問から変更)を使用しました。
まず、タイルをダウンロードします。
# マップの範囲
X1=0
X2=50
Y1=0
Y2=42
# ズームレベル
Z=6
# タイルを反復処理してダウンロードする
TILE_URL = https://maps.izurvive.com/maps/CH-Mod/1.7.9/tiles/${Z}/${x}/${y}.png
for x in `seq $X1 $X2`; do
for y in `seq $Y1 $Y2`; do
echo "Getting ${x},${y}"
curl -s $TILE_URL -o ${Z}_${y}_${x}.png &
done
wait
done
echo "Rename .png to .jpg as files are wrongly named"
for i in ./${Z}_*.png ;
do
mv "$i" "${i/.png/.jpg}";
done
画像は実際にはJPEGファイルですが、拡張子は.pngです。そのため、.jpg拡張子に変更されます。
画像を結合するために、Imagemagickのmontageを使用します。
まず、x座標を反復処理し、各xに対して、Y1からY2までの関連タイルをすべて垂直に積み重ねて、多くの縦長の画像を作成します。
for ((x=0; x<=$X2; x++)); do
echo "Stitching x=${x}"
montage -mode concatenate -tile "1x" $(ls ${Z}_*_${x}.jpg | sort -Vr) out_z${Z}_x${x}.jpg
done
最後に、これらの画像をすべて水平に積み重ねます。
echo "Stitching Everything together"
montage -mode concatenate -tile "x1" $(ls out_z${Z}_*.jpg | sort -V) full_map.jpg
すべてがうまくいけば、高解像度のチェルナルスマップが手に入りました!
チェルナルスを実世界に地理参照する
次のステップは、ゲームマップ上のいくつかの点を実際のマップ上の同じ点と参照することで、チェルナルスマップを実世界のものに重ね合わせることです。
これらはGround Control Ppoints (GCP)として知られています。
これを行うために、GIS(地理情報システム)を扱うための無料のオープンソースアプリケーションであるQGISと、組み込みのGeoreferencerツールを使用します。
詳細については、QGISのGeoreferencingに関するドキュメントを参照してください。
QGISに他のタイルマップを追加する
QGISをインストールしたばかりの場合、さらにマップソースを追加したい場合があります。デフォルトでは標準のOpenStreetMapタイルしか提供されないためです。
左側のパネルで、「XYZ Tiles」を右クリックし、「新規接続」を選択します。
次のダイアログでソースを追加できます。
私は、 https://tile.opentopomap.org/{z}/{x}/{y}.png のトポグラフィックマップ用のOpenTopoMapと、 http://ecn.t3.tiles.virtualearth.net/tiles/a{q}.jpeg?g=1 の衛星ビュー用のBing Aerialを使用するのが好きです。
より多くのオープンタイルサーバーはここで見つけることができます。
これで、QGISで新しいプロジェクトを開始し、レイヤーとしてプロジェクトに追加したいタイルマップをダブルクリックするだけです。
参照としてWebマップを使用するため、プロジェクトの座標参照システム(CRS)をWebメルカトル投影またはEPSG:3857に設定して、正しくレンダリングされるようにします。
QGISは自動的にプロジェクトのCRSを最初に追加されたレイヤーと同じに設定しますが、念のため、OpenTopoMapレイヤーを右クリックし、「レイヤーCRS」->「レイヤーからプロジェクトCRSを設定」を選択できます。
これにより、プロジェクトのCRSがEPSG 3857 - WGS 84 / Pseudo-Mercatorに設定されるはずです。
注:後でチェルナルスマップを地理参照後に変換する場合、Garminデバイスで使用して正しく表示するには、EPSG:4326に変換する必要があります。
次のステップの準備として、Ústí nad Labem(チェコ共和国北西部、プラハの北)にズームインします。
地理参照ポイント
チェルナルスマップをQGISに読み込むには、まずそれをPNG3に変換します。たとえば、Imagemagickのconvertを使用します。
または、お気に入りの画像エディタに読み込んでPNGとして保存します。
convert full_map.jpg chernarus.png
これで、QGISでGeoreferencerを開き、Raster -> Georeferencer LoadでChernausマップを読み込みます。すると、このようになります。
ここからが楽しい部分です!
実世界のマップで認識できるチェルナルスマップ上の点を見つける必要があります。
「ポイントの追加」(またはCtrl + A)を押してポイントを追加し、実世界のマップで認識できるチェルナルスマップ上のどこかをクリックします。
マップ座標を入力するように求められます。
「マップキャンバスから」を押すと、対応するポイントを実世界のマップ上でクリックでき、座標が入力されます。
これは、例えば、Stary Sobor(Lipová)のT字路かもしれません。
または、Topolkaダム(Povrlyのすぐ北)の道路の合流点かもしれません。
少なくとも4つのポイント、できればそれ以上になるまで続けます。
私は良いフィットのために10〜15ポイントを使用し、マップの端の近くにもポイントを配置するようにしました。
次にTransform Settings(黄色の歯車アイコン)を開き、地理参照変換に使用するパラメータを設定します。
いくつかの実験の後、最終変換には「Polynomial 2」の変換タイプと「Cubic」のリサンプリング方法を選択しましたが、何が最適か自由に試してみてください。
最初に「Nearest Neighbour」リサンプリングを使用することをお勧めします。これは最も高速なので、調整をより簡単に行うことができます。
Garminデバイスで使用したい場合は、「Target SRS」をEPSG:4326 - WGS 84に設定してください。これは、これらのデバイス(および一般的にGPS)で使用される標準のマップ投影法です。ただし、4326で作業する場合は、