最適化されたマップ サービスでのライン エイリアシング

ArcMap および標準のマップ サービスで使用されるグラフィックス パイプラインは Microsoft の GDI(Graphics Device Interface)テクノロジに基づいています。このテクノロジの制約の 1 つは、グラフィックスを整数座標でしか表せないということです。通常、実世界のジオメトリは整数で表されることがないため、このグラフィックス パイプラインを使用した描画の際には座標の切り上げまたは切り捨てが行われます。このため、PDF のようなベクタ エクスポート形式で詳細に表示すると、ベクタ ラインが角張った表示になることがあります。

ベースマップ レイヤおよび最適化されたマップ サービスで使用されるグラフィックス パイプラインではジオメトリに含まれる非整数座標が使用可能で、サブピクセル精度でレンダリングできるため、これらのベクタ形式において高い精度を実現します。ただし、これらのフィーチャを PNG や BMP などのラスタ形式で描画するときには、ジオメトリは再度要求された解像度でピクセル単位にレンダリングされます。低い解像度において、道路二条線のようなマルチレイヤ ライン シンボルではエイリアシングが起きる可能性があります。

ArcMap および最適化されたマップ サービスでのライン エイリアシング
より精密なレンダリングによるエイリアシングの例(左: 最適化されたマップ サービス、右: ArcMap)

最適化されたマップ サービスではアンチエイリアスを適用し、上記の問題の効果を軽減することができます。ただし、アンチエイリアスが最適な解決法ではない場合もあります。たとえば、アンチエイリアスを使用すると最適化されたマップ サービスのパフォーマンスが低下する可能性があります。サービスの要求条件によっては、これは許容できない場合があります。また、ターゲットの形式が 8 ビットのパレットを使用している場合(PNG 8 や GIF 形式など)、継続的な色の変化のレンダリングに必要なディザリングにより、アンチエイリアスが十分な効果を発揮しない場合があります。また、アンチエイリアスはベースマップ レイヤの描画には使用できません。

エイリアスが起きている描画とアンチエイリアスが施された描画との比較
アンチエイリアスによりライン表示を大幅に改善することができますが、パフォーマンスは低下します。(左: アンチエイリアスなし、右: 最適なアンチエイリアス)

アンチエイリアスを使用せずに問題を軽減する方法として、この問題を起こす可能性があるマルチレイヤ ライン シンボルを検出する解析ツールが [準備] ウィンドウに用意されています。

この解析ツールを使用した 2 つの解決法があります。1 つ目の解決法はこのレイヤにフラグを付けて、変換時にライン サイズを自動的に調整する方法です。マップ ドキュメントが MSD(マップ サービス定義)ファイルに変換されるときに、このオプションが有効になっているレイヤのライン幅は常に 96dpi 以上でレンダリングされます。MXD のシンボルのサイズは同じままです。ほとんどのユーザにとっては、この解決法で十分です。修正されたラインの表示が期待どおりになっていることを [プレビュー] ウィンドウで確認します。ベースマップ レイヤでは自動調整が常に選択されているため、この解析ツールは表示されません。

修正前後でのライン エイリアシング
(左: 最適化されたマップ サービスでレンダリングされた高速道路シンボルの元のライン幅、右: 修正後)修正後のバージョンでは外縁ラインが破線で表示されなくなります。

もう 1 つの解決法は、ラインのサイズがより適切になるよう手動でマルチレイヤ ライン シンボルの構造を変更する方法です。この方法では、ターゲットの dpi に 96dpi 以外(72dpiなど)を使用した変換も可能になります。

特定の解像度(dpi)に対応したライン設計

指定された解像度に対応した適切なラインのサイズを決定するには、マルチレイヤ ライン シンボルの各シンボルのサイズを次の式に入力します。先に説明したように、ターゲット解像度の値は、シンボルを使用するのに必要な最小解像度を反映する必要があります。

幅(ピクセル単位) = (ライン幅(ポイント単位) * ターゲット解像度(dpi 単位)) / 72

幅(ピクセル単位)が 1.5 未満の場合、幅を変更する必要はありません。

幅(ピクセル単位)が 1.5 以上の場合、次の式で編集後の幅を決定します。

  1. 新しい幅(ポイント単位) = (幅(ピクセル単位) + 0.5)
  2. 次に、新しい幅(ポイント単位)をその値を超えない最も近い整数(自然数)値に丸めます。
  3. 最終的なライン幅を(丸めた新しい幅(ポイント単位) * 72) / ターゲット解像度に設定します。

たとえば、必要な解像度が 44dpi、ライン シンボルの幅が 2.60 の場合、次のように計算を実行します。

  1. 幅(ピクセル単位) = (2.60 * 44) / 72.0
  2. 幅(ピクセル単位)は 1.5888888 となり、1.5 より大きな値であるため、計算を続けます。
  3. 新しい幅(ポイント単位) = (1.588888 + 0.5) = 2.10
  4. 切捨てにより、新しい幅(ポイント単位) = 2.0 とします。
  5. 最終的なライン幅を(2.0 * 72) / 44 = 3.27pts に設定します。

もう 1 つの例として、必要な解像度が 120dpi、新しいライン シンボルの幅が 2.60 の場合、次のように計算を実行します。

  1. 幅(ピクセル単位) = (2.60 * 120) / 72
  2. 幅(ピクセル単位)は 4.33333 となり、1.5 より大きな値であるため、計算を続けます。
  3. 新しい幅(ポイント単位) = (4.33333 + 0.5) = 4.83
  4. 新しい幅(ポイント単位)を切捨てて、最も近い整数である 4.0 にします。
  5. 最終的なライン幅を(4.0 * 72) / 120 = 2.4pts に設定します。

関連項目


7/10/2012