コンテンツにスキップ

マップタイルの生成

QCADには、Leafletなどのオンラインマップ表示で使うマップタイルを作成する2つのコマンドラインツールが付属しています。Leafletは、ブラウザでインタラクティブなマップを扱うためのJavaScriptライブラリです。

オンラインマップの最も単純な用途は、ウェブサイトの訪問者に、図面のインタラクティブでズーム可能なビューを提供することです。

以下は、任意の図面ファイルのマップタイルを生成する例です。

dwg2maptiles -z 0-6 -c -b white -hq-postfix=@2x -a -o path/to/output/directory drawing.dxf

-z スイッチは生成するズームレベルを指定します。ここではズームレベル0からズームレベル6までです。これは、レベル0(自動ズームでの図面全体)から始めて、ユーザーが限界に達するまで6回ズームインできることを意味します。ユーザーがズームインするたびに、図面は係数2で拡大されるため、6段階のズームレベルでは、ユーザーは係数2^6(=64)でズームインできます。ズームレベルを多く生成するほど、より多くの時間とディスク容量が必要になります。追加のズームレベルはそれぞれ通常、生成に前のレベルの4倍の時間とディスク容量を必要とします。

タイルは、指定された出力ディレクトリ(-o)に、マップタイルの標準的なディレクトリ構造とファイル名(z/x/y.png)で生成されます。

上記の例では、図面を白い背景(-b white)にレンダリングしたいとしています。すべての線が見えるように、白い線は黒に補正する必要があります(-c)。

-hq-postfix=@2x 引数は、標準解像度の256x256pxのタイルとともに、高品質(hq、高解像度、Retina)の512x512pxのタイルを生成するようdwg2maptilesに指示します。

品質をさらに高めるために、アンチエイリアシング用の -a スイッチも使用します。

Leaflet を使ったオンラインの例を見る

ジオリファレンス付きマップタイルの生成

Section titled “ジオリファレンス付きマップタイルの生成”

dwg2maptilesは、世界地図の正確なオーバーレイを生成するためにも使用できます。そのためには、通常、図面をローカル座標系から、オンラインマップで一般的に使われるWebメルカトル座標に変換する必要があります。

QCAD Professionalには、図面をある座標参照系(CRS)から別のものに変換する、別のコマンドラインツールdwgmapconvertが付属しています。

dwgmapconvertは通常、指定された図面ファイル内のすべての座標を、既知のローカル座標系からEPSG:3857(「Webメルカトル」とも呼ばれます)座標系に変換するために使用されます。これは、GoogleマップやMapboxなど、ほとんどのオンラインマップで使われている座標系です。ジオリファレンス付きマップタイルを生成するためにdwg2maptilesの入力として図面を使用するには、図面がEPSG:3857座標系である必要があります。

EPSG:3857座標系では、ズームレベル0で世界地図全体が20037508.3427892mの正方形に収まります。図面がこの座標系に変換されると、図面がその世界の正方形に収まり、正しく投影された世界座標に配置されるように変換されます。

たとえば、図面がEPSG:2056(LV95、スイスのローカル座標系とも呼ばれます)で作成された場合、次のようにdwgmapconvertでEPSG:3857に変換できます。

dwgmapconvert -segment-length=0.5 -crs-in=EPSG:2056 -crs-out=EPSG:3857 -f -o drawing_epsg3857.dxf drawing_epsg2056.dxf

地図投影は通常、非線形であるため、曲線や長い線は小さな線分に分割する必要があり、それらを非線形な方法で投影できます。-segment-length スイッチが指定されると、dwgmapconvertは指定されたセグメント長を使って、このセグメント化を自動的に行います。セグメント長は元の図面の図面単位(ここではメートル)で指定します。

-crs-in は入力座標系(ここではEPSG:2056)を指定するために使用します。

-crs-out は出力座標系を指定するために使用します。出力を後でdwg2maptilesで使う場合、これはEPSG:3857である必要があります。

dwgmapconvertは、入力としてLV95、出力としてWebメルカトルのサポートを備えています。

その他の座標系は、今後のリリースで追加されるか、ユーザーが追加できます。

新しい座標系のサポートを追加するには、新しい座標系の座標をWGS84(経度/緯度、GPS座標のようなもの)に変換する2つの式を用意する必要があります。

新しい座標系は、使用するQCADインストールの「scripts」フォルダにあるCRS.jsonというJSON設定ファイルに追加できます。以下は、座標系LV95を設定するCRS.jsonファイルの例です。LV95をdwgmapconvertツールの入力として使えるようにするには、x座標とy座標の変換式を含む「toWgs84」セクションを用意する必要があります。ここでは、補助変数x_とy_も2つ使用しています。これらは両方の式でアクセスできるように、x式で初期化する必要があります。

他の座標系からLV95への変換を可能にするために、「fromWgs84」セクションを用意することもできます。どちらのセクションも、サポートしたい変換方向に応じて任意です。

{
"CRS" : [
{
"id" : "EPSG:2056 CH1903+ / LV95",
"toWgs84" : {
"x": "x_ = (y-1200000)/1000000; y_ = (x-2600000)/1000000; (2.6779094 + 4.728982*y_ + 0.791484*y_*x_ + 0.1306*y_*x_*x_ - 0.0436*y_*y_*y_) * 100 / 3",
"y": "(16.9023892 + 3.238272*x_ - 0.270978*y_*y_ - 0.002528*x_*x_ - 0.0447*y_*y_*x_ - 0.0140*x_*x_*x_) * 100 / 36"
},
"aliases" : [ "LV95", "Swiss" ]
}
]
}

図面をEPSG:3857座標に変換したら、dwg2maptilesを使ってLeafletのオーバーレイレイヤ用のタイルを生成できます。

dwg2maptiles -web-mercator -skip-empty -hq-postfix=@2x -z 22 -b transparent -o path/to/output/directory drawing_epsg3857.dxf

dwg2maptilesに、自動ズームを実行せず、ファイルに存在する正確なEPSG:3857座標でマップオーバーレイを生成するよう伝えるために、-web-mercator スイッチを渡す必要がある点に注意してください。

-skip-empty は、図面のどの部分も含まないタイルを生成しないようdwg2maptilesに指示します。このスイッチがないと、ズームレベルごとに2^zoomLevel個のタイルが生成されます。ズームレベル22ではそれは4’194’304個のタイルになります。オーバーレイ図面は世界地図のごく一部しかカバーしていない可能性が非常に高いため、オーバーレイマップを作成するときは、このスイッチを常に使用すべきです。

-b transparent は背景を透明に設定し、マップを既存の世界地図(GoogleマップやMapboxなど)のオーバーレイとして使えるようにします。黒い線または白い線が表示される色を制御するために、背景をそれぞれ黒透明または白透明に設定できます。-b "#00ffffff"(白透明の背景、黒い線)または -b "#00000000"(黒透明の背景、白い線)です。この場合、自動的な色補正を強制するために、-c スイッチも渡すようにしてください。

引数 -hq-postfix=@2x を使うと、通常の256pxのタイルに加えて高解像度のタイル(512px)を生成できます。値「@2x」は推奨されており、Leafletを含め高解像度タイルに広く使われています。このスイッチを使うと、低解像度タイル「N.png」ごとに高解像度タイル「[email protected]」が作成されます。

複数プロセス(および複数CPUコア)の使用

Section titled “複数プロセス(および複数CPUコア)の使用”

マップタイルの生成は、ズームレベル、図面の複雑さ、その他の設定に応じて、CPUを集中的に使うタスクになることがあります。

マップタイルをより速く生成するには、利用可能な複数のCPUコアにジョブを分割できます。この機能のために、dwg2maptilesは必要なタイルの一部のみを生成する -s スイッチを備えています。-s スイッチは、カンマ区切りの2つのパラメータ、すなわち生成するスライスと使用するスライスの総数を期待します。たとえば -s 1,4 は、全4スライスのうち最初のスライスを生成します。上記の例のすべてのタイルを4つのCPUコアを使って生成するには、次のように実行できます。

dwg2maptiles -web-mercator -skip-empty -hq-postfix=@2x -z 22 -s 1,4 -b transparent -o path/to/output/directory drawing_epsg3857.dxf &
dwg2maptiles -web-mercator -skip-empty -hq-postfix=@2x -z 22 -s 2,4 -b transparent -o path/to/output/directory drawing_epsg3857.dxf &
dwg2maptiles -web-mercator -skip-empty -hq-postfix=@2x -z 22 -s 3,4 -b transparent -o path/to/output/directory drawing_epsg3857.dxf &
dwg2maptiles -web-mercator -skip-empty -hq-postfix=@2x -z 22 -s 4,4 -b transparent -o path/to/output/directory drawing_epsg3857.dxf &
wait

もちろん、ズームレベルごとにタスクを分割したり、より高いズームレベルのみにスライスを使い、より低い(コストの低い)ズームレベルすべてには単一のプロセスを使ったりすることもできます。

あるインタラクティブな例では、スイスのチューリッヒ州の地図に2つのオーバーレイレイヤ、すなわち保護林地域と野生生物の回廊を提供しています。元のデータはEPSG:2056(LV95)座標で提供され、dwgmapconvertを使ってEPSG:3857に変換されました。

Leaflet を使ったオンラインの例を見る