2017年5月16日火曜日

OpenLayers4 Tutorials - 6 Raster Reprojection

Raster Reprojection
(http://openlayers.org/en/latest/doc/tutorials/raster-reprojection.html)
ラスターの再投影

OpenLayers は、サーバから配信されるよりも、異なる座標系で WMS、WMTS、静的なイメージ、その他の多くのソースからラスタデータを表示する機能があります。イメージのマップ投影法の変換は、web ブラウザーで直接行われます。座標系がサポートされている Proj4js の view が可能で、以前は互換性のないレイヤが、現在、結合とオーバーレイすることができます。


使い方

API の使用方法は非常に簡単です。ol.View で適切な投影法 (EPSG コードを使用) を指定するだけです。
var map = new ol.Map({
 target: 'map',
 view: new ol.View({
  projection: 'EPSG:3857', //HERE IS THE VIEW PROJECTION
  center: [0, 0],
  zoom: 2
 }),
 layers: [
  new ol.layer.Tile({
   source: new ol.source.TileWMS({
    projection: 'EPSG:4326', //HERE IS THE DATA SOURCE PROJECTION
    url: 'http://demo.boundlessgeo.com/geoserver/wms',
    params: {
     'LAYERS': 'ne:NE1_HR_LC_SR_W_DR'
    }
   })
  })
 ]
});

(ol.source.TileImage または ol.source.Image に基づく) ソースは、現在の ol.View の投影法と別の投影法である場合、再投影はフードの下で自動的に行われます。


OpenLayers サイトの Examples にある例
Raster reprojection demo
OpenStreetMap to WGS84 reprojection
Reprojection with EPSG.io database search
Image reprojection


カスタム投影法

カスタム投影法を使用する最も簡単な方法は、Proj4js ライブラリをプロジェクトに追加し、それから、proj4 定義文字列を使用して投影法を定義することです。次の例は、British National Grid の定義を示しています。

<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.3.14/proj4.js"></script>

proj4.defs('EPSG:27700', '+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 ' +
 '+x_0=400000 +y_0=-100000 +ellps=airy ' +
 '+towgs84=446.448,-125.157,542.06,0.15,0.247,0.842,-20.489 ' +
 '+units=m +no_defs');
var proj27700 = ol.proj.get('EPSG:27700');
proj27700.setExtent([0, 0, 700000, 1300000]);


view(ビュー)投影法の変更

マップを表示するために使用される投影法を切り替えるために、ol.Map 上の選択される投影法を使用して、new ol.View を設定しなければなりません。
map.setView(new ol.View({
 projection: 'EPSG:27700',
 center: [400000, 650000],
 zoom: 4
}));

TileGrid と範囲

投影法が必要な場合、 (ターゲット投影法の)新しいタイルは、「内部で」元のソースタイルから作成されます。再投影されたタイルの TileGrid は、デフォルトでは ol.tilegrid.getForProjection(projection) を使用して内部的に構築されています。投影は、これが正常に動作するために定義される(上記参照)範囲が必要です。

また、カスタムターゲット TileGrid は、手動で構成され、ol.source.TileImage#setTileGridForProjection (projection, tilegrid) を使用してソースインスタンスに設定されます。この TileGrid は、デフォルトのものを作成する代わりに指定された投影法で再投影するとき、使用されます。特定のケースで、これは(タイルサイズを調整することによる)パフォーマンスや(解像度を指定することによる)画質を最適化するために使用できます。


動作の仕方

再投影プロセはス三角形に基づいています--ターゲットラスタは、ol.proj 機能を使用する頂点変換を使用して、三角形の限られた数に分かれています。(proj4js は、カスタム変換の定義に通常利用されます。)三角形の内側のピクセルの再投影は、 (canvas 2d コンテキストによるハードウェア加速のレンダリングで) アフィン(affine)変換で近似されます。

このように、実際の変換の計算の数が比較的少ない(canvas 2d をサポートする)ほぼすべてのハードウェアの proj4js (またはカスタム変換関数) からの投影の広い範囲をサポートできます。

再投影の精度は、そのとき、三角形の数によって制限されます。

再投影プロセスは、ソース(png または gif)から供給されたラスタデータの透明度を維持し、再投影によって生成されたギャップとデータなしのピクセルは自動的に透明になります。


動的な三角形分割

上記の上のイメージは、元のイメージ(左;EPSG:27700)が限られた数の三角形だけで変換変換される(右のEPSG:3857)とき、顕著なエラー(特にエッジ上)を示します。エラーは、使用される三角形の数を増やすことで最小化できます。

いくつかの変換は、より詳細な三角分割ネットワークを必要とするので、動的な三角形分割プロセスは再投影誤差を自動的に測定し、特定のエラーしきい値に合わせて繰り返し細分化します。

デバッグのため、再投影エッジのレンダリングは、ol.source.TileImage#setRenderReprojectionEdges(true) で有効にできます。


高度(Advanced)

再投影の無効

OpenLayers のカスタムビルドを作成し、かつ、再投影コードは必要としない場合、ol.ENABLE_RASTER_REPROJECTION を false に設定し、再投影のサポートを完全に無効にすることによって、ビルドのサイズを減らすことができます。これを行う方法のカスタムビルド(Custom builds)チュートリアルを参照してください。


三角形分割精度のしきい値

ピクセル単位でデフォルトの三角形分割エラーしきい値は、ol.DEFAULT_RASTER_REPROJECTION_ERROR_THRESHOLD (0.5 ピクセル) で与えられます。異なるしきい値が異なるソースに定義される必要がある場合は、タイルイメージソースを構築するとき reprojectionErrorThreshold オプションが渡されます。


範囲による再投影されるマップの可視性の制限

再投影アルゴリズムは、(view の投影法からデータの投影法への) 逆変換を使用します。特定の座標系では、これはマップのソースデータの「二重出現」をもたらす可能性があります。たとえば、EPSG:21781 から EPSG:3857 へスイス連邦共和国のマップを再投影するとき、ヨーロッパの適切な場所に1回、しかし、地球の反対側のニュージーランド近くの太平洋にもう1回、計2回表示されます。


これは逆変換の数学的に正しい動作ですが、複数の場所でレイヤの表示はユーザに期待されていません。考えられる一般的な解決策は、すべての頂点の順変換を計算することですが、これは(特に計算コストの高い変換の場合)パフォーマンスを大幅に低下させます。

したがって、推奨される回避策は、view 投影の ol.layer.Tile に適切な表示の範囲を定義します。このような制限再の設定は、再投影デモの例(Raster Reprojection[reprojection.html])に示します。


解像度計算

読み込むソースタイルを決定するときは、理想的なソースの解像度を計算する必要があります。ol.reproj.calculateSourceResolution(sourceProj、targetProj、targetCenter、targetResolution) 関数は、再投影の間に 1:1 にできるだけ近いピクセルマッピングを達成するために最適な値を計算し、そのときソースから適切なズームレベルを選択するために使用します。

しかし、すべてのターゲットズームレベルのために同じソースのズームレベルを使うことは実用的ではありません--異なる投影法は、世界の異なる部分で大幅に異なる解像度を持つことができ(例えば極地 EPSG:3857 対 EPSG:4326 ) 、全体のズームレベルに単一の解像度を適用すると、いくつかのタイルが拡大/縮小され、ロードされる膨大な数のソースタイルを必要とする可能性があります。したがって、解像度マッピングは (タイル範囲の中央に) 再投影されたタイルごとに個別に計算されます。

OpenLayers4 Tutorials - 5 Compile Application and OpenLayers together

Compile Application and OpenLayers together
(http://openlayers.org/en/latest/doc/tutorials/closure.html)
アプリケーションと OpenLayers を一緒にコンパイル

Closure Compiler を使用してアプリケーションをコンパイル

OpenLayers のコードは Closure Library を使用し、Closure Compiler を使用してコンパイルされます。アプリケーションに使用される OpenLayers は、 Closure を使用する必要はありません。しかし、OpenLayers アプリケーションで Closure を使用することは可能です。そして、これはこのチュートリアルの内容です。

このチュートリアルは、Closure を使用して動作するためのユーティリティを提供する、closure-util node パッケージに基づく OpenLayers アプリケーションをセットアップする方法を教えます。closure-util を使用することは、Web アプリケーションで Closure を使用する 1 つの方法ですが、他もあります。このチュートリアルは、"closure-util" 方法をちょうどカバーします。

closure-util ドキュメントは、closure-util readme ページで利用できます。このチュートリアルに従うために closure-util のマニュアルを読む必要はありませんが、必要な場合は closure-util readme ファイルが利用できます。

また、このチュートリアルにあるサンプルアプリケーションは、GitHub 上で利用できます。


Closure を使用する利点

このチュートリアルでは、Closure Compiler を使用してアプリケーション とOpenLayers を一緒にコンパイルする方法を説明します。 アプリケーションコードを OpenLayers コードとともにコンパイルすることには多くの利点があります。

まず、コンパイラは、アプリケーションが使用しない OpenLayers コードを除外するため、アプリケーションで使用する OpenLayers コードに対してのみ「支払う」ことができます。OpenLayers のカスタムビルドを作成するときに必要な、「エクスポート」リストを書いたり管理する必要はありません。

また、アプリケーションと OpenLayers を一緒にコンパイルすることは、 OpenLayers の関数と公式の OpenLayers 3(現在は 4) API の部分ではないオブジェクトを使用ことができます。API 以外の関数およびオブジェクトを使用することは、危険な可能性がありますが、それはコンパイラが OpenLayers にはない関数またはオブジェクトを使用すると訴えるという事実によって軽減されます。


アプリケーションの設定

最初に、アプリケーションのディレクトリを作成します。このチュートリアルでは、そのディレクトリに openlayers-closure-application と名付けます。

$ mkdir openlayers-closure-application

次に、そのディレクトリに移動します。

$ cd openlayers-closure-application

アプリケーションは node アプリケーションになり、openlayers と closure-util node パッケージは npm コマンドラインツールを使用して node パッケージレジストリからがダウンロードされます。

それで、すべての node アプリケーションが含んでいる、アプリケーションの package.json ファイルを作成できます。このファイルは、基本的に、アプリケーションのメタデータを含んでいます。

アプリケーションの package.json ファイルを作成します。

$ npm init

npm init が尋ねる質問には、ほとんどの場合、デフォルトの回答を使用することができます。

次は、次のコマンドを使用して OpenLayers をインストールします。

$ npm install openlayers --save

-save フラグは、アプリケーションの package.json ファイル内での openlayers 依存関係を解決しません。依存関係が追加されたことを確認する package.json を編集できます。

closure- util は openlayers パッケージの依存関係なので、openlayers と共にインストールされている必要があります。closure-util がインストールされていることを確認するのに次を使用します。
$ ./node_modules/openlayers/node_modules/.bin/closure-util

command argument is required

Usage: node closure-util <command> [options]

command     
  update-compiler     Update the Compiler
  update-library      Update the Library
  update              Update both the Library and the Compiler
  build               Build with Closure Compiler
  serve               Start the development server

Options:
   -l LEVEL, --loglevel LEVEL   Log level  [info]
■□ Debian8 で試します■□
/home/user/public_html に openlayers-closure-application ディレクトリを作成し移動します。

user@deb8-vmw:~$ cd public_html/
user@deb8-vmw:~/public_html$ mkdir openlayers-closure-application
user@deb8-vmw:~/public_html$ cd openlayers-closure-application

プロジェクトディレクトリ new-project の依存関係を管理するために、npm init で package.json を作成します。

user@deb8-vmw:~/public_html/openlayers-closure-application$ npm init
user@deb8-vmw:~/public_html/openlayers-closure-application$ npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install Glt;pkg> --save` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
name: (openlayers-closure-application)
version: (1.0.0)
description:
entry point: (index.js)
test command:
git repository:
keywords:
author: user
license: (ISC)
About to write to /home/nob61/public_html/openlayers-closure-application/package.json:
{
  "name": "openlayers-closure-application",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "user",
  "license": "ISC"
}


Is this ok? (yes) 
次のコマンドを使用して OpenLayers をインストールします。

user@deb8-vmw:~/public_html/openlayers-closure-application$ npm install openlayers --save

closure-util がインストールされていることを確認するのに次を使用します。

user@deb8-vmw:~/public_html/openlayers-closure-application$ ./node_modules/.bin/closure-util
command argument is required

Usage: /usr/bin/nodejs closure-util <command> [options]

command     
  update-compiler     Update the Compiler
  update-library      Update the Library
  update              Update both the Library and the Compiler
  build               Build with Closure Compiler
  serve               Start the development server

Options:
   -l LEVEL, --loglevel LEVEL   Log level  [info]
■□ここまで■□


OpenLayers マップを作成

次に、OpenLayers マップを作成する JavaScript ファイルを作成していきます。これは、アプリケーションのエントリポイントを定義するファイルです。

まず、アプリケーションのルートに src ディレクトリを作成します。

$ mkdir src

次に、以下の内容のファイル main.js を src に追加します。

goog.provide('app');

goog.require('ol.Map');
goog.require('ol.View');
goog.require('ol.layer.Tile');
goog.require('ol.source.OSM');
/**
 * @type {ol.Map}
 */
app.map = new ol.Map({
 target: 'map',
 layers: [
  new ol.layer.Tile({
   source: new ol.source.OSM()
  })
 ],
 view: new ol.View({
  center: [0, 0],
  zoom: 4
 })
});
goog.provide('app') は、アプリケーションの名前空間 app を作成します。次の goog.require ステートメントは、アプリケーションが使用する OpenLayers コンストラクタと名前空間を定義します。OpenLayers のアプリケーションでの操作と同様、コードの残りの部分は OpenLayers マップを作成するだけです。

■□ Debian8 で試します■□
アプリケーションのルートに src ディレクトリを作成します。

user@deb8-vmw:~/public_html/openlayers-closure-application$ mkdir src

次に、以下の内容のファイル main.js を src に追加します。

user@deb8-vmw:~/public_html/openlayers-closure-application$ cd src
user@deb8-vmw:~/public_html/openlayers-closure-application/src$ vim main.js

goog.provide('app');

goog.require('ol.Map');
goog.require('ol.View');
goog.require('ol.layer.Tile');
goog.require('ol.source.OSM');

/**
 * @type {ol.Map}
 */
app.map = new ol.Map({
 target: 'map',
 layers: [
  new ol.layer.Tile({
   source: new ol.source.OSM()
  })
 ],
 view: new ol.View({
  center: [0, 0],
  zoom: 4
 })
});
■□ここまで■□


アプリケーションをコンパイル

次に、Closure Compiler と closure-util を使用して、アプリケーションと OpenLayers を一緒にコンパイルします。このため、入力ファイルとして closure-util コマンドに渡す、JSON の config ファイルを作成する必要があります。

最小設定ファイルはこのようになります。
{
 "lib": [
  "node_modules/openlayers/src/**/*.js",
  "node_modules/openlayers/build/ol.ext/**/*.js",
  "src/**/*.js"
 ],
 "compile": {
  "closure_entry_point": "app",
  "externs": [
   "node_modules/openlayers/externs/bingmaps.js",
   "node_modules/openlayers/externs/cartodb.js",
   "node_modules/openlayers/externs/closure-compiler.js",
   "node_modules/openlayers/externs/esrijson.js",
   "node_modules/openlayers/externs/geojson.js",
   "node_modules/openlayers/externs/proj4js.js",
   "node_modules/openlayers/externs/tilejson.js",
   "node_modules/openlayers/externs/topojson.js"
  ],
  "define": [
   "ol.ENABLE_WEBGL=false"
  ],
  "js": [
   "node_modules/openlayers/externs/olx.js",
   "node_modules/openlayers/externs/oli.js"
  ],
  "extra_annotation_name": [
   "api", "observable"
  ],
  "rewrite_polyfills": "false",
  "compilation_level": "ADVANCED",
  "warning_level": "VERBOSE",
  "output_wrapper": "(function(){%output%})();",
  "use_types_for_optimization": true
 }
}
上記のコンテンツの config.json ファイルをアプリケーションディレクトリのルートに作成します。

この時点で、コードをコンパイルするたに closure-util が使用できます。

$ ./node_modules/openlayers/node_modules/.bin/closure-util build config.json app.js

app.js ファイルの結果は、興味があるなら、エディタで表示でき、アプリケーションコード(main.js)の縮小版とアプリケーションコードが使用する OpenLayers コードが含まれています。

これは、詳細コンパイルチェックを有効した config.json のバージョンです。
{
 "lib": [
  "node_modules/openlayers/src/**/*.js",
  "node_modules/openlayers/build/ol.ext/**/*.js",
  "src/**/*.js"
 ],
 "compile": {
  "closure_entry_point": "app",
  "externs": [
   "node_modules/openlayers/externs/bingmaps.js",
   "node_modules/openlayers/externs/cartodb.js",
   "node_modules/openlayers/externs/closure-compiler.js",
   "node_modules/openlayers/externs/esrijson.js",
   "node_modules/openlayers/externs/geojson.js",
   "node_modules/openlayers/externs/proj4js.js",
   "node_modules/openlayers/externs/tilejson.js",
   "node_modules/openlayers/externs/topojson.js"
  ],
  "define": [
   "ol.ENABLE_WEBGL=false"
  ],
  "js": [
   "node_modules/openlayers/externs/olx.js",
   "node_modules/openlayers/externs/oli.js"
  ],
  "jscomp_error": [
   "*"
  ],
  "jscomp_off": [
   "unknownDefines",
   "lintChecks",
   "analyzerChecks"
  ],
  "extra_annotation_name": [
   "api", "observable"
  ],
  "compilation_level": "ADVANCED",
  "warning_level": "VERBOSE",
  "output_wrapper": "(function(){%output%})();",
  "use_types_for_optimization": true
 }
}
■□ Debian8 で試します■□
次の内容で config.json ファイルをアプリケーションディレクトリのルートに作成します。

user@deb8-vmw:~/public_html/openlayers-closure-application/src$ cd ../
user@deb8-vmw:~/public_html/openlayers-closure-application$ vim config.json
{
 "lib": [
  "node_modules/openlayers/src/**/*.js",
  "node_modules/openlayers/build/ol.ext/**/*.js",
  "src/**/*.js"
 ],
 "compile": {
  "closure_entry_point": "app",
  "externs": [
   "node_modules/openlayers/externs/bingmaps.js",
   "node_modules/openlayers/externs/cartodb.js",
   "node_modules/openlayers/externs/closure-compiler.js",
   "node_modules/openlayers/externs/esrijson.js",
   "node_modules/openlayers/externs/geojson.js",
   "node_modules/openlayers/externs/proj4js.js",
   "node_modules/openlayers/externs/tilejson.js",
   "node_modules/openlayers/externs/topojson.js"
  ],
  "define": [
   "ol.ENABLE_WEBGL=false"
  ],
  "js": [
   "node_modules/openlayers/src/ol/typedefs.js",
   "node_modules/openlayers/externs/olx.js",
   "node_modules/openlayers/externs/oli.js"
  ],
  "extra_annotation_name": [
   "api", "observable"
  ],
  "rewrite_polyfills": "false",
  "compilation_level": "ADVANCED",
  "warning_level": "VERBOSE",
  "output_wrapper": "(function(){%output%})();",
  "use_types_for_optimization": true
 }
}
コードをコンパイルするたに closure-util 実行します。

user@deb8-vmw:~/public_html/openlayers-closure-application$ ./node_modules/.bin/closure-util build config.json app.js
info closure-util Reading build config
info closure-util Getting Closure dependencies
info closure-util Compiling 345 sources
info closure-util Writing compiled code to app.js
user@deb8-vmw:~/public_html/openlayers-closure-application$ ls
app.js  config.json  node_modules  package.json  src

■□ここまで■□


アプリケーションの HTML ファイルを作成

この時点で、先に進めることができ、アプリケーションのシンプルな HTML を作成することができます。ルート アプリケーション ディレクトリに以下の内容の index.html ファイルを作成します。
<!doctype html>
<html lang="en">
 <head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="chrome=1">
  <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
  <link rel="stylesheet" href="node_modules/openlayers/css/ol.css" type="text/css">
  <title>Simple example</title>
  <style>
   #map {
    width: 600px;
    height: 400px;
   }
  </style>
 </head>
 <body>
  <div id="map"></div>
  <script src="app.js" type="text/javascript"></script>
 <body>
</html>
ページに 、コンパイルの結果ファイルである app.js ファイルを参照するスクリプト タグが含まれていることに注意してください。

完了です!

■□ Debian8 で試します■□
次の内容の index.html ファイルを作成します。
user@deb8-vmw:~/public_html/openlayers-closure-application$ vim index.html
<!doctype html>
<html lang="en">
 <head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="chrome=1">
  <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
  <link rel="stylesheet" href="node_modules/openlayers/css/ol.css" type="text/css">
  <title>Simple example</title>
  <style>
   #map {
    width: 600px;
    height: 400px;
   }
  </style>
 </head>
 <body>
  <div id="map"></div>
  <script src="app.js" type="text/javascript"></script>
 <body>
</html>

Webブラウザのアドレス欄に

http://localhost/~user/openlayers-closure-application/

と入力して Enter キーを押します。


■□ここまで■□


デバッグ モードでアプリケーションを実行

ボーナスとして、元のアプリケーションと OpenLayers スクリプトがページに1 つずつ読み込まれる「デバッグ」モードでアプリケーションを実行する closure-util の使用方法を示します。

closure-util の開発サーバーを起動します。

$ ./node_modules/openlayers/node_modules/.bin/closure-util serve config.json

次に、index.html ファイルのスクリプトタグを次のように変更します。

<script src="@?main=src/main.js" type="text/javascript"></script>

ブラウザでページを再読み込みすると、より簡単にデバッグするためにスクリプトがこの時点で個別に読み込まれることがわかります。

■□ Debian8 で試します■□
closure-util の開発サーバーを起動します。

user@deb8-vmw:~/public_html/openlayers-closure-application$ ./node_modules/.bin/closure-util serve config.json
info closure-util Reading build config
info closure-util Listening on http://localhost:3000/ (Ctrl+C to stop)

index.html ファイルのスクリプトタグを次のように変更します。

user@deb8-vmw:~/public_html/openlayers-closure-application$ vim index.html
---
  <!-- <script src="app.js" type="text/javascript"></script> -->
  <script src="@?main=src/main.js" type="text/javascript"></script>
---

Webブラウザのアドレス欄に

http://localhost:3000/

と入力して Enter キーを押します。

スクリプトが個別に読み込まれることは確認できませんでした。
■□ここまで■□

OpenLayers4 Tutorials - 4 Bundle Application and OpenLayers using Browserify

Bundle Application and OpenLayers using Browserify
(http://openlayers.org/en/latest/doc/tutorials/browserify.html)
Browserify を使用するアプリケーションとOpenLayers のバンドル

はじめに

既存の例を変更するよりも、OpenLayers のような外部依存関係と一緒に依存関係管理を使って独自のコードを設定する方法を探しているかもしれません。

このチュートリアルは、最も基本的なニーズの NPM と Browserify を使用して提案されたプロジェクトの設定として役立ちます。他にもいくつかのオプションがあり、特に OpenLayers と一緒に独自のコードをコンパイルすることに興味があるかもしれません。


最初の手順

プロジェクト用に新しい空のディレクトリを作成し、mkdir new-project && cd new-project を実行して、そのディレクトリに移動します。npm init を使用してプロジェクトを初期化し、質問に回答します。

この時点で、npm install -save-dev openlayers browserify watchify uglify-js を実行することによって、必要な依存関係を追加するよう NPM に依頼できます。Watchify と Uglify は、変更を監視し、縮小版バンドルにビルドするために使用されます。

■□ Debian8 で試します■□
/home/user/public_html に new-project ディレクトリを作成し移動します。

user@deb8-vmw:~$ cd public_html/
user@deb8-vmw:~/public_html$ mkdir new-project && cd new-project

プロジェクトディレクトリ new-project の依存関係を管理するために、npm init で package.json を作成します。

user@deb8-vmw:~/public_html/new-project$ npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install --save` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
name: (new-project) browserify_demo
version: (1.0.0)
description:
entry point: (index.js)
test command:
git repository:
keywords:
author: user
license: (ISC)
About to write to /home/nob61/public_html/new-project/package.json:

{
  "name": "browserify_demo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "user",
  "license": "ISC"
}

Is this ok? (yes)

npm install -save-dev openlayers browserify watchify uglify-js を実行します。

user@deb8-vmw:~/public_html/new-project$ npm install -save-dev openlayers browserify watchify uglify-js

■□ここまで■□


アプリケーション コードと index.html

index.js にアプリケーション コードを配置します。ここに単純な出発点があります。

var ol = require('openlayers');

var map = new ol.Map({
 target: 'map',
 layers: [
  new ol.layer.Tile({
   source: new ol.source.OSM()
  })
 ],
 view: new ol.View({
  center: [0, 0],
  zoom: 0
 })
});
バンドルを使用する ìndex.html ファイルが必要です。ここには簡単な例があります。
<!doctype html>
<html>
 <head>
  <meta charset="utf-8">
  <title>Using Browserify with OpenLayers</title>
  <link rel="stylesheet" href="node_modules/openlayers/dist/ol.css" type="text/css">
  <style>
   #map {
    width: 400px;
    height: 250px;
   }
  </style>
 </head>
 <body>
  <div id="map"></div>
  <script src="bundle.js"></script>
 <body>
</html>
■□ Debian8 で試します■□
次の内容で index.js を作成します。

user@deb8-vmw:~/public_html/new-project$ vim index.js
var ol = require('openlayers');

var map = new ol.Map({
 target: 'map',
 layers: [
  new ol.layer.Tile({
   source: new ol.source.OSM()
  })
 ],
 view: new ol.View({
  center: [0, 0],
  zoom: 0
 })
});
次の内容で index.html を作成します。

user@deb8-vmw:~/public_html/new-project$ vim index.html
<!doctype html>
<html>
 <head>
  <meta charset="utf-8">
  <title>Using Browserify with OpenLayers</title>
  <link rel="stylesheet" href="node_modules/openlayers/dist/ol.css" type="text/css">
  <style>
   #map {
    width: 400px;
    height: 250px;
   }
  </style>
 </head>
 <body>
  <div id="map"></div>
  <script src="bundle.js"></script>
 <body>
</html>
■□ここまで■□


バンドルの作成

単純なスクリプトで、npm run build と npm start コマンドを導入して、手動でバンドルのビルドと変更の監視を、それぞれ、開始することができます。package.json の script[スクリプト]セクションに次のものを追加します。

"scripts": {
 "start": "watchify index.js --outfile bundle.js",
 "build": "browserify index.js | uglifyjs --compress --output bundle.js"
}

bundle.js は、アプリケーションコードとアプリケーションで使用されるすべての依存関係、この場合は OpenLayers の公式のフルビルド、を含むことに注意してください。OpenLayers のパーツが必要なだけなら、カスタムビルドを作成することができます。

■□ Debian8 で試します■□
package.json に script セクションを次のように追加します。

user@deb8-vmw:~/public_html/new-project$ vim package.json
{
  "name": "browserify_demo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "watchify index.js --outfile bundle.js",
    "build": "browserify index.js | uglifyjs --compress --output bundle.js"
  },
  "author": "user",
  "license": "ISC",
  "devDependencies": {
    "browserify": "^14.3.0",
    "openlayers": "^4.1.1",
    "uglify-js": "^3.0.1",
    "watchify": "^3.9.0"
  }
}
npm run build と npm start を実行します。

user@deb8-vmw:~/public_html/new-project$ npm run build

> browserify_demo@1.0.0 build /home/nob61/public_html/new-project
> browserify index.js | uglifyjs --compress --output bundle.js

user@deb8-vmw:~/public_html/new-project$ npm start

> browserify_demo@1.0.0 start /home/nob61/public_html/new-project
> watchify index.js --outfile bundle.js
Webブラウザのアドレス欄に

http://localhost/~user/new-project/

と入力して Enter キーを押します。


boundl.js に OpenLayers の公式のフルビルドと index.js がバンドルされました。
index.js を編集(例えば、"zoom: 1" に修正)して index.html を再読込するとマップが拡大されます。


■□ここまで■□

OpenLayers4 Tutorials - 3 Create Custom Builds

Create Custom Builds
(http://openlayers.org/en/latest/doc/tutorials/custom-builds.html)
カスタムビルドの作成

OpenLayers 多くの機能を提供する大きなライブラリです。アプリケーションがOpenLayers が提供するすべての機能を必要とし、使用することはほとんどありません。アプリケーションに必要な機能だけを持つ、アプリケーション固有の OpenLayers ビルドを作成することは、多くの場合、良い考えである理由です。

カスタムビルドを作成する代わりは、OpenLayers と一緒にアプリケーションコードをコンパイルすることです。詳細については Closure Compiler チュートリアルの Compiling Application を参照してください。

このチュートリアルは、 OpenLayers のカスタム ビルドを作成する方法について説明します。


要件

OpenLayers ビルドツールは、Node と Java 使用するので、コンピュータにNode と Java がインストールされている必要があります。Node と Java が、それぞれインストールされているか確かめるために、「node --version」と「java -version」を実行できます。必要な最小バージョン番号は、開発ガイドを参照してください。


■□ Debian8 で試します■□
Debian8(Jessie)に、最新の Node.js をインストールしてみます。

「How to Install Latest NodeJs & NPM on Debian 8/7(https://tecadmin.net/install-latest-nodejs-npm-on-debian/)」と「Installing Node.js Tutorial: Debian Linux(https://nodesource.com/blog/installing-node-js-tutorial-debian-linux/)」を参考にします。

最初に、「curl」と「python-software-properties」をインストールします。「curl(https://curl.haxx.se/)」は、コマンドライン、または、スクリプトでデータを転送するために使用されます。「python-software-properties」は、インストールしたソフトウェアのリポジトリを管理します。[「Debian -- jessie の python-software-properties パッケージに関する詳細(https://packages.debian.org/ja/jessie/python-software-properties)」より]

user@deb8-vmw:~$ su -
パスワード:
root@deb8-vmw:~# apt-get install curl python-software-propaties
root@deb8-vmw:~# curl -sL https://deb.nodesource.com/setup_7.x | bash -

次に、node.js をインストールします。一緒に NPM もインストールされます。「npm(https://www.npmjs.com/)」は、JavaScript と世界最大のソフトウェアレジストリのパッケージマネージャです。

root@deb8-vmw:~# apt-get install nodejs

それでは、node.js と npm のバージョンを確認します。

root@deb8-vmw:~# exit
ログアウト
user@deb8-vmw:~$ node -v
v7.9.0
user@deb8-vmw:~$ npm -v
4.2.0

java のバージョンを確認します。(Eclipse 4.6 "Neon" のインストール時(2017年2月28日火曜日のブログ)に Java をインストールしました。)

user@deb8-vmw:~$ java -version
java version "1.7.0_121"
OpenJDK Runtime Environment (IcedTea 2.6.8) (7u121-2.6.8-2~deb8u1)
OpenJDK 64-Bit Server VM (build 24.121-b00, mixed mode)

node.js のインストールをテストするために、webサーバを作成します。次の内容で http_sever.js を作成します。

user@deb8-vmw:~$ vim http_server.js
var http = require('http');
http.createServer(function (req, res) {
 res.writeHead(200, {'Content-Type': 'text/plain'});
 res.end('Hello World\n');
}).listen(3000, "127.0.0.1");
console.log('Server running at http://127.0.0.1:3000/');

次のコマンドで web サーバを起動します。

user@deb8-vmw:~$ node http_server.js
Server running at http://127.0.0.1:3000/

Webブラウザのアドレス欄に

http://127.0.0.1:3000/

と入力して Enter キーを押します。


■□ここまで■□


OpenLayers をダウンロード

明らかに、カスタムビルドを作成するには、OpenLayers のソースと特定のビルドスクリプトが必要です。

OpenLayers のソースとビルドスクリプトを取得するには、openlayers リポジトリのクローンを作成することができるか、または、リリースアーカイブの1つをダウンロードすることができます。NPM (the Node Package Manager)を使用して、Node パッケージレジストリから openlayers Node パッケージもダウンロードすることができます。これは、このチュートリアルで使用する方法です。

ディレクトリを作成します。

$ mkdir openlayers

NPM を使用する OpenLayers ディストリビューションをダウンロードします。

$ npm install openlayers

これは、OpenLayers の最新の安定版をダウンロードし、node_modules の下でインストールします。「openlayers」という名前のディレクトリが実際に含まれていることを確認するために、node_modules の内容のリストを作成できます。

■□ Debian8 で試します■□
openlayers ディレクトリを public_html に作成します。

user@deb8-vmw:~$ cd public_html
user@deb8-vmw:~/public_html$ mkdir openlayers

この openlayers ディレクトリの作成理由がわからないので、ここでは、このディレクトリ内で作業します。
NPM を使用する OpenLayers ディストリビューションをダウンロードします。

user@deb8-vmw:~/public_html$ cd openlayers
user@deb8-vmw:~/public_html/openlayers$ npm install openlayers

■□ここまで■□

openlayers パッケージが依存する Node パッケージは、node_modules/openlayers/node_modules の下にインストールされます。このディレクトリには、例えば、OpenLayers が Closure に使用するユーティリティライブラリである closure-util を含める必要があります。

■□ Debian8 で試します■□
実際のディレクトリは、

/home/user/public_html/openlayers/node_modules/openlayers

なっています。最後の openlayers ディレクトリには node_modules はありませんでした。
■□ここまで■□

この時点で、OpenLayers のカスタムビルドを作成するのに必要なすべてのものが準備できました。


ビルド設定ファイルの作成

カスタムビルドを作成するには、ビルド設定ファイルの書き込みが必要です。ビルド設定ファイルのフォーマットは JSON です。これは、ビルド設定ファイルの簡単な例です。
{
 "exports": [
  "ol.Map",
  "ol.View",
  "ol.control.defaults",
  "ol.layer.Tile",
  "ol.source.OSM"
 ],
 "compile": {
  "externs": [
   "externs/bingmaps.js",
   "externs/cartodb.js",
   "externs/closure-compiler.js",
   "externs/esrijson.js",
   "externs/geojson.js",
   "externs/oli.js",
   "externs/olx.js",
   "externs/proj4js.js",
   "externs/tilejson.js",
   "externs/topojson.js"
  ],
  "extra_annotation_name": [
   "api", "observable"
  ],
  "compilation_level": "ADVANCED",
  "manage_closure_dependencies": true,
  "rewrite_polyfills": false
 }
}

この内容で ol-custom.json という名前のファイルを作成し、node_modules/openlayers/build ディレクトリに保存します。(実際はそれを任意の場所に保存することができます。)

この設定オブジェクトの最も関連する部分は、「exports」配列です。この配列は、JavaScript コードで使用するfunctions/constructors(ファンクション/コンストラクタ)を宣言します。例えば、上記の設定ファイルは、次の JavaScript コードを使用する場合です。

var map = new ol.Map({
 target: 'map',
 layers: [
  new ol.layer.Tile({
   source: new ol.source.OSM()
  })
 ],
 controls: ol.control.defaults({
  attributionOptions: {
   collapsible: false
  }
 }),
 view: new ol.View({
  center: [0, 0],
  zoom: 4
 })
});

この JavaScript コードは 、 OpenLayers の Examples 内にある「simple example」に対応していることに注意して下さい。

この時点で、最初の OpenLayers ビルドを作成する準備が整いました。ビルドを作成するには、次のコマンドを使用します。

$ cd node_modules/openlayers
$ node tasks/build.js build/ol-custom.json build/ol-custom.js

ビルドコマンドには時間がかかることがありますが、次のような出力がコンソールに表示されます。

info ol Parsing dependencies
info ol Compiling 364 sources

build コマンドは、node_modules/openlayers/build ディレクトリに ol-custom.js ファイルを作成するでしょう。ファイルが作成されたことを確認できます。興味がある人は、エディタで開くこともできます。

テストは、次のHTMLファイルを使用して、カスタムビルドが正常に動作することを確認できます。

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8" />
  <title>OpenLayers example</title>
  <link rel="stylesheet" href="node_modules/openlayers/css/ol.css" />
  <style>
   #map {
    width: 600px;
    height: 400px;
   }
  </style>
 </head>
 <body>
  <div id="map"></div>
  <script src="node_modules/openlayers/build/ol-custom.js"></script>
  <script>
   var map = new ol.Map({
    target: 'map',
    layers: [
     new ol.layer.Tile({
      source: new ol.source.OSM()
     })
    ],
    view: new ol.View({
     center: [0, 0],
     zoom: 4
    })
   });
  </script>
 <body>
</html>
■□ Debian8 で試します■□
ビルド設定ファイルの作成

node_modules/openlayers/build に 次の内容で  ol-custom.json という名前のファイルを作成します。

user@deb8-vmw:~/public_html/openlayers$ cd node_modules/openlayers/build/
user@deb8-vmw:~/public_html/openlayers/node_modules/openlayers/build$ vim ol-custom.json
{
 "exports": [
  "ol.Map",
  "ol.View",
  "ol.control.defaults",
  "ol.layer.Tile",
  "ol.source.OSM"
 ],
 "compile": {
  "externs": [
   "externs/bingmaps.js",
   "externs/cartodb.js",
   "externs/closure-compiler.js",
   "externs/esrijson.js",
   "externs/geojson.js",
   "externs/oli.js",
   "externs/olx.js",
   "externs/proj4js.js",
   "externs/tilejson.js",
   "externs/topojson.js"
  ],
  "extra_annotation_name": [
   "api", "observable"
  ],
  "compilation_level": "ADVANCED",
  "manage_closure_dependencies": true,
  "rewrite_polyfills": false
 }
}
ビルドを作成するために、node_modules/openlayers/ に移動して次のコマンドを使用します。

user@deb8-vmw:~/public_html/openlayers/node_modules/openlayers/build$ cd ../
user@deb8-vmw:~/public_html/openlayers/node_modules/openlayers$ node tasks/build.js build/ol-custom.json build/ol-custom.js
info ol Parsing dependencies
info ol Compiling 345 sources

次のHTMLファイル openlayers.html を作成します。

user@deb8-vmw:~/public_html/openlayers/node_modules/openlayers$ cd ../../
user@deb8-vmw:~/public_html/openlayers$ vim openlayers.html
<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8" />
  <title>OpenLayers example</title>
  <link rel="stylesheet" href="node_modules/openlayers/css/ol.css" />
  <style>
   #map {
    width: 600px;
    height: 400px;
   }
  </style>
 </head>
 <body>
  <div id="map"></div>
  <script src="node_modules/openlayers/build/ol-custom.js"></script>
  <script>
   var map = new ol.Map({
    target: 'map',
    layers: [
     new ol.layer.Tile({
      source: new ol.source.OSM()
     })
    ],
    view: new ol.View({
     center: [0, 0],
     zoom: 4
    })
   });
  </script>
 <body>
</html>
Webブラウザのアドレス欄に

http://localhost/~user/openlayers/openlayers.html

と入力して Enter キーを押します。


user@deb8-vmw:~/public_html/openlayers/node_modules$ cd openlayers/build/
user@deb8-vmw:~/public_html/openlayers/node_modules/openlayers/build$ ls -l
合計 1624
-rw-r--r-- 1 user user 1495423  5月  4 14:33 info.json
-rw-r--r-- 1 user user  155060  5月  4 14:34 ol-custom.js
-rw-r--r-- 1 user user     510  5月  4 11:13 ol-custom.json
drwxr-xr-x 2 user user    4096  5月  3 14:50 ol.ext
ol-custom.js は 155060B で、単純には比較できませんが ol.js は 510491B なので容量が減らされました。

■□ここまで■□


設定(config)ファイルの詳細
More on the config file

define

Closure は、コンパイル時に設定できる定数を定義できます。OpenLayers のコードは、そのような値をいくつか定義します。

これらのいくつかを false に設定すると、この設定に関連するコードの部分が「デッド(dead:無効)」、すなわち決して実行されないよう、になります。Closure Compiler ADVANCED モードではデッドコードが削除されるため、アドバンスコンパイル(advanced compiled)ファイルのサイズを小さくします。

作成したビルドファイルが完全ビルドよりもかなり小さいことに気づいたかもしれませんが、それをさらに減らすことができます。これは、レンダラとその他のオプションコードの両方がデフォルトで含まれているためです。レンダラは1つだけ必要です。オプションのコードを使用しないので、定義でプロパティを設定することで、使用しないものを除外できます。そのために、上記の設定(config)に define セクションを追加してください:

 "define": [
  "ol.ENABLE_WEBGL=false",
  "ol.ENABLE_PROJ4JS=false",
  "ol.ENABLE_RASTER_REPROJECTION=false"
 ],

そして、ビルドスクリプトを再実行します。この時点で、ビルドサイズが前より小さくなるはずです。

■□ Debian8 で試します■□
最初に作成した ol-custom.js の名前を ol-custom.js_1 に変更します。

user@deb8-vmw:~/public_html/openlayers/node_modules/openlayers/build$ ls
info.json  ol-custom.js  ol-custom.json  ol.ext
nob61@deb8-vmw:~/public_html/openlayers/node_modules/openlayers/build$ mv ol-custom.js ol-custom.js_1
user@deb8-vmw:~/public_html/openlayers/node_modules/openlayers/build$ ls
info.json  ol-custom.js_1  ol-custom.json  ol.ext

ol-custom.json に上記の define セクションを追加します。

user@deb8-vmw:~/public_html/openlayers/node_modules/openlayers/build$ vim ol-custom.json 
{
 "exports": [
  "ol.Map",
  "ol.View",
  "ol.control.defaults",
  "ol.layer.Tile",
  "ol.source.OSM"
 ],
 "compile": {
  "externs": [
   "externs/bingmaps.js",
   "externs/cartodb.js",
   "externs/closure-compiler.js",
   "externs/esrijson.js",
   "externs/geojson.js",
   "externs/oli.js",
   "externs/olx.js",
   "externs/proj4js.js",
   "externs/tilejson.js",
   "externs/topojson.js"
  ],
  "extra_annotation_name": [
   "api", "observable"
  ],
  "define": [
   "ol.ENABLE_WEBGL=false",
   "ol.ENABLE_PROJ4JS=false",
   "ol.ENABLE_RASTER_REPROJECTION=false"
  ],
  "compilation_level": "ADVANCED",
  "manage_closure_dependencies": true,
  "rewrite_polyfills": false
 }
}
ビルドを作成するために、node_modules/openlayers/ に移動して次のコマンドを使用します。

user@deb8-vmw:~/public_html/openlayers/node_modules/openlayers/build$ cd ../
user@deb8-vmw:~/public_html/openlayers/node_modules/openlayers$ node tasks/build.js build/ol-custom.json build/ol-custom.js
info ol Parsing dependencies
info ol Compiling 345 sources
user@deb8-vmw:~/public_html/openlayers_org/node_modules/openlayers$ ls -l build/
合計 1904
-rw-r--r-- 1 user user 1495423  5月  4 14:33 info.json
-rw-r--r-- 1 user user  130772  5月  9 10:30 ol-custom.js
-rw-r--r-- 1 user user  155060  5月  4 14:34 ol-custom.js_1
-rw-r--r-- 1 user user     679  5月  9 10:25 ol-custom.json
drwxr-xr-x 2 user user    4096  5月  3 14:50 ol.ext
ol-custom.js は 130772B で、前回の 155060B より少し容量が減らされました。

■□ここまで■□


Externs

Closure ドキュメントでは、「externs」はコンパイルされるコードで使用される外部名であることを説明しています。コンパイラは、document などのビルトインの externs を含んでいます。OpenLayers コードの externs ディレクトリは、ライブラリのいくつかの部分で使用されているそれらのすべてのファイルを含んでいます。たとえば、Bing Maps を使用する場合は、設定(config)ファイルの externs セクションで Bing externs ファイルを含める必要があります。

oli.js と olx.js は、OpenLayers API の externs ファイルです。たとえば olx.js は、OpenLayers コンストラクタオプションの外部定義を含んでいます。closure-compiler.js は、特定のコンパイラのバージョンで発生する問題を修正します。カスタムビルドを作成するときは、externs としてこれら 3 つのファイルを常に使用する必要があります。


その他のコンパイラオプション

上記の設定(config)ファイルでその他のコンパイラオプションが2つあります。manage_closure_dependencies と rewrite_polyfills が常に使用される必要があります。

名前変更レポートやマニフェストの出力、ソースマップなど、必要に応じて他のコンパイラオプションのいずれかをここで指定できます。closure-util に有効なオプションの完全なリストがあります。

build.js は、現在、出力ファイルを入力するために必要で、コンパイラからそれに出力を書き込むことに注意して下さい。js_output_file コンパイラオプションを使用しません。設定(config)ファイルでこれを指定すると、コンパイラ出力はありません、そのため、 build.js の出力ファイルは空になります。


さらに複雑な例

次に、さらに複雑な例: heatmaps-earthquakes を試してみましょう。ビルド設定ファイルは、このようになります。

{
 "exports": [
  "ol.layer.Heatmap",
  "ol.source.Vector",
  "ol.format.KML",
  "ol.layer.Heatmap#getSource",
  "ol.source.Vector#on",
  "ol.source.Vector.Event#feature",
  "ol.Feature#get",
  "ol.Feature#set",
  "ol.layer.Tile",
  "ol.source.Stamen",
  "ol.Map",
  "ol.View",
  "ol.layer.Heatmap#setRadius",
  "ol.layer.Heatmap#setBlur"
 ],
 "compile": {
  "externs": [
   "externs/bingmaps.js",
   "externs/cartodb.js",
   "externs/closure-compiler.js",
   "externs/esrijson.js",
   "externs/geojson.js",
   "externs/olx.js",
   "externs/oli.js"
   "externs/proj4js.js",
   "externs/tilejson.js",
   "externs/topojson.js"
  ],
  "define": [
   "ol.ENABLE_WEBGL=false",
   "ol.ENABLE_PROJ4JS=false",
   "ol.ENABLE_RASTER_REPROJECTION=false"
  ],
  "compilation_level": "ADVANCED",
  "manage_closure_dependencies": true,
  "rewrite_polyfills": false
 }
}
出力(書き出し)は、heatmaps-earthquakes example の JavaScript コードで発生する命令でここに与えられます。この例では、ol. 関数とコンストラクタだけでなく、ol 名前空間が直接使用されない prototype メソッドを使用します。コードに、例えば vector.getSource().on() があります。これは、layer.Heatmap の getSource メソッドと source.KML の on メソッドを使用しているため、これがエクスポートされなけらばならないことを意味します。同様に、event.feature.get() は、source.Vector.Event の feature プロパティと Feature の get メソッドを使用していることを意味します。これらの名前のいずれかが残っていれば、コンパイルは正常に完了しますが、欠落している名前はわかりにくくなり、スクリプトを実行しようとすると「property undefined[プロパティが定義されていません]」というエラーが発生します。


コードのメンテナンス

OpenLayers を Node パッケージからインストールした場合、最新のバージョンにアップグレードするために npm を使用できます。Github のリポジトリ[Github repo]をクローンした場合、単に最新コードにプルすることは十分ではありません、なので、使用されるいくつかのパッケージ、例えばコンパイラ、はアップグレードする必要もあります。npm update よりも、npm install を使用してこれを実行します。


結論

このチュートリアルは、カスタムビルドを作成するために必要な情報を与えています、すなわち、アプリケーションに合わせてビルドします。ビルド設定ファイルで使用できるビルドスクリプトとプロパティの詳細については tasks の readme を参照してください。

OpenLayers4 Tutorials - 2 Basic Concepts

Basic Concepts
(http://openlayers.org/en/latest/doc/tutorials/concepts.html)
基本的概念

Map[マップ]

OpenLayers コアコンポーネントは、map (ol.Map) です。それは、ターゲット[target]コンテナ (map を含む web ページの div 要素[element]など) に描画されます。すべての map プロパティは、構築時に、または、setTarget() などの setter(セッタ)メソッドを使用して設定できます。
<div id="map" style="width: 100%, height: 400px"></div>
<script>
 var map = new ol.Map({target: 'map'});
</script>


View[ビュー]

ol.Map は、地図の中心、ズームレベル、投影法のようなものを担いません。代わりに、これらは、ol.View インスタンスのプロパティです。
 map.setView(new ol.View({
  center: [0, 0],
  zoom: 2
 }));

ol.View は、projection[投影法]もあります。projection は、マップ解像度計算のための中心と単位の座標系を決定します。(上記のスニペットのように)指定されていない場合 、初期値の projection は、map[マップ]単位がメートルの球状メルカトル(EPSG:3857)です。

zoom[ズーム]オプションは、map の解像度を指定する便利な方法です。使用可能なズームレベルは、maxZoom(初期値:28)、zoomFactor(初期値:2)、およびmaxResolution(初期値は投影の有効範囲が256x256ピクセルのタイルに収まるように計算されます)によって決まります。maxResolution ピクセル単位の解像度を持つズームレベル 0 から開始し、それ以降のズームレベルは、ズームレベル maxZoom に到達するまで、前のズームレベルの解像度を zoomFactor で割ることによって計算されます。


Source[ソース]

layer[レイヤ]のリモートデータを取得するために、OpenLayers は  ol.source.Source のサブクラスを使用します。これらは、OpenStreetMap や Bing などの無料および商業地図タイルサービスで、WMS や WMTS などの  OGC ソースで、 GeoJSON または KML などのフォーマットの vector[ベクタ]データが使用可能です。

 var osmSource = new ol.source.OSM();


Layer[レイヤ]

layer は、source[ソース]からのデータの視覚的表現です。OpenLayers は、3つの基本的な種類の layer: ol.layer.Tile、ol.layer.Image、ol.layer.Vector があります。

ol.layer.Tile は、事前描画を提供する layer source のためのもので、指定の解像度の zoom[ズーム]レベルによって構成されたグリッドで画像をタイルにします。

ol.layer.Image は、任意の範囲と解像度で使用可能なサーバ描画画像のためのものです。

ol.layer.Vector は、クライアントサイドで描画されるvector[ベクタ]データのためのものです。

 var osmLayer = new ol.layer.Tile({source: osmSource});
 map.addLayer(osmLayer);


すべて一緒に配置

上記のスニペットは、view[ビュー]と layer[レイヤ]を含む自己完結型の map[マップ]設定に統合できます。
<div id="map" style="width: 100%, height: 400px"></div>
<script>
 new ol.Map({
  layers: [
   new ol.layer.Tile({source: new ol.source.OSM()})
  ],
  view: new ol.View({
   center: [0, 0],
   zoom: 2
  }),
   target: 'map'
 });
</script>

OpenLayers4 Tutorials - 1 Introduction to OpenLayers

Introduction to OpenLayers
(http://openlayers.org/en/latest/doc/tutorials/introduction.html)
OpenLayers の紹介

目的

バージョン 3 で、OpenLayers web マッピング ライブラリを根本的にリニューアルしました。広く使われているバージョン 2 では、Javascript 開発の初期の時代に始まり、ますます不具合が出てきました。それで、現代のデザイン・パターンを使って、完全に書き直されました。

最初のリリースは、バージョン 2 で提供される機能の多くをサポートし、商用やフリーの広い範囲のタイルソース、および、最も一般的なオープンソースのベクタデータフォーマットのサポートを目的としています。バージョン 2 と同様に、データは、どんな投影法にもなります。最初のリリースは、マップを簡単に回転やアニメーションさせるような、いくつかの追加機能も追加します。

3D マップの表示や WebGL を使用して大きなベクタデータセットをすばやく表示するなどの重要な新機能を、今後のリリースで追加できるように設計されてます。


Google Closure

OpenLayers は、Closure Compiler[クロージャコンパイラ]でコンパイルできるような方法で書かれました。その「高度な」コンパイルモードは、他の使用可能なものを超える圧縮レベルを提供します。


パブリック API

Closure Compiler の高度な最適化を使用することは、プロパティとメソッドの名前が変更され(longMeaningfulName が xB になる)、ライブラリを使用するアプリケーションで効果的に使用できないことを意味します。使用できるためには、それらが明示的にエクスポートされなければなりません。つまり、エクスポートされる名前は、名前は変更されず、効果的にライブラリのパブリック API になります。これらのエクスポート可能なプロパティとメソッドはソース内でマークされ、API ドキュメントに記載されます。これは、ライブラリの公式にサポートされている API です。これらのエクスポート可能な名前のすべてを含むビルドは、フルビルド[full build]として知られています。このホスト版は、すべてのアプリケーションで使用できます。


カスタムビルド

例えば、モジュールの書き出しがソースで固定される Node とは異なり、クロージャコンパイラを使用して、書き出しがコンパイル時に定義できます。これで特定のサイトまたはアプリケーションのニーズに合わせてカスタマイズされるビルドを簡単に作成することができます。:カスタムビルドはサイトまたはアプリケーションで必要なプロパティとメソッドを書き出すだけです。完全なビルドは大きく、新しい機能がAPIに追加されるにつれてさらに大きくなる可能性が高いため、サイトでは本番ソフトウェアのカスタムビルドを作成することをお勧めします。


レンダラとブラウザのサポート

現在、ライブラリは、2 つのレンダラ、Canvas と WebGLを含んでいます。 それらの両方は、タイル/イメージサーバからラスタデータとベクタデータの両方をサポートします。ただし、WebGL はラベルをサポートしていません。明らかに、Canvas をサポートするこれらのブラウザのみ、Canvas レンダラを使用できます。同様に、WebGL レンダラは、それらのデバイスと WebGL をサポートするブラウザでのみ使用できます。

OpenLayers は、HTML5 や ECMAScript 5 をサポートするすべての近代的なブラウザで動作します。これには、Chrome、Firefox、Safari、Edge が含まれます。Internet Explorer(バージョン9まで)や Android 4.x などの古いブラウザやプラットフォームでは、requestAnimationFrame と Element.prototype.classList のポリフィルが必要です。 KML形式を使用するには、URL に polyfill が必要です。

ライブラリは、デスクトップ/ノート パソコンとモバイルデバイスの両方で使用することを意図しています。


オブジェクトと名前付け規約

トップレベルの名前空間は ol (基本的には、var ol = {};)です。これの下位区分は次の通りです。

● 次の名前空間、ol.layer など、これらは小文字の頭文字を持ちます。
● 静的プロパティおよびメソッドを含む単純なオブジェクト、ol.easing など、これらも、同じように、小文字の頭文字を持ちます。
● 型[type]は、大文字の頭文字を持ちます。これらは主に 'クラス[class]'です。ここでは、ol.Map や ol.layer.Vector(レイヤ名前空間内の Vector クラス)など、プロトタイプの継承を持つコンストラクタ関数を意味します。しかし、配列である ol.Extent のような、他にもより単純な型があります。

ol.layer などのクラス名前空間には、ol.layer.Layer などの同じ名前の基本クラス型があります。これらは主に抽象クラスであり、そこから他のサブクラスが継承します。

ソースファイルも同様に整理され、各クラスの名前空間のディレクトリがあります。名前は、しかし、すべて小文字です。例えば、ol/layer/vector.js です。

OpenLayers は、プライベートプロパティとメソッドの名前、つまり API の一部ではない名前がアンダースコアで終わるという規約に従います。一般に、インスタンスプロパティはプライベートであり、アクセサを使用してアクセスされます。

OpenLayers4 Tutorials - 0

Tutorials
チュートリアル

ここでは、OpenLayers の Docs(Documentation[http://openlayers.org/en/latest/doc/])の「For a more in-depth overview of OpenLayers core concepts, check out the tutorials.」のリンク先にある「Tutorials(http://openlayers.org/en/latest/doc/tutorials/)」の各項目


● Introduction to OpenLayers
OpenLayers の紹介
● Basic Concepts
基本コンセプト
● Create Custom Builds
カスタムビルドの作成
● Bundle Application and OpenLayers using Browserify
Browserify を使用するアプリケーションとOpenLayers のバンドル
● Compile Application and OpenLayers together
アプリケーションと OpenLayers を一緒にコンパイルする
● Raster Reprojection
ラスタの再投影

を訳してみました。サイトに搭載されている画像などは使用していません。翻訳に迷ったところもありますので、参考にされる方はサイトと見比べて下さい。