2017年6月10日土曜日

OpenLayers4 Workshop - 2.2. Tiled sources

2.2.タイルソース
2.2.1 キャッシュタイル
デフォルトでは、タイルレイヤは、マップのビューポートを埋める以上になるように256×256(ピクセル)画像を要求します。地図のいろいろなところをパンし、拡大すると、画像の要求が、まだ訪れたことのない地域を埋めるために、さらに送られます。ブラウザは要求された画像をいくつかキャッシュしますが、たくさんの処理動作が、一般的に、動的に画像を描画するためにサーバに要求されます。
タイルレイヤが規則的な格子状の画像を要求しているため、サーバがこれらの画像の要求をキャッシュし、あなた(または他の誰か)が同じ地域を訪れた次の機会に、キャッシュされた結果を返すことができます。結果的に、すべての地域のパフォーマンスが向上することになります。

2.2.1.1 ol.source.XYZ
Web Map Service の仕様では、クライアントが要求できる内容に柔軟性を持たせることができます。 制約がなければ、実際にはキャッシングが困難または不可能になります。
反対に、サービスは、固定されたズームレベルでだけ、そして、規則的なグリッドだけ、タイルを提供できます。これらは、XYZ ソースを使ったタイルレイヤとして一般化することができます。 - XとYはグリッドの列および行を示し、Zはズームレベルを表すと考えることができます。

2.2.1.2 ol.source.OSM
OpenStreetMap(OSM)のプロジェクトは、世界中の自由に利用できる地図データを収集し、作成するための取り組みをしています。OSM は、キャッシュされたタイルセットとして、いくつかの異なるレンダリングのデータを提供します。これらのレンダリングは、基本的な XYZ グリッド配置に適合し、OpenLayers のマップで使用できます。ol.source.OSM レイヤソースは OpenStreetMap のタイルにアクセスします。

タスク
1 テキストエディタで、前のセクションの map.html ファイルを開き、以下のように、マップの初期化コードを変更します。
<script>
 var map = new ol.Map({
  target: 'map',
  layers: [
   new ol.layer.Tile({
    source: new ol.source.OSM()
   })
  ],
  view: new ol.View({
   center: ol.proj.transform([126.97, 37.56]),
   zoom: 9
  }),
  controls: ol.control.defaults({
   attributionOptions: {
    collapsible: false
   } 
  })
 });
</script>
2 同じドキュメントの <head> に、レイヤ属性のためのスタイル宣言をいくつか追加します。
<style>
 #map {
  width: 512px;
  height: 256px;
 }
 .ol-attribution a {
  color: black;
 }
</style>
3 変更内容を保存し、ブラウザでページを更新します。
:http://localhost:4000/map.html

OSM ソースを使用したタイルレイヤ。

2.2.2 詳しく見る
2.2.2.1 投影法
マップのビュー定義を確認します。
view: new ol.View({
 center: ol.proj.fromLonLat([126.97, 37.56]),
 zoom: 9
})
地理空間データは、すべての座標参照系になることができます。一つのデータセットは、度数で地理座標(緯度と経度)を使用し、もう一つはメートル単位のもので、限られた地域で使う投影法の座標を使用します。座標参照系の完全な説明は、このモジュールの範囲外ですが、基本的な概念を理解することが重要です。
OpenLayers は、データの座標系を知る必要があります。内部的には、これは ol.proj.Projection オブジェクトで表されますが、文字列も指定できます。
使用する OpenStreetMap タイルは、メルカトル図法です。このため、メルカトル座標を使用して、中心の初期値を設定する必要があります。地理座標で、関心のある場所の座標を見つけることは比較的容易なので、地理座標("EPSG:4326")をメルカトル座標("EPSG:3857")に換える ol.proj.fromLonLat メソッドを使用します。

2.2.2.2 その他の投影法
OpenLayers は、Geographic(EPSG:4326)と Web Mercator(EPSG:3857)座標参照系の変換機能を内蔵しています。これにより、追加の作業なしで、上記の ol.proj.fromLonLat 機能を使用できます。異なった座標のデータで作業したいときは、ol.proj.* 機能を使用する前に、付加情報を含める必要があります。
例えば、「EPSG:21781」座標参照系のデータで作業したいときは、ページに次の2つのスクリプトタグを含めます。
<script src="http://cdnjs.cloudflare.com/ajax/libs/proj4js/2.3.6/proj4.js" type="text/javascript"></script>
<script src="http://epsg.io/21781-1753.js" type="text/javascript"></script>
それから、アプリケーションコードに次のようにこの投影法を登録し、有効範囲を設定します。
// This creates a projection object for the EPSG:21781 projection
// and sets a "validity extent" in that projection object.
var projection = ol.proj.get('EPSG:21781');
projection.setExtent([485869.5728, 76443.1884, 837076.5648, 299941.7864]);
範囲情報は、EPSG コードを使用したときは、「http://epsg.io/」で見つけることができます。

2.2.2.3 レイヤの作成
layers: [
 new ol.layer.Tile({
  source: new ol.source.OSM()
 })
],
前と同じように、レイヤを作成し、マップの config オブジェクトのレイヤ配列に追加します。このとき、ソースのすべての初期オプションを受け入れます。

2.2.2.4 スタイル
.ol-attribution a {
 color: black;
}
マップコントロールの処理は、このモジュールの範囲外ですが、これらのスタイル宣言は、スニークプレビュー(訳注:試し画像?)を与えます。初期状態では、ol.control.Attribution コントロールは、すべてのマップに追加されます。これによりレイヤソースはマップビューポート内に属性情報を表示できます。上記の宣言は、マップのこの属性のスタイルを変更します(マップ右下の著作ラインに注意)。

2.2.2.5 Attribution Control 設定
初期設定で ol.control.Attribution は、押されたときに属性情報を実際に表示する i(information:情報)ボタンを追加します。OpenStreetMap 利用条件に従うため、そして、OpenStreetMap の属性情報を常に表示するために、ol.Map コンストラクタに渡されるオプションオブジェクトに次のものが使用されます。
controls: ol.control,defaults({
 attributionOptions: {
  collapsible: false
 }
})
これは、i ボタンを削除し、属性情報を常に表示させます。
公的に利用可能なキャッシュされたタイルセットを使ったレイヤを理解したら、所有権のあるラスタレイヤでの演習に移りましょう。(原文では、「proprietary raster layers」がリンクになっています。)

0 件のコメント: