2017年2月28日火曜日

2 - ol4.0ex 168b - Magnify 2

「magnify.js(2168-ol4ex.js)」は、マップを表示するための JavaScript ファイルです。

「2168-ol4ex.js」

var key = 'As1Hi...(省略)';
var imagery = new ol.layer.Tile({
/** ol.layer.Tile 
 * For layer sources that provide pre-rendered, tiled 
 * images in grids that are organized by zoom levels 
 * for specific resolutions. 
 * プリレンダリング(事前描画)を提供するレイヤソースのため
 * の、特定の解像度でのズームレベルによって編成されているグ
 * リッドのタイルイメージ。(ol4 API)
 */
 source: new ol.source.BingMaps({key: key, imagerySet: 'Aerial'})
 /** ol.source.BingMaps
  * Layer source for Bing Maps tile data.
  * Bing Maps タイルデータのレイヤソース。(ol4 API)
  */
});
var container = document.getElementById('map');

var map = new ol.Map({
 layers: [imagery],
 target: container,
 view: new ol.View({
  center: ol.proj.fromLonLat([-109, 46.5]),
  zoom: 6
 })
});
var radius = 75;
document.addEventListener('keydown', function(evt) {
/** EventTarget.addEventListener
 * The EventTarget.addEventListener() method registers 
 * the specified listener on the EventTarget it's called 
 * on. The event target may be an Element in a document, 
 * the Document itself, a Window, or any other object 
 * that supports events (such as XMLHttpRequest).
 * EventTarget.addEventListener() メソッドは、それが呼び
 * 出される EventTarget に指定されたリスナを登録します。イベ
 * ントターゲットは、ドキュメントの Element、Document 自身、
 * Window、または(XMLHttpRequest などの)イベントをサポート
 * している他のオブジェクトです。
 * (MDN[https://developer.mozilla.org/en-US/docs/Web/
 * API/EventTarget/addEventListener])
 */
 if (evt.which === 38) {
 /** KeyboardEvent.which [Deprecated]
  * The KeyboardEvent.which read-only property returns the 
  * numeric keyCode of the key pressed, or the character 
  * code (charCode) for an alphanumeric key pressed.
  * KeyboardEvent.which 読み取り専用プロパティは、押されたキー
  * の数値 keyCode、または、押された英数字キーの文字コード
  * (charCode)を返します。
  * (MDN[https://developer.mozilla.org/en-US/docs/Web/
  * API/KeyboardEvent/which])
  */
  radius = Math.min(radius + 5, 150);
  /** Math.min() 
   * 引数として与えた複数の数の中で最小の数を返します。
   * (MDN[https://developer.mozilla.org/ja/docs/Web/
   * JavaScript/Reference/Global_Objects/Math/min])
   */
  map.render();
  /** render()
   * Request a map rendering (at the next animation 
   * frame).
   * (次のアニメーションフレームで)map 描画を要求します。
   * (ol4 API)
   */
  evt.preventDefault();
  /** Event.preventDefault()
   * Cancels the event if it is cancelable, without 
   * stopping further propagation of the event.
   * イベントのさらなる伝播を停止させることなく、解約された場合
   * に、イベントをキャンセルします。
   * (MDN[https://developer.mozilla.org/en-US/docs/Web/
   * API/Event/preventDefault])
   */
 } else if (evt.which === 40) {
  radius = Math.max(radius - 5, 25);
  /** Math.max() 
   * 引数として与えた複数の数の中で最大の数を返します。
   * (MDN[https://developer.mozilla.org/ja/docs/Web/
   * JavaScript/Reference/Global_Objects/Math/max])
   */
  map.render();
  evt.preventDefault();
 }
});
// get the pixel position with every move
// 移動時毎にピクセル位置を取得
var mousePosition = null;
container.addEventListener('mousemove', function(event) {
 mousePosition = map.getEventPixel(event);
 /** getEventPixel()
  * Returns the map pixel position for a browser event 
  * relative to the viewport.
  * ビューポートと相対的な、ブラウザイベントに対しするマップのピ
  * クセル位置を返します。
  * (ol4 API)
  */
 map.render();
});
container.addEventListener('mouseout', function() {
 mousePosition = null;
 map.render();
});
// after rendering the layer, show an oversampled 
// version around the pointer
// レイヤをレンダリング後、ポインタの周囲にオーバーサンプルされ
// たバージョンを表示
imagery.on('postcompose', function(event) {
/** on(type, listener, opt_this)
 * Listen for a certain type of event.
 * あるタイプのイベントをリッスンします。(ol4 API)
 */
 if (mousePosition) {
  var context = event.context;
  var pixelRatio = event.frameState.pixelRatio;
  /** frameState{olx.FrameState}
   * The frame state at the time of the event.
   * イベント時のフレームの状態。(ol4 API)
   */
  var half = radius * pixelRatio;
  var centerX = mousePosition[0] * pixelRatio;
  var centerY = mousePosition[1] * pixelRatio;
  var originX = centerX - half;
  var originY = centerY - half;
  var size = 2 * half + 1;
  var sourceData = context.getImageData(originX, originY, size, size).data;
  /** CanvasRenderingContext2D.getImageData()
   * The CanvasRenderingContext2D.getImageData() method of 
   * the Canvas 2D API returns an ImageData object 
   * representing the underlying pixel data for the area 
   * of the canvas denoted by the rectangle which starts 
   * at (sx, sy) and has an sw width and sh height. This 
   * method is not affected by the canvas transformation 
   * matrix.
   * Canvas 2D API の 
   * CanvasRenderingContext2D.getImageData() 
   * メソッドは、(sx、sy)で始まりsw幅とsh高さを有している
   * 四角形で示される、キャンバス(canvas)の領域の基礎となる
   * ピクセルデータを表す ImageData オブジェクトを返します。
   * このメソッドは、canvas 変換行列の影響を受けません。
   * Syntax
   * ImageData ctx.getImageData(sx, sy, sw, sh);
   * (MDN[https://developer.mozilla.org/en-US/docs/Web/
   * API/CanvasRenderingContext2D/getImageData])
   */
  var dest = context.createImageData(size, size);
  /** CanvasRenderingContext2D.createImageData()
   * The CanvasRenderingContext2D.createImageData() 
   * method of the Canvas 2D API creates a new, blank 
   * ImageData object with the specified dimensions. 
   * All of the pixels in the new object are transparent 
   * black.
   * Canvas 2D APIの 
   * CanvasRenderingContext2D.createImageData()メソッド
   * は、指定された大きさで新しい、空白の ImageData オブジェ
   * クトを作成します。新しいオブジェクトの全ての画素は透明
   * な黒です。
   * (MDN[https://developer.mozilla.org/en-US/docs/Web/
   * API/CanvasRenderingContext2D/createImageData])
   */
  var destData = dest.data;
  for (var j = 0; j < size; ++j) {
   for (var i = 0; i < size; ++i) {
    var dI = i - half;
    var dJ = j - half;
    var dist = Math.sqrt(dI * dI + dJ * dJ);
    /** Math.sqrt()
     * 引数として与えた数の平方根を返します。
     * (MDN[https://developer.mozilla.org/ja/docs/Web/
     * JavaScript/Reference/Global_Objects/Math/sqrt])
     */
    var sourceI = i;
    var sourceJ = j;
    if (dist < half) {
     sourceI = Math.round(half + dI / 2);
     /** Math.round()
      * 引数として与えた数を四捨五入して、最も近似の整数を返しま
      * す。
      * (MDN[https://developer.mozilla.org/ja/docs/Web/
      * JavaScript/Reference/Global_Objects/Math/round])
      */
     sourceJ = Math.round(half + dJ / 2);
    }
    var destOffset = (j * size + i) * 4;
    var sourceOffset = (sourceJ * size + sourceI) * 4;
    destData[destOffset] = sourceData[sourceOffset];
    destData[destOffset + 1] = sourceData[sourceOffset + 1];
    destData[destOffset + 2] = sourceData[sourceOffset + 2];
    destData[destOffset + 3] = sourceData[sourceOffset + 3];
   }
  }
  context.beginPath();
  /** CanvasRenderingContext2D.beginPath()
   * The CanvasRenderingContext2D.beginPath() method of the 
   * Canvas 2D API starts a new path by emptying the list 
   * of sub-paths. Call this method when you want to create 
   * a new path.
   * Canvas 2D API の CanvasRenderingContext2D.beginPath() 
   * メソッドは、サブパスのリストを空にすることによって新しいパ
   * スを開始します。新しいパスを作成したいときに、このメソッド
   * を呼び出します。
   * (MDN[https://developer.mozilla.org/en-US/docs/Web/
   * API/CanvasRenderingContext2D/beginPath])
   */
  context.arc(centerX, centerY, half, 0, 2 * Math.PI);
  /** CanvasRenderingContext2D.arc() 
   * The CanvasRenderingContext2D.arc() method of the 
   * Canvas 2D API adds an arc to the path which is 
   * centered at (x, y) position with radius r starting at 
   * startAngle and ending at endAngle going in the given 
   * direction by anticlockwise (defaulting to clockwise).
   * Canvas 2D API の CanvasRenderingContext2D.arc() メ
   * ソッドは、半径 r の位置(x、y)を中心とする反時計回り(初
   * 期値は時計回り)に startAngle で始まり endAngle で終わる
   * 弧をパスに追加します。
   * (MDN[https://developer.mozilla.org/en-US/docs/Web/
   * API/CanvasRenderingContext2D/arc])
   */
  /** Math.PI()
   * 円周率。約 3.14159 です。
  * (MDN[https://developer.mozilla.org/ja/docs/Web
  * /JavaScript/Reference/Global_Objects/Math/PI])
  */
  context.lineWidth = 3 * pixelRatio;
  /** CanvasRenderingContext2D.lineWidth
   * The CanvasRenderingContext2D.lineWidth property of 
   * the Canvas 2D API sets the thickness of lines in 
   * space units. When getting, it returns the current 
   * value (1.0 by default). When setting, zero, negative, 
   * Infinity and NaN values are ignored; otherwise the 
   * current value is set to the new value.
   * Canvas 2D API の CanvasRenderingContext2D.lineWidth
   * プロパティは、空間単位で線の太さを設定します。取得する
   * と、現在の値(デフォルトでは1.0)を返します。設定時、 
   * ゼロ、負、無限大とNaN値は無視されます。それ以外の場合、
   * 現在の値は新しい値に設定されてます。
   * (MDN[https://developer.mozilla.org/en-US/docs/Web/
   * API/CanvasRenderingContext2D/lineWidth])
   */
  context.strokeStyle = 'rgba(255,255,255,0.5)';
  /** CanvasRenderingContext2D.strokeStyle
   * The CanvasRenderingContext2D.strokeStyle property of 
   * the Canvas 2D API specifies the color or style to 
   * use for the lines around shapes. The default is #000 
   * (black).
   * Canvas 2D APIのCanvasRenderingContext2D.strokeStyle
   * プロパティは、図形の外周の線に使用する色やスタイルを指定
   * します。デフォルトは#000(黒)です。
   * (MDN[https://developer.mozilla.org/en-US/docs/Web/
   * API/CanvasRenderingContext2D/strokeStyle])
   */
  context.putImageData(dest, originX, originY);
  /** CanvasRenderingContext2D.putImageData()
   * The CanvasRenderingContext2D.putImageData() method 
   * of the Canvas 2D API paints data from the given 
   * ImageData object onto the bitmap. If a dirty 
   * rectangle is provided, only the pixels from that 
   * rectangle are painted.
   * Canvas 2D API の 
   * CanvasRenderingContext2D.getImageData() 
   * メソッドは、与えられたの ImageData オブジェクトからビッ
   * トマップにデータをペイントします。汚れた矩形が提供される
   * 場合、その長方形のピクセルのみが描かれています。
   * Syntax
   * void ctx.putImageData(imagedata, dx, dy);
   * void ctx.putImageData(imagedata, dx, dy, dirtyX, 
   *  dirtyY, dirtyWidth, dirtyHeight);
   * (MDN[https://developer.mozilla.org/en-US/docs/Web/
   * API/CanvasRenderingContext2D/putImageData])
   */
  context.stroke();
  /** CanvasRenderingContext2D.stroke()
   * The CanvasRenderingContext2D.stroke() method of the 
   * Canvas 2D API strokes the current or given path with 
   * the current stroke style using the non-zero winding 
   * rule.
   * Canvas 2D APIのCanvasRenderingContext2D.stroke()
   * メソッドは、ノンゼロワインディング規則を使用して、現在
   * の線のスタイルを持つ現在または与えられたパスを引きます。
   * (MDN[https://developer.mozilla.org/en-US/docs/Web/
   * API/CanvasRenderingContext2D/stroke])
   */
  context.restore();
  /** CanvasRenderingContext2D.restore()
   * The CanvasRenderingContext2D.restore() method of the 
   * Canvas 2D API restores the most recently saved canvas 
   * state by popping the top entry in the drawing state 
   * stack. If there is no saved state, this method does 
   * nothing.
   * Canvas 2D API の CanvasRenderingContext2D.restore()
   * メソッドは、描画状態のスタックの一番上のエントリを抜き
   * 出すことによって、最後に保存されたキャンバスの状態を復
   * 元します。全く保存された状態が存在しない場合、このメソッ
   * ドは何もしません。
   * (MDN[https://developer.mozilla.org/en-US/docs/Web/
   * API/CanvasRenderingContext2D/restore])
   */
 }
});
 
 

2 - ol4.0ex 168a - Magnify 1

「Magnify(magnify.html) 」を参考に地図を表示してみます。
説明に次のようにあります。

This example makes use of the postcompose event listener to oversample imagery in a circle around the pointer location. Listeners for this event have access to the Canvas context and can manipulate image data.

Move around the map to see the effect. Use the ↑ up and ↓ down arrow keys to adjust the magnified circle size.

この例では、postcompose イベントリスナーを使用して、ポインタの位置を中心とする円のイメージをオーバーサンプリングします。 このイベントのリスナは Canvas コンテキストにアクセスでき、画像データを操作できます。

地図を移動してその効果を確認します。 拡大した円のサイズを調整するには、↑上および↓下矢印キーを使用します。

HTML ファイルの作成
a Eclipse のメニューの「ファイル」->「ファイルを開く」をクリックします。




b 「ファイルを開く」ウィンドウで、「user」->「workspace」->「ol4proj」->「v4.0.1」->「examples」->「magnify.html」をクリックして選択し、「OK」ボタンをクリックします。
同じように「magnify.js」を開きます。





c メニューの「ファイル」->「新規」 -> 「ファイル」をクリックします。




d 「ファイル」ウィンドウで「ol4proj」->「v4.0.1」->「examples」をクリックして選択し、「ファイル名」を「2168-ol4ex.html」と入力し、「完了」ボタンをクリックします。
(「ファイル」->「新規」->「その他」をクリックし、「ウィザードを選択」ダイアログで「Web」->「HTMLファイル」からテンプレートも作成できます。)






e 「magnify.html」の内容をコピーして「2168-ol4ex.html」に貼り付け、修正します。

f 同じように、新規に「2168-ol4ex.js」ファイルを作成し、「magnify.js」の内容をコピーして貼り付け、修正します。「magnify-require.js」も「2168-ol4ex-require.js」に貼り付けます。
(「ファイル」->「新規」->「JavaScript ソース・ファイル」をクリックし、「新規 JavaScript ファイル」ダイアログでテンプレートも作成できます。)






「2168-ol3ex.html」
<!DOCTYPE html>
<html lang="en-US">
 <head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=Edge">
  <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
  <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css" type="text/css">
  <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" type="text/css">
  <link rel="stylesheet" href="./resources/prism/prism.css" type="text/css">
  <link rel="stylesheet" href="../css/ol.css" type="text/css">
  <link rel="stylesheet" href="./resources/layout.css" type="text/css">
    
  <script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=fetch,requestAnimationFrame,Element.prototype.classList,URL"></script>
  <script src="./resources/zeroclipboard/ZeroClipboard.min.js"></script>
  <title>Magnify</title>
 </head>
 <body>
  <!-- 
  bootstrap-combined.min.css, ol.css, layout.css,
  CSSファイルで設定されたセレクタを使用。
  -->
  <header class="navbar" role="navigation">
   <div class="container">
    <div class="display-table pull-left" id="navbar-logo-container">
     <a class="navbar-brand" href="./"><img src="./resources/logo-70x70.png"> OpenLayers Examples</a>
    </div>
    <!-- menu items that get hidden below 768px width -->
    <nav class='collapse navbar-collapse navbar-responsive-collapse'>
     <ul class="nav navbar-nav pull-right">
      <li><a href="../doc">Docs</a></li>
      <li><a class="active" href="index.html">Examples</a></li>
      <li><a href="../apidoc">Docs</a></li>
      <li><a href="https://github.com/openlayers/ol3">Code</a></li>
     </ul>
    </nav>
   </div>
  </header>
  <div class="container-fluid">
   <div id="latest-check" class="alert alert-warning alert-dismissible" role="alert" style="display:none">
    <button id="latest-dismiss" type="button" class="close" data-dismiss="alert" aria-label="Close">
     <span aria-hidden="true">&times;</span>
    </button>
     This example uses OpenLayers v<span>4.0.1</span>. 
     The <a id="latest-link" href="#" class="alert-link">latest</a>
     is v<span id="latest-version"></span>.
   </div>
   <div class="row-fluid">
    <div class="span12">
     <h4 id="title">Magnify</h4>
     <div id="map" class="map"></div>
    </div>
   </div>
   <div class="row-fluid">
    <div class="span12">
     <p id="shortdesc">Show a magnified version of imager 
      under the pointer</p>
     <div id="docs"><p>This example makes use of the 
      <code>postcompose</code> event listener to 
      oversample imagery in a circle around the pointer 
      location.  Listeners for this event have access to 
      the Canvas context and can manipulate image data.</p> 
      <p>Move around the map to see the effect.  Use the 
      ↑ up and ↓ down arrow keys to adjust the magnified 
      circle size.</p>
     </div>
     <div id="api-links">Related API documentation: 
      <ul class="inline">
       <li>
        <a href="../apidoc/ol.Map.html" title="API documentation for ol.Map">ol.Map</a>
       </li>,
       <li>
        <a href="../apidoc/ol.View.html" title="API documentation for ol.View">ol.View</a>
       </li>,
       <li>
        <a href="../apidoc/ol.layer.Tile.html" title="API documentation for ol.layer.Tile">ol.layer.Tile</a>
       </li>,
       <li>
        <!-- <a href="../apidoc/ol.proj.html" title="API documentation for ol.proj">ol.proj</a>
       </li>,
       <li>
        <a href="../apidoc/ol.source.BingMaps.html" title="API documentation for ol.source.BingMaps">ol.source.BingMaps</a>
       </li>
      </ui>
     </div>
    </div>
   </div>
   <div class="row-fluid">
    <div id="source-controls">
     <a id="copy-button">
      <i class="fa fa-clipboard"></i> Copy
     </a>
     <a id="jsfiddle-button">
      <i class="fa fa-jsfiddle"></i> Edit
     </a>
    </div>
    <form method="POST" id="jsfiddle-form" target="_blank" action="https://codepen.io/pen/define/">
     <textarea class="hidden" name="title">Magnify</textarea>
     <textarea class="hidden" name="description">Show a magnified version of imager under the pointer</textarea>
     <textarea class="hidden" name="js">
// --- 省略 ---
&lt;/html&gt;</code></pre>
   </div>
  </div>
  <script src="./resources/common.js"></script>
  <script src="./resources/prism/prism.min.js"></script>
  <!-- 
  <script src="loader.js?id=magnify"></script>
  -->
  <!-- ファイル修正 -->  <!-- ディレクトリ修正 -->
  <script src="loader.js?id=2168-ol4ex"></script>
 </body>
 <script>
  var packageUrl = 'https://raw.githubusercontent.com/openlayers/openlayers.github.io/build/package.json';
  fetch(packageUrl).then(function(response) {
  /** GlobalFetch.fetch()(This is an experimental technology)
   * The fetch() method of the GlobalFetch interface 
   * starts the process of fetching a resource. This 
   * returns a promise that resolves to the Response 
   * object representing the response to your request.
   * GlobalFetch インタフェースの fetch() メソッドは、リソー
   * スを取得する処理を開始します。これは要求に対する応答を表す 
   * Response オブジェクトに解決のプロミス(promise)を返しま
   * す。
   *(MDN[https://developer.mozilla.org/ja/docs/Web/API/
   * FGlobalFetch/fetch])
   */
   return response.json();
   /** Response(This is an experimental technology)
    * The Response interface of the Fetch API represents 
    * the response to a request.
    * Fetch API の Response インタフェースは、要求に対する応答
    * を表します。
    * (MDN[https://developer.mozilla.org/en-US/docs/Web/
    * API/Response])
    */
   /** Body.json()(This is an experimental technology)
    * The json() method of the Body mixin takes a Response 
    * stream and reads it to completion. It returns a 
    * promise that resolves with an object literal 
    * containing the JSON data.
    * Body mixin の json() メソッドは、Response ストリームを
    * 受け取り、それを完了させるために読み込みます。これは、
    * JSON データを含むオブジェクトリテラルで解決する約束
    * (promisee)を返します。
    * (MDN[https://developer.mozilla.org/en-US/docs/Web/
    * API/Body/json])
    */
  }).then(function(json) {
   var latestVersion = json.version;
   document.getElementById('latest-version').innerHTML = latestVersion;
   var url = window.location.href;
   var branchSearch = url.match(/\/([^\/]*)\/examples\//);
   /** String.prototype.match()
    * 正規表現 に対する 文字列 のマッチングの際に、そのマッチ結
    * 果を得るために使われます。
    * (MDN[https://developer.mozilla.org/ja/docs/Web/
    * JavaScript/Reference/Global_Objects/String/match])
    */
   var cookieText = 'dismissed=-' + latestVersion + '-';
   var dismissed = document.cookie.indexOf(cookieText) != -1;
   /** String.prototype.indexOf()
    * 呼び出す String オブジェクト 中で、指定された値が最初に現
    * れたインデックスを返します。fromIndex から検索を始め、値が
    * 見つからない場合は -1 を返します。
    * (MDN[https://developer.mozilla.org/ja/docs/Web/
    * JavaScript/Reference/Global_Objects/String/indexOf])
    */
   if (!dismissed && /^v[0-9\.]*$/.test(branchSearch[1]) && '3.16.0' != latestVersion) {
    var link = url.replace(branchSearch[0], '/latest/examples/');
    /** Location.replace()
     * The Location.replace() method replaces the current 
     * resource with the one at the provided URL. The 
     * difference from the assign() method is that after 
     * using replace() the current page will not be saved 
     * in session History, meaning the user won't be able 
     * to use the back button to navigate to it.
     * 指定された URL に現在の文書を置き換えます。 assign() メ
     * ソッドとの違いは、replace() を用いた後、現在のページは、
     * セッションの履歴には保持されないことです。つまり、ユーザ
     * は、置き換え前のページに戻るために、戻るボタンを使うこと
     * ができません。
     * (MDN[https://developer.mozilla.org/en-US/docs/Web/
     * API/Location/replace])
     */
    fetch(link, {method: 'head'}).then(function(response) {
     var a = document.getElementById('latest-link');
     a.href = response.status == 200 ? link : '../../latest/examples/';
     /** Response.status(This is an experimental technology)
      * The status read-only property of the Response 
      * interface contains the status code of the response 
      * (e.g., 200 for a success).
      * Response インタフェースの status 読み取り専用プロパティ
      * は、応答のステータス・コード(例えば、成功のために 200)
      * を含みます。
     * (MDN[https://developer.mozilla.org/en-US/docs/Web/
     * API/Response/status])
      */
    });
    var latestCheck = document.getElementById('latest-check');
    latestCheck.style.display = '';
    document.getElementById('latest-dismiss').onclick = function() {
     latestCheck.style.display = 'none';
     document.cookie = cookieText;
    }
   }
  });
 </script>
</html>


COMMONJS は

COMMONJS
http://webpack.github.io/docs/commonjs.html

に、次のようにあります。

The CommonJS group defined a module format to solve JavaScript scope issues by making sure each module is executed in its own namespace.
This is achieved by forcing modules to explicitly export those variables it wants to expose to the “universe”, and also by defining those other modules required to properly work.
To achieve this CommonJS give you two tools:
the require() function, which allows to import a given module into the current scope.
the module object, which allows to export something from the current scope.

CommonJSグループは、それ自身の名前空間内で実行されている各モジュールを確認することによって、JavaScriptのスコープ問題を解決するためのモジュールフォーマットを定義しました。
これは、それが「universe(?)」に公開したい変数を明示的にエクスポートするモジュールを強制することによって、同じように、正常に動作するのに必要な他のモジュールを定義することによって、達成されます。
この CommonJS を達成するために2つのツールを与えます:
require()関数、指定したモジュールを現在のスコープにインポートすることができます。
モジュールオブジェクト、現在のスコープからエクスポートすることができます。


Prism は、

Prism
http://prismjs.com/

に、次のようにあります。

Prism is a lightweight, extensible syntax highlighter, built with modern web standards in mind. It’s a spin-off from Dabblet and is tested there daily by thousands.
Prismは、最新のWeb標準に構築されたことを考慮し軽量で拡張可能なシンタックスハイライトです。それは Dabblet からスピンオフで、何千人も日々そこで試験されています。


ZeroClipboard は

ZeroClipboard v2.x
http://zeroclipboard.org/

に、次のようにあります。

The ZeroClipboard library provides an easy way to copy text to the clipboard using an invisible Adobe Flash movie and a JavaScript interface.
ZeroClipboard ライブラリは、見えない Adobe Flash ムービーとJavaScript のインターフェイスを使用してテキストをクリップボードにコピーする簡単な方法を提供します。

Debian 8 では動作しませんでした。ボタンを右クリックしたときに flash のコンテキストメニューが表示されると動作しています。

2 - ol4.0ex 167b - Hit Tolerance 2

「hit-tolerance.js(2167-ol4ex.js)」は、マップを表示するための JavaScript ファイルです。

「2167-ol4ex.js」
var raster = new ol.layer.Tile({
 /** ol.layer.Tile 
  * For layer sources that provide pre-rendered, tiled 
  * images in grids that are organized by zoom levels 
  * for specific resolutions. 
  * プリレンダリング(事前描画)を提供するレイヤソースのため
  * の、特定の解像度でのズームレベルによって編成されているグ
  * リッドのタイルイメージ。(ol4 API)
  */
 source: new ol.source.OSM()
 /** ol.source.OSM 
  * Layer source for the OpenStreetMap tile server.
  * OpenStreetMap タイルサーバのレイヤソース。(ol4 API)
  */
});
var style = new ol.style.Style({
/** ol.style.Style 
 * Container for vector feature rendering styles. Any 
 * changes made to the style or its children through 
 * set*() methods will not take effect until the feature 
 * or layer that uses the style is re-rendered.
 * ベクタフィーチャがスタイルを描画するためのコンテナ。
 * スタイルや set*() メソッドを通じてその子に加えられた変
 * 更は、スタイルを使用するフィーチャまたはレイヤが再レン
 * ダリングされるまで有効になりません。
 * (ol4 API)
 */
 stroke: new ol.style.Stroke({
 /** ol.style.Stroke 
  * Set stroke style for vector features. 
  * Note that the defaults given are the Canvas defaults, 
  * which will be used if option is not defined. 
  * The get functions return whatever was entered 
  * in the options;  they will not return the default.
  * ベクタフィーチャのためのストロークスタイルの設定。
  * デフォルトは、オプションが定義されていない場合に使用さ
  * れる Canvas のデフォルトを与えられることに注意してくだ
  * さい。get 関数は、オプションで入力されたものはすべて返
  * します。それらはデフォルトを返しません。
  * (ol4 API)
  */
  color: 'black',
  /** color:
   * A color, gradient or pattern. See ol.color and 
   * ol.colorlike for possible formats. Default null; 
   * if null, the Canvas/renderer default black will 
   * be used.
   * 色、グラデーションまたはパターン。可能なフォーマットの対
   * する ol.color と oil.color を参照してください。デフォル
   * トは null; null の場合は、Canvas/renderer デフォルトの
   * 黒が使用されます。
   * (ol4 API)
   */
  width: 1
 })
});
var feature = new ol.Feature(new ol.geom.LineString([[-4000000, 0], [4000000, 0]]));
/** ol.Feature
 * A vector object for geographic features with a 
 * geometry and other attribute properties, similar 
 * to the features in vector file formats like 
 * GeoJSON.
 * GeoJSONのようなベクトルファイル形式のフィーチャに類
 * 似した、ジオメトリとその他の属性プロパティを持つ地物
 * フィーチャのためのベクトルオブジェクト。(ol4 API)
 */
/** ol.geom.LineString
 * Linestring geometry.(ol4 API)
 */
var vector = new ol.layer.Vector({
/** ol.layer.Vector
 * Vector data that is rendered client-side.
 * クライアント側で描画されるベクタデータ。(ol4 API)
 */
 source: new ol.source.Vector({
 /** ol.source.Vector
  * Provides a source of features for vector layers. 
  * Vector features provided by this source are suitable 
  * for editing. See ol.source.VectorTile for vector 
  * data that is optimized for rendering.
  * ベクタレイヤのフィーチャのソースを用意します。このソース
  * が提供するベクタフィーチャは、編集に適しています。レンダ
  * リングのために最適化されたベクタデータの 
  * ol.source.VectorTile を参照してください。(ol4 API)
  */
  features: [feature]
  /** features:
   * Features. If provided as ol.Collection, the features 
   * in the source and the collection will stay in sync.
   * フィーチャ。 ol.Collectionとして提供されている場合、ソー
   * スとコレクションのフィーチャは同期しています。(ol4 API)
   */
 }),
 style: style
});
var map = new ol.Map({
 layers: [raster, vector],
 target: 'map',
 view: new ol.View({
  center: [0, 0],
  zoom: 2
 })
});
var hitTolerance;

var statusElement = document.getElementById('status');
map.on('singleclick', function(e) {
/** on(type, listener, opt_this)
 * Listen for a certain type of event.
 * あるタイプのイベントをリッスンします。(ol4 API)
 */
 var hit = false;
 map.forEachFeatureAtPixel(e.pixel, function() {
 /** forEachFeatureAtPixel(pixel, callback, opt_this)
  * Detect features that intersect a pixel on the viewport, 
  * and execute a callback with each intersecting feature. 
  * Layers included in the detection can be configured 
  * through opt_layerFilter. 
  * ビューポート上のピクセルと交差するフィーチャを検出し、互
  * いに交差するフィーチャと共にコールバックを実行します。
  * 検出に含まれるレイヤが opt_layerFilter を通じて設定する
  * ことができます。(ol4 API)
  */
  hit = true;
 }, {
  hitTolerance: hitTolerance
  /** hitTolerance:
   * Hit-detection tolerance in pixels. Pixels inside the 
   * radius around the given position will be checked for 
   * features. This only works for the canvas renderer and 
   * not for WebGL. Default is 0.
   * Hit-detection の許容差(ピクセル単位)。 指定された位置を
   * 中心とした半径内のピクセルがフィーチャのチェックに使われま 
   * す。canvas レンダラのみで、WebGLでは使用できません。 デ
   * フォルトは0です。(ol4 API)
   */
 });
 if (hit) {
  style.getStroke().setColor('green');
  /** getStroke()
   * Get the stroke style.(ol4 API)
   */
  /** setColor(color)
   * Set the color.(ol4 API)
   */
  statusElement.innerHTML = ' A feature got hit!';
  /** Element.innerHTML
   * The Element.innerHTML property sets or gets the HTML 
   * syntax describing the element's descendants.
   * Element.innerHTMLプロパティは、要素(element)の子孫を説
   * 明する HTML 構文を設定、または、取得します。
   * (MDN[https://developer.mozilla.org/en-US/docs/Web/
   * API/Element/innerHTML])
   */
 } else {
  style.getStroke().setColor('black');
  statusElement.innerHTML = ' No feature got hit.';
 }
 feature.changed();
 /** changed()
  * Increases the revision counter and dispatches a 'change' 
  * event.
  * リビジョンカウンタを増派し、 「change」イベントを送出します。
  * (ol4 API)
  */
});
var selectHitToleranceElement = document.getElementById('hitTolerance');
var circleCanvas = document.getElementById('circle');
var changeHitTolerance = function() {
 hitTolerance = parseInt(selectHitToleranceElement.value, 10);
 /** parseInt(string, radix)
  * string: 文字列, radix: 基数(進法)
  * parseInt()関数は、第1引数の文字列を解析(パース)し、第2引数
  * に与えられた基数(数学的記数法の底)にもとづく整数を返します。
  * (MDN[https://developer.mozilla.org/ja/docs/Web/
  * JavaScript/Reference/Global_Objects/parseInt])
  */
 var size = 2 * hitTolerance + 2;
 circleCanvas.width = size;
 circleCanvas.height = size;
 var ctx = circleCanvas.getContext('2d');
 /** HTMLCanvasElement.getContext()
  * The HTMLCanvasElement.getContext() method returns a 
  * drawing context on the canvas, or null if the 
  * context identifier is not supported.
  * HTMLCanvasElement.getContext()メソッドは、キャンバ
  * ス上の描画コンテキストを返すか、または コンテキスト識別
  * 子がサポートされていない場合、null を返します。
  * contextType Is a DOMString containing the context 
  * identifier defining the drawing context associated 
  * to the canvas.
  * "2d", leading to the creation of a 
  * CanvasRenderingContext2D object representing a 
  * two-dimensional rendering context.
  * contextTypeは canvas に関連する描画コンテキストを定義
  * するコンテキスト識別子を含む DOMString  です。
  * 「2d」、二次元のレンダリングコンテキストを表す
  * CanvasRenderingContext2D オブジェクトの作成につなが
  * ります。
  * (MDN[https://developer.mozilla.org/en-US/docs/Web/
  * API/HTMLCanvasElement/getContext])
  */
 ctx.clearRect(0, 0, size, size);
 /** CanvasRenderingContext2D.clearRect()
  * The CanvasRenderingContext2D.clearRect() method of the 
  * Canvas 2D API sets all pixels in the rectangle defined 
  * by starting point (x, y) and size (width, height) to 
  * transparent black, erasing any previously drawn content.
  * Canvas 2D APIのCanvasRenderingContext2D.clearRect() 
  * メソッドは、開始点(x、y)とサイズ(幅、高さ)で定義された
  * 矩形のすべてのピクセルを、以前に描画された内容を透過な黒に
  * するように設定します。
  * (MDN[https://developer.mozilla.org/en-US/docs/Web/API/
  * CanvasRenderingContext2D/clearRect])
  */
 ctx.beginPath();
 /** CanvasRenderingContext2D.beginPath()
  * The CanvasRenderingContext2D.beginPath() method of the 
  * Canvas 2D API starts a new path by emptying the list of 
  * sub-paths. Call this method when you want to create a 
  * new path.
  * Canvas 2D APIのCanvasRenderingContext2D.beginPath() 
  * メソッドは、サブパスのリストを空にして新しいパスを開始しま
  * す。新しいパスを作成する場合は、このメソッドを呼び出します。
  * (MDN[https://developer.mozilla.org/en-US/docs/Web/API/
  * CanvasRenderingContext2D/beginPath])
  */
 ctx.arc(hitTolerance + 1, hitTolerance + 1, hitTolerance + 0.5, 0, 2 * Math.PI);
 /** CanvasRenderingContext2D.arc()
  * The CanvasRenderingContext2D.arc() method of the Canvas 
  * 2D API adds an arc to the path which is centered at 
  * (x, y) position with radius r starting at startAngle and 
  * ending at endAngle going in the given direction by 
  * anticlockwise (defaulting to clockwise).
  * 
  * void ctx.arc(x, y, radius, startAngle, endAngle, 
  * anticlockwise);
  * x: The x coordinate of the arc's center.
  * y: The y coordinate of the arc's center.
  * radius: The arc's radius.
  * startAngle: The angle at which the arc starts, measured 
  *  clockwise from the positive x axis and expressed in 
  *  radians.
  * endAngle: The angle at which the arc ends, measured 
  *  clockwise from the positive x axis and expressed in 
  *  radians.
  * anticlockwise: Optional An optional Boolean which, if 
  *  true, causes the arc to be drawn counter-clockwise 
  *  between the two angles. By default it is drawn 
  *  clockwise.
  *  
  * Canvas 2D APIのCanvasRenderingContext2D.arc()メソッ
  * ドは、startAngleで始まりendAngleで終わる半径rの(x、y)位
  * 置を中心にしたパスに反時計回り(デフォルトは時計回り)に円
  * 弧を追加します。 
  * (MDN[https://developer.mozilla.org/en-US/docs/Web/API/
  * CanvasRenderingContext2D/arc])
  */
 ctx.fill();
 /** CanvasRenderingContext2D.fill()
  * The CanvasRenderingContext2D.fill() method of the 
  * Canvas 2D API fills the current or given path with the 
  * current fill style using the non-zero or even-odd 
  * winding rule.
  * Canvas 2D APIのCanvasRenderingContext2D.fill() メソッド
  * は、現在の、または、指定されたパスを、非ゼロ、または、奇数
  * のワインディングルールを使用して現在の塗りつぶしスタイルで
  * 塗りつぶします。
  * (MDN[https://developer.mozilla.org/en-US/docs/Web/API/
  * CanvasRenderingContext2D/fill])
  */
 ctx.stroke();
 /** CanvasRenderingContext2D.stroke()
  * The CanvasRenderingContext2D.stroke() method of the 
  * Canvas 2D API strokes the current or given path with the 
  * current stroke style using the non-zero winding rule.
  * Canvas 2D APIのCanvasRenderingContext2D.stroke() メソッド
  * は、非ゼロのワインディングルールを使用して、現在の、または、
  * 指定されたパスを現在のストロークスタイルでストロークします。
  * (MDN[https://developer.mozilla.org/en-US/docs/Web/API/
  * CanvasRenderingContext2D/stroke])
  */
};
selectHitToleranceElement.onchange = changeHitTolerance;
/** GlobalEventHandlers.onchange()
 * The onchange property sets and returns the event handler 
 * for the change event.
 * onchange プロパティは、change イベントに対してイベントハ
 * ンドラを設定、および、返します。
 * (MDN[https://developer.mozilla.org/en-US/docs/Web/
 * API/GlobalEventHandlers/onchange])
 */
changeHitTolerance();
 

2 - ol4.0ex 167a - Hit Tolerance 1

「Hit Tolerance(hit-tolerance.html)」を参考に地図を表示してみます。
説明に次のようにあります。

By default, the map.forEachFeatureAtPixel() function only considers features that are directly under the provided pixel. This can make it difficult to interact with features on touch devices. To consider features within some distance of the provided pixel, use the hitTolerance option. For example, map.forEachFeatureAtPixel(pixel, callback, {hitTolerance: 3}) will call the callback with all features that are within three pixels of the provided pixel.

デフォルトでは、map.forEachFeatureAtPixel() 関数は、直接、提供されたピクセルを元としたフィーチャを考慮します。 これは、タッチデバイス上のフィーチャと対話することを困難にする可能性があります。 提供されたピクセルのある距離内のフィーチャを検討するには、hitTolerance オプションを使用します。 たとえば、map.forEachFeatureAtPixel(pixel、callback、{hitTolerance:3}) は、提供されたピクセルの3ピクセル内にあるすべてのフィーチャを使用して callback を呼び出します。

HTML ファイルの作成
a Eclipse のメニューの「ファイル」->「ファイルを開く」をクリックします。




b 「ファイルを開く」ウィンドウで、「user」->「workspace」->「ol4proj」->「v4.0.1」->「examples」->「hit-tolerance.html」をクリックして選択し、「OK」ボタンをクリックします。
同じように「hit-tolerance.js」を開きます。





c メニューの「ファイル」->「新規」 -> 「ファイル」をクリックします。




d 「ファイル」ウィンドウで「ol4proj」->「v4.0.1」->「examples」をクリックして選択し、「ファイル名」を「2167-ol4ex.html」と入力し、「完了」ボタンをクリックします。
(「ファイル」->「新規」->「その他」をクリックし、「ウィザードを選択」ダイアログで「Web」->「HTMLファイル」からテンプレートも作成できます。)






e 「geojson-vt.html」の内容をコピーして「2166-ol4ex.html」に貼り付け、修正します。

f 同じように、新規に「2167-ol4ex.js」ファイルを作成し、「hit-tolerance.js」の内容をコピーして貼り付け、修正します。「hit-tolerance-require.js」も「2167-ol4ex-require.js」に貼り付けます。
(「ファイル」->「新規」->「JavaScript ソース・ファイル」をクリックし、「新規 JavaScript ファイル」ダイアログでテンプレートも作成できます。)






「2167-ol3ex.html」
<!DOCTYPE html>
<html lang="en-US">
 <head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=Edge">
  <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
  <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css" type="text/css">
  <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" type="text/css">
  <link rel="stylesheet" href="./resources/prism/prism.css" type="text/css">
  <link rel="stylesheet" href="../css/ol.css" type="text/css">
  <link rel="stylesheet" href="./resources/layout.css" type="text/css">
    
  <script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=fetch,requestAnimationFrame,Element.prototype.classList,URL"></script>
  <script src="./resources/zeroclipboard/ZeroClipboard.min.js"></script>
  <title>Hit Tolerance</title>
 </head>
 <body>
  <!-- 
  bootstrap-combined.min.css, ol.css, layout.css,
  CSSファイルで設定されたセレクタを使用。
  -->
  <header class="navbar" role="navigation">
   <div class="container">
    <div class="display-table pull-left" id="navbar-logo-container">
    <a class="navbar-brand" href="./"><img src="./resources/logo-70x70.png"> OpenLayers Examples</a>
   </div>
    <!-- menu items that get hidden below 768px width -->
    <nav class='collapse navbar-collapse navbar-responsive-collapse'>
     <ul class="nav navbar-nav pull-right">
      <li><a href="../doc">Docs</a></li>
      <li><a class="active" href="index.html">Examples</a></li>
      <li><a href="../apidoc">Docs</a></li>
      <li><a href="https://github.com/openlayers/ol3">Code</a></li>
     </ul>
    </nav>
   </div>
  </header>
  <div class="container-fluid">
   <div id="latest-check" class="alert alert-warning alert-dismissible" role="alert" style="display:none">
    <button id="latest-dismiss" type="button" class="close" data-dismiss="alert" aria-label="Close">
     <span aria-hidden="true">&times;</span>
    </button>
     This example uses OpenLayers v<span>4.0.1</span>. 
     The <a id="latest-link" href="#" class="alert-link">latest</a>
     is v<span id="latest-version"></span>.
   </div>
   <div class="row-fluid">
    <div class="span12">
     <h4 id="title">Hit Tolerance</h4>
     <div id="map" class="map"></div>
      <form class="form-inline">
       <span id="status"> No feature got hit.</span>
       <br />
       <label>Hit tolerance for selecting features </label>
       <select id="hitTolerance" class="form-control">
        <option value="0" selected>0 Pixels</option>
        <option value="5">5 Pixels</option>
        <option value="10">10 Pixels</option>
       </select>
       <br />
       Area:  <canvas id="circle" style="vertical-align: middle"/>
      </form>
    </div>
   </div>
   <div class="row-fluid">
    <div class="span12">
     <p id="shortdesc">Example using the hitTolerance 
      parameter.</p>
     <div id="docs"><p>By default, the 
      map.forEachFeatureAtPixel() function only considers 
      features that are directly under the provided pixel. 
      This can make it difficult to interact with features 
      on touch devices. To consider features within some 
      distance of the provided pixel, use the hitTolerance 
      option. For example, map.forEachFeatureAtPixel(pixel, 
      callback, {hitTolerance: 3}) will call the callback 
      with all features that are within three pixels of the 
      provided pixel.</p>
     </div>
     <div id="api-links">Related API documentation: 
      <ul class="inline">
       <li>
        <a href="../apidoc/ol.Map.html" title="API documentation for ol.Map">ol.Map</a>
       </li>,
       <li>
        <a href="../apidoc/ol.View.html" title="API documentation for ol.View">ol.View</a>
       </li>,
       <li>
        <a href="../apidoc/ol.layer.Tile.html" title="API documentation for ol.layer.Tile">ol.layer.Tile</a>
       </li>,
       <li>
        <a href="../apidoc/ol.layer.VectorTile.html" title="API documentation for ol.layer.VectorTile">ol.layer.VectorTile</a>
       </li>,
       <li>
        <a href="../apidoc/ol.source.OSM.html" title="API documentation for ol.source.OSM">ol.source.OSM</a>
       </li>,
       <li>
        <a href="../apidoc/ol.source.Vector.html" title="API documentation for ol.source.Vector">ol.source.Vector</a>
       </li>,
       <li>
        <a href="../apidoc/ol.Feature.html" title="API documentation for ol.Feature">ol.Feature</a>
       </li>,
       <li>
        <!-- <a href="../apidoc/ol.geom.LineString.html" title="API documentation for ol.geom.LineString">ol.geom.LineString</a>
       </li>,
       <li>
        <!-- <a href="../apidoc/ol.style.Stroke.html" title="API documentation for ol.style.Stroke">ol.style.Stroke</a>
       </li>
      </ui>
     </div>
    </div>
   </div>
   <div class="row-fluid">
    <div id="source-controls">
     <a id="copy-button">
      <i class="fa fa-clipboard"></i> Copy
     </a>
     <a id="jsfiddle-button">
      <i class="fa fa-jsfiddle"></i> Edit
     </a>
    </div>
    <form method="POST" id="jsfiddle-form" target="_blank" action="https://codepen.io/pen/define/">
     <textarea class="hidden" name="title">Hit Tolerance</textarea>
     <textarea class="hidden" name="description">Example using the hitTolerance parameter.</textarea>
     <textarea class="hidden" name="js">
// --- 省略 ---
&lt;/html&gt;</code></pre>
   </div>
  </div>
  <script src="./resources/common.js"></script>
  <script src="./resources/prism/prism.min.js"></script>
  <!-- 
  <script src="loader.js?id=hit-tolerance"></script>
  -->
  <!-- ファイル修正 -->  <!-- ディレクトリ修正 -->
  <script src="loader.js?id=2167-ol4ex"></script>
 </body>
 <script>
  var packageUrl = 'https://raw.githubusercontent.com/openlayers/openlayers.github.io/build/package.json';
  fetch(packageUrl).then(function(response) {
  /** GlobalFetch.fetch()(This is an experimental technology)
   * The fetch() method of the GlobalFetch interface 
   * starts the process of fetching a resource. This 
   * returns a promise that resolves to the Response 
   * object representing the response to your request.
   * GlobalFetch インタフェースの fetch() メソッドは、リソー
   * スを取得する処理を開始します。これは要求に対する応答を表す 
   * Response オブジェクトに解決のプロミス(promise)を返しま
   * す。
   *(MDN[https://developer.mozilla.org/ja/docs/Web/API/
   * FGlobalFetch/fetch])
   */
   return response.json();
   /** Response(This is an experimental technology)
    * The Response interface of the Fetch API represents 
    * the response to a request.
    * Fetch API の Response インタフェースは、要求に対する応答
    * を表します。
    * (MDN[https://developer.mozilla.org/en-US/docs/Web/
    * API/Response])
    */
   /** Body.json()(This is an experimental technology)
    * The json() method of the Body mixin takes a Response 
    * stream and reads it to completion. It returns a 
    * promise that resolves with an object literal 
    * containing the JSON data.
    * Body mixin の json() メソッドは、Response ストリームを
    * 受け取り、それを完了させるために読み込みます。これは、
    * JSON データを含むオブジェクトリテラルで解決する約束
    * (promisee)を返します。
    * (MDN[https://developer.mozilla.org/en-US/docs/Web/
    * API/Body/json])
    */
  }).then(function(json) {
   var latestVersion = json.version;
   document.getElementById('latest-version').innerHTML = latestVersion;
   var url = window.location.href;
   var branchSearch = url.match(/\/([^\/]*)\/examples\//);
   /** String.prototype.match()
    * 正規表現 に対する 文字列 のマッチングの際に、そのマッチ結
    * 果を得るために使われます。
    * (MDN[https://developer.mozilla.org/ja/docs/Web/
    * JavaScript/Reference/Global_Objects/String/match])
    */
   var cookieText = 'dismissed=-' + latestVersion + '-';
   var dismissed = document.cookie.indexOf(cookieText) != -1;
   /** String.prototype.indexOf()
    * 呼び出す String オブジェクト 中で、指定された値が最初に現
    * れたインデックスを返します。fromIndex から検索を始め、値が
    * 見つからない場合は -1 を返します。
    * (MDN[https://developer.mozilla.org/ja/docs/Web/
    * JavaScript/Reference/Global_Objects/String/indexOf])
    */
   if (!dismissed && /^v[0-9\.]*$/.test(branchSearch[1]) && '3.16.0' != latestVersion) {
    var link = url.replace(branchSearch[0], '/latest/examples/');
    /** Location.replace()
     * The Location.replace() method replaces the current 
     * resource with the one at the provided URL. The 
     * difference from the assign() method is that after 
     * using replace() the current page will not be saved 
     * in session History, meaning the user won't be able 
     * to use the back button to navigate to it.
     * 指定された URL に現在の文書を置き換えます。 assign() メ
     * ソッドとの違いは、replace() を用いた後、現在のページは、
     * セッションの履歴には保持されないことです。つまり、ユーザ
     * は、置き換え前のページに戻るために、戻るボタンを使うこと
     * ができません。
     * (MDN[https://developer.mozilla.org/en-US/docs/Web/
     * API/Location/replace])
     */
    fetch(link, {method: 'head'}).then(function(response) {
     var a = document.getElementById('latest-link');
     a.href = response.status == 200 ? link : '../../latest/examples/';
     /** Response.status(This is an experimental technology)
      * The status read-only property of the Response 
      * interface contains the status code of the response 
      * (e.g., 200 for a success).
      * Response インタフェースの status 読み取り専用プロパティ
      * は、応答のステータス・コード(例えば、成功のために 200)
      * を含みます。
     * (MDN[https://developer.mozilla.org/en-US/docs/Web/
     * API/Response/status])
      */
    });
    var latestCheck = document.getElementById('latest-check');
    latestCheck.style.display = '';
    document.getElementById('latest-dismiss').onclick = function() {
     latestCheck.style.display = 'none';
     document.cookie = cookieText;
    }
   }
  });
 </script>
</html>


COMMONJS は

COMMONJS
http://webpack.github.io/docs/commonjs.html

に、次のようにあります。

The CommonJS group defined a module format to solve JavaScript scope issues by making sure each module is executed in its own namespace.
This is achieved by forcing modules to explicitly export those variables it wants to expose to the “universe”, and also by defining those other modules required to properly work.
To achieve this CommonJS give you two tools:
the require() function, which allows to import a given module into the current scope.
the module object, which allows to export something from the current scope.

CommonJSグループは、それ自身の名前空間内で実行されている各モジュールを確認することによって、JavaScriptのスコープ問題を解決するためのモジュールフォーマットを定義しました。
これは、それが「universe(?)」に公開したい変数を明示的にエクスポートするモジュールを強制することによって、同じように、正常に動作するのに必要な他のモジュールを定義することによって、達成されます。
この CommonJS を達成するために2つのツールを与えます:
require()関数、指定したモジュールを現在のスコープにインポートすることができます。
モジュールオブジェクト、現在のスコープからエクスポートすることができます。


Prism は、

Prism
http://prismjs.com/

に、次のようにあります。

Prism is a lightweight, extensible syntax highlighter, built with modern web standards in mind. It’s a spin-off from Dabblet and is tested there daily by thousands.
Prismは、最新のWeb標準に構築されたことを考慮し軽量で拡張可能なシンタックスハイライトです。それは Dabblet からスピンオフで、何千人も日々そこで試験されています。


ZeroClipboard は

ZeroClipboard v2.x
http://zeroclipboard.org/

に、次のようにあります。

The ZeroClipboard library provides an easy way to copy text to the clipboard using an invisible Adobe Flash movie and a JavaScript interface.
ZeroClipboard ライブラリは、見えない Adobe Flash ムービーとJavaScript のインターフェイスを使用してテキストをクリップボードにコピーする簡単な方法を提供します。

Debian 8 では動作しませんでした。ボタンを右クリックしたときに flash のコンテキストメニューが表示されると動作しています。

2 - ol4.0ex 166b - geojson-vt integration 2

「geojson-vt.js(2166-ol4ex.js)」は、マップを表示するための JavaScript ファイルです。

「2166-ol4ex.js」
var replacer = function(key, value) {
 if (value.geometry) {
  var type;
  var rawType = value.type;
  var geometry = value.geometry;

  if (rawType === 1) {
   type = geometry.length === 1 ? 'Point' : 'MultiPoint';
   /** 条件演算子 condition ? expr1 : expr2 
    * condition: true か false かを評価する条件文です。
    * expr1, expr2: 各々の値の場合に実行する式です。
    * condition が true の場合、演算子は expr1 の値を選択しま
    * す。そうでない場合は expr2 の値を選択します。
    * (MDN[https://developer.mozilla.org/ja/docs/Web/
    * JavaScript/Reference/Operators/
    * Conditional_Operators])
    */
  } else if (rawType === 2) {
   type = geometry.length === 1 ? 'LineString' : 'MultiLineString';
  } else if (rawType === 3) {
   type = geometry.length === 1 ? 'Polygon' : 'MultiPolygon';
  }
  return {
   'type': 'Feature',
   'geometry': {
    'type': type,
    'coordinates': geometry.length == 1 ? geometry : [geometry]
   },
   'properties': value.tags
  };
 } else {
 return value;
 }
};
var tilePixels = new ol.proj.Projection({
/** ol.proj.Projection
 * Projection definition class. One of these is created 
 * for each projection supported in the application and 
 * stored in the ol.proj namespace. You can use these in 
 * applications, but this is not required, as API params 
 * and options use ol.proj.ProjectionLike which means the 
 * simple string code will suffice.
 * 投影定義クラス。これらの一つは、アプリケーションでサポートさ
 * れ、ol.proj名前空間に格納されている各投影に対して作成されま
 * す。アプリケーションでこれらを使用することができますが、API 
 * のパラメータとオプションは、単純な文字列コードで十分であるこ
 * とを意味する ol.proj.ProjectionLike を使用するので、これ
 * は必要ありません。(ol4 API)
 */
 code: 'TILE_PIXELS',
 /** code:
  * The SRS identifier code, e.g. EPSG:4326. Required.
  * SRS 識別子。例えば EPSG:4326。必須。(ol4 API)
  */
 units: 'tile-pixels'
 /** units:
  * Units. Required unless a proj4 projection is defined 
  * for code.
  * 単位。コードに proj4 projection が定義されていなければ必須。
  * (ol4 API)
  */
});
var map = new ol.Map({
 layers: [
  new ol.layer.Tile({
  /** ol.layer.Tile 
   * For layer sources that provide pre-rendered, tiled 
   * images in grids that are organized by zoom levels 
   * for specific resolutions. 
   * プリレンダリング(事前描画)を提供するレイヤソースのため
   * の、特定の解像度でのズームレベルによって編成されているグ
   * リッドのタイルイメージ。(ol4 API)
   */
   source: new ol.source.OSM()
   /** ol.source.OSM 
    * Layer source for the OpenStreetMap tile server.
    * OpenStreetMap タイルサーバのレイヤソース。(ol4 API)
    */
  })
 ],
 target: 'map',
 view: new ol.View({
  center: [0, 0],
  zoom: 2
 })
});
var url = 'data/geojson/countries.geojson';
fetch(url).then(function(response) {
/** GlobalFetch.fetch()(This is an experimental technology)
 * The fetch() method of the GlobalFetch interface starts 
 * the process of fetching a resource. This returns a 
 * promise that resolves to the Response object 
 * representing the response to your request.
 * GlobalFetch インタフェースの fetch() メソッドは、リソー
 * スを取得する処理を開始します。これは要求に対する応答を表す 
 * Response オブジェクトに解決のプロミス(promise)を返しま
 * す。
 *(MDN[https://developer.mozilla.org/ja/docs/Web/API/
 * FGlobalFetch/fetch])
 */
 return response.json();
/** Response(This is an experimental technology)
 * The Response interface of the Fetch API represents 
 * the response to a request.
 * Fetch API の Response インタフェースは、要求に対する応答
 * を表します。
 * (MDN[https://developer.mozilla.org/en-US/docs/Web/
 * API/Response])
 */
}).then(function(json) {
 var tileIndex = geojsonvt(json, {
 // build an initial index of tiles(geojson-vt)
  extent: 4096, // tile extent (both width and height)
  debug: 1     // logging level (0 to disable, 1 or 2)
 });
 var vectorSource = new ol.source.VectorTile({
 /** ol.source.VectorTile
  * Class for layer sources providing vector data divided 
  * into a tile grid, to be used with ol.layer.VectorTile. 
  * Although this source receives tiles with vector 
  * features from the server, it is not meant for feature 
  * editing. Features are optimized for rendering, their 
  * geometries are clipped at or near tile boundaries and 
  * simplified for a view resolution. See ol.source.Vector 
  * for vector sources that are suitable for feature 
  * editing.
  * ol.layer.VectorTile で使用するタイルとグリッドに分割され
  * たベクタデータを提供するレイヤソースのクラス。このソース
  * はベクタフィーチャを持つタイルをサーバから受信しますが、
  * フィーチャの編集を意味したものではありません。フィーチャ
  * はレンダリングのために最適化され、そのジオメトリはタイル
  * の境界線、または、その近くでクリップされ、ビュー解像度の
  * ために単純化されます。フィーチャ編集に適したベクトルソー
  * スについては、ol.source.Vector を参照してください。
  * (ol4 API)
  */
  format: new ol.format.GeoJSON(),
  /** format:
   * Feature format for tiles. Used and required by 
   * the default tileLoadFunction.
   * タイルのためのフィーチャフォーマット。デフォルトの 
   * tileLoadFunction によって使用され、必要とされます。
   * (ol4 API)
   */
  /** ol.format.GeoJSON 
   * Feature format for reading and writing data in the 
   * GeoJSON format.
   * GeoJSON フォーマットのデータを読み書きするためのフィー
   * チャフォーマット。(ol4 API)
   */
  tileGrid: ol.tilegrid.createXYZ(),
  /** tileGrid
   * Tile grid.(ol4 API)
   */
  /** ol.tilegrid.createXYZ(opt_options)
   * Creates a tile grid with a standard XYZ tiling 
   * scheme.
   * 標準のXYZタイルスキーマを持つタイルグリッドを作成します。
  * (ol4 API)
   */
  tilePixelRatio: 16,
  /** tilePixelRatio:
   * The pixel ratio used by the tile service. For example, 
   * if the tile service advertizes 256px by 256px tiles 
   * but actually sends 512px by 512px tiles (for 
   * retina/hidpi devices) then tilePixelRatio should be 
   * set to 2. Default is 1.
   * タイルサービスで使用されるピクセル比率。 例えば、タイル
   * サービスは 256×256 ピクセルのタイルを提供しますがが、実
   * 際には、(retina/hipdi デバイスの場合)512 ×512 ピクセ
   * ルのタイルを送信する場合、tilePixelRatio は2に設定する必
   * 要があります。デフォルトは1です。(ol4 API)
   */
  tileLoadFunction: function(tile) {
  /** tileLoadFunction:
   * Optional function to load a tile given a URL. 
   * URL を指定されたタイルをロードするためのオプション関数
   * (function)。
   * Could look like this:
   * 
   * function(tile, url) {
   *  tile.setLoader(function() {
   *   var data = // ... fetch data
   *   var format = tile.getFormat();
   *   tile.setFeatures(format.readFeatures(data));
   *   tile.setProjection(format.readProjection(data));
   *  };
   * });
   * (ol4 API)
   */
   var format = tile.getFormat();
   /** getFormat()
    * Get the format associated with this source.
    * このソースに関連付けられたフォーマットを取得します。
    * (ol4 API)
    */
   var tileCoord = tile.getTileCoord();
   /** getTileCoord()
    * Get the tile coordinate for this tile.
    * (ol4 API)
    */
   var data = tileIndex.getTile(tileCoord[0], tileCoord[1], -tileCoord[2] - 1);
   // request a particular tile(geojson-vt)
   var features = format.readFeatures(
    /** readFeatures(source, opt_options)
     * Read all features from a GeoJSON source. Works for 
     * all GeoJSON types. If the source includes only 
     * geometries, features will be created with those 
     * geometries.
     * GeoJSON ソースからすべてのフィーチャを読み込みます。 
     * すべて のGeoJSON タイプに対応しています。 ソースにジオ
     * メトリのみが含まれている場合、そのジオメトリでフィーチャ
     * が作成されます。(ol4 API)
     */
    JSON.stringify({
    /** JSON.stringify(value[, replacer[, space]])
     * JSON.stringify() メソッドは JavaScript の値を JSON 
     * 文字列に変換します。置き換え関数を指定して値を置き
     * 換えたり、置き換え配列を指定して指定されたプロパティ
     * のみを含むようにしたりできます。
     * (MDN[https://developer.mozilla.org/ja/docs/Web/
     * JavaScript/Reference/Global_Objects/JSON/stringify])
      */
     type: 'FeatureCollection',
     features: data ? data.features : []
    }, replacer));
    tile.setLoader(function() {
    /** setLoader(loader)
     * Set the feature loader for reading this tile's 
     * features.
     * このタイルのフィーチャを読み取るためのフィーチャローダを
     * 設定します。(ol4 API)
     */
     tile.setFeatures(features);
     /** setFeatures(features)
      * (ol4 API)
      */
     tile.setProjection(tilePixels);
     /** setProjection(projection)
      * Set the projection of the features that were added 
      * with #setFeatures.
      * #setFeaturesで追加されたフィーチャの投影を設定します。
      * (ol4 API)
      */
   });
  },
  url: 'data:' 
// arbitrary url, we don't use it in the tileLoadFunction
 });
 var vectorLayer = new ol.layer.VectorTile({
 /** ol.layer.VectorTile
  * Layer for vector tile data that is rendered client-side. 
  * Note that any property set in the options is set as a 
  * ol.Object property on the layer object.
  * 
  * クライアント側にレンダリングされるベクタタイルデータのレイ 
  * ヤ。オプションに設定されたプロパティは、レイヤオブジェクト
  * の ol.Object プロパティとして設定されます。
  * (ol4 API)
  */
  source: vectorSource
 });
 map.addLayer(vectorLayer);
 /** addLayer(layer)
  * Adds the given layer to the top of this map.
  * 与えられたレイヤをこのマップの一番上に追加します。(ol4 API)
  */
});
 
 

2 - ol4.0ex 166a - geojson-vt integration 1

「geojson-vt integration(geojson-vt.html)」を参考に地図を表示してみます。

geojson-vt(GeoJSON Vector Tiles)は、「GitHub mapbox/geojson-vt: Slice GeoJSON into vector tiles on the fly in the browser (https://github.com/mapbox/geojson-vt)」に次のようにあります。

A highly efficient JavaScript library for slicing GeoJSON data into vector tiles on the fly, primarily designed to enable rendering and interacting with large geospatial datasets on the browser side (without a server).

GeoJSON データをベクタタイルにスライスするための、非常に効率的なJavaScriptライブラリは、主に、ブラウザ側(サーバなし)の大規模な地理空間データセットとのレンダリングとインタラクティングができるように設計されています。

Created to power GeoJSON in Mapbox GL JS, but can be useful in other visualization platforms like Leaflet and d3, as well as Node.js server applications.

Mapbox GL JS の GeoJSON を強化するために作成されましたが、Node.js サーバアプリケーションと同じように、Leaflet や d3 などの他の視覚化プラットフォームでも役立ちます。

Resulting tiles conform to the JSON equivalent of the vector tile specification. To make data rendering and interaction fast, the tiles are simplified, retaining the minimum level of detail appropriate for each zoom level (simplifying shapes, filtering out tiny polygons and polylines).

結果として得られるタイルは、JSON に相当するベクトルタイルの仕様に準拠しています。 データのレンダリングとインタラクションを高速化するために、各ズームレベルに適した最小レベルのディテールを維持(形状の簡素化、小さなポリゴンとポリラインのフィルタリング)しながらタイルを単純化します。


HTML ファイルの作成
a Eclipse のメニューの「ファイル」->「ファイルを開く」をクリックします。




b 「ファイルを開く」ウィンドウで、「user」->「workspace」->「ol4proj」->「v4.0.1」->「examples」->「geojson-vt.html」をクリックして選択し、「OK」ボタンをクリックします。
同じように「geojson-vt.js」を開きます。





c メニューの「ファイル」->「新規」 -> 「ファイル」をクリックします。




d 「ファイル」ウィンドウで「ol4proj」->「v4.0.1」->「examples」をクリックして選択し、「ファイル名」を「2166-ol4ex.html」と入力し、「完了」ボタンをクリックします。
(「ファイル」->「新規」->「その他」をクリックし、「ウィザードを選択」ダイアログで「Web」->「HTMLファイル」からテンプレートも作成できます。)






e 「geojson-vt.html」の内容をコピーして「2166-ol4ex.html」に貼り付け、修正します。

f 同じように、新規に「2166-ol4ex.js」ファイルを作成し、「geojson-vt.js」の内容をコピーして貼り付け、修正します。「geojson-vt-require.js」も「2166-ol4ex-require.js」に貼り付けます。
(「ファイル」->「新規」->「JavaScript ソース・ファイル」をクリックし、「新規 JavaScript ファイル」ダイアログでテンプレートも作成できます。)






「2166-ol3ex.html」
<!DOCTYPE html>
<html lang="en-US">
 <head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=Edge">
  <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
  <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css" type="text/css">
  <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" type="text/css">
  <link rel="stylesheet" href="./resources/prism/prism.css" type="text/css">
  <link rel="stylesheet" href="../css/ol.css" type="text/css">
  <link rel="stylesheet" href="./resources/layout.css" type="text/css">
  <script src="https://mapbox.github.io/geojson-vt/geojson-vt-dev.js"></script>
    
  <script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=fetch,requestAnimationFrame,Element.prototype.classList,URL"></script>
  <script src="./resources/zeroclipboard/ZeroClipboard.min.js"></script>
  <title>geojson-vt integration</title>
 </head>
 <body>
  <!-- 
  bootstrap-combined.min.css, ol.css, layout.css,
  CSSファイルで設定されたセレクタを使用。
  -->
  <header class="navbar" role="navigation">
   <div class="container">
    <div class="display-table pull-left" id="navbar-logo-container">
    <a class="navbar-brand" href="./"><img src="./resources/logo-70x70.png"> OpenLayers Examples</a>
   </div>
    <!-- menu items that get hidden below 768px width -->
    <nav class='collapse navbar-collapse navbar-responsive-collapse'>
     <ul class="nav navbar-nav pull-right">
      <li><a href="../doc">Docs</a></li>
      <li><a class="active" href="index.html">Examples</a></li>
      <li><a href="../apidoc">Docs</a></li>
      <li><a href="https://github.com/openlayers/ol3">Code</a></li>
     </ul>
    </nav>
   </div>
  </header>
  <div class="container-fluid">
   <div id="latest-check" class="alert alert-warning alert-dismissible" role="alert" style="display:none">
    <button id="latest-dismiss" type="button" class="close" data-dismiss="alert" aria-label="Close">
     <span aria-hidden="true">&times;</span>
    </button>
     This example uses OpenLayers v<span>4.0.1</span>. 
     The <a id="latest-link" href="#" class="alert-link">latest</a>
     is v<span id="latest-version"></span>.
   </div>
   <div class="row-fluid">
    <div class="span12">
     <h4 id="title">geojson-vt integration</h4>
     <div id="map" class="map"></div>
    </div>
   </div>
   <div class="row-fluid">
    <div class="span12">
     <p id="shortdesc">Slice GeoJSON into vector tiles on 
      the fly in the browser.</p>
     <div id="docs"><p>Example of integration with 
      <a href="https://github.com/mapbox/geojson-vt">
      geojson-vt</a> library </p>
     </div>
     <div id="api-links">Related API documentation: 
      <ul class="inline">
       <li>
        <a href="../apidoc/ol.Map.html" title="API documentation for ol.Map">ol.Map</a>
       </li>,
       <li>
        <a href="../apidoc/ol.View.html" title="API documentation for ol.View">ol.View</a>
       </li>,
       <li>
        <a href="../apidoc/ol.format.GeoJSON.html" title="API documentation for ol.format.GeoJSON">ol.format.GeoJSON</a>
       </li>,
       <li>
        <a href="../apidoc/ol.source.OSM.html" title="API documentation for ol.source.OSM">ol.source.OSM</a>
       </li>,
       <li>
        <a href="../apidoc/ol.source.VectorTile.html" title="API documentation for ol.source.VectorTile">ol.source.VectorTile</a>
       </li>,
       <li>
        <a href="../apidoc/ol.layer.Tile.html" title="API documentation for ol.layer.Tile">ol.layer.Tile</a>
       </li>,
       <li>
        <a href="../apidoc/ol.layer.VectorTile.html" title="API documentation for ol.layer.VectorTile">ol.layer.VectorTile</a>
       </li>,
       <li>
        <!-- <a href="../apidoc/ol.tilegrid.html" title="API documentation for ol.tilegrid">ol.tilegrid</a>
       </li>,
       <li>
        <!-- <a href="../apidoc/ol.proj.Projection.html" title="API documentation for ol.proj.Projection">ol.proj.Projection</a>
       </li>
      </ui>
     </div>
    </div>
   </div>
   <div class="row-fluid">
    <div id="source-controls">
     <a id="copy-button">
      <i class="fa fa-clipboard"></i> Copy
     </a>
     <a id="jsfiddle-button">
      <i class="fa fa-jsfiddle"></i> Edit
     </a>
    </div>
    <form method="POST" id="jsfiddle-form" target="_blank" action="https://codepen.io/pen/define/">
     <textarea class="hidden" name="title">geojson-vt integration</textarea>
     <textarea class="hidden" name="description">Slice GeoJSON into vector tiles on the fly in the browser.</textarea>
     <textarea class="hidden" name="js">
// --- 省略 ---
&lt;/html&gt;</code></pre>
   </div>
  </div>
  <script src="./resources/common.js"></script>
  <script src="./resources/prism/prism.min.js"></script>
  <!-- 
  <script src="loader.js?id=geojson-vt"></script>
  -->
  <!-- ファイル修正 -->  <!-- ディレクトリ修正 -->
  <script src="loader.js?id=2166-ol4ex"></script>
 </body>
 <script>
  var packageUrl = 'https://raw.githubusercontent.com/openlayers/openlayers.github.io/build/package.json';
  fetch(packageUrl).then(function(response) {
  /** GlobalFetch.fetch()(This is an experimental technology)
   * The fetch() method of the GlobalFetch interface 
   * starts the process of fetching a resource. This 
   * returns a promise that resolves to the Response 
   * object representing the response to your request.
   * GlobalFetch インタフェースの fetch() メソッドは、リソー
   * スを取得する処理を開始します。これは要求に対する応答を表す 
   * Response オブジェクトに解決のプロミス(promise)を返しま
   * す。
   *(MDN[https://developer.mozilla.org/ja/docs/Web/API/
   * FGlobalFetch/fetch])
   */
   return response.json();
   /** Response(This is an experimental technology)
    * The Response interface of the Fetch API represents 
    * the response to a request.
    * Fetch API の Response インタフェースは、要求に対する応答
    * を表します。
    * (MDN[https://developer.mozilla.org/en-US/docs/Web/
    * API/Response])
    */
   /** Body.json()(This is an experimental technology)
    * The json() method of the Body mixin takes a Response 
    * stream and reads it to completion. It returns a 
    * promise that resolves with an object literal 
    * containing the JSON data.
    * Body mixin の json() メソッドは、Response ストリームを
    * 受け取り、それを完了させるために読み込みます。これは、
    * JSON データを含むオブジェクトリテラルで解決する約束
    * (promisee)を返します。
    * (MDN[https://developer.mozilla.org/en-US/docs/Web/
    * API/Body/json])
    */
  }).then(function(json) {
   var latestVersion = json.version;
   document.getElementById('latest-version').innerHTML = latestVersion;
   var url = window.location.href;
   var branchSearch = url.match(/\/([^\/]*)\/examples\//);
   /** String.prototype.match()
    * 正規表現 に対する 文字列 のマッチングの際に、そのマッチ結
    * 果を得るために使われます。
    * (MDN[https://developer.mozilla.org/ja/docs/Web/
    * JavaScript/Reference/Global_Objects/String/match])
    */
   var cookieText = 'dismissed=-' + latestVersion + '-';
   var dismissed = document.cookie.indexOf(cookieText) != -1;
   /** String.prototype.indexOf()
    * 呼び出す String オブジェクト 中で、指定された値が最初に現
    * れたインデックスを返します。fromIndex から検索を始め、値が
    * 見つからない場合は -1 を返します。
    * (MDN[https://developer.mozilla.org/ja/docs/Web/
    * JavaScript/Reference/Global_Objects/String/indexOf])
    */
   if (!dismissed && /^v[0-9\.]*$/.test(branchSearch[1]) && '3.16.0' != latestVersion) {
    var link = url.replace(branchSearch[0], '/latest/examples/');
    /** Location.replace()
     * The Location.replace() method replaces the current 
     * resource with the one at the provided URL. The 
     * difference from the assign() method is that after 
     * using replace() the current page will not be saved 
     * in session History, meaning the user won't be able 
     * to use the back button to navigate to it.
     * 指定された URL に現在の文書を置き換えます。 assign() メ
     * ソッドとの違いは、replace() を用いた後、現在のページは、
     * セッションの履歴には保持されないことです。つまり、ユーザ
     * は、置き換え前のページに戻るために、戻るボタンを使うこと
     * ができません。
     * (MDN[https://developer.mozilla.org/en-US/docs/Web/
     * API/Location/replace])
     */
    fetch(link, {method: 'head'}).then(function(response) {
     var a = document.getElementById('latest-link');
     a.href = response.status == 200 ? link : '../../latest/examples/';
     /** Response.status(This is an experimental technology)
      * The status read-only property of the Response 
      * interface contains the status code of the response 
      * (e.g., 200 for a success).
      * Response インタフェースの status 読み取り専用プロパティ
      * は、応答のステータス・コード(例えば、成功のために 200)
      * を含みます。
     * (MDN[https://developer.mozilla.org/en-US/docs/Web/
     * API/Response/status])
      */
    });
    var latestCheck = document.getElementById('latest-check');
    latestCheck.style.display = '';
    document.getElementById('latest-dismiss').onclick = function() {
     latestCheck.style.display = 'none';
     document.cookie = cookieText;
    }
   }
  });
 </script>
</html>


COMMONJS は

COMMONJS
http://webpack.github.io/docs/commonjs.html

に、次のようにあります。

The CommonJS group defined a module format to solve JavaScript scope issues by making sure each module is executed in its own namespace.
This is achieved by forcing modules to explicitly export those variables it wants to expose to the “universe”, and also by defining those other modules required to properly work.
To achieve this CommonJS give you two tools:
the require() function, which allows to import a given module into the current scope.
the module object, which allows to export something from the current scope.

CommonJSグループは、それ自身の名前空間内で実行されている各モジュールを確認することによって、JavaScriptのスコープ問題を解決するためのモジュールフォーマットを定義しました。
これは、それが「universe(?)」に公開したい変数を明示的にエクスポートするモジュールを強制することによって、同じように、正常に動作するのに必要な他のモジュールを定義することによって、達成されます。
この CommonJS を達成するために2つのツールを与えます:
require()関数、指定したモジュールを現在のスコープにインポートすることができます。
モジュールオブジェクト、現在のスコープからエクスポートすることができます。


Prism は、

Prism
http://prismjs.com/

に、次のようにあります。

Prism is a lightweight, extensible syntax highlighter, built with modern web standards in mind. It’s a spin-off from Dabblet and is tested there daily by thousands.
Prismは、最新のWeb標準に構築されたことを考慮し軽量で拡張可能なシンタックスハイライトです。それは Dabblet からスピンオフで、何千人も日々そこで試験されています。


ZeroClipboard は

ZeroClipboard v2.x
http://zeroclipboard.org/

に、次のようにあります。

The ZeroClipboard library provides an easy way to copy text to the clipboard using an invisible Adobe Flash movie and a JavaScript interface.
ZeroClipboard ライブラリは、見えない Adobe Flash ムービーとJavaScript のインターフェイスを使用してテキストをクリップボードにコピーする簡単な方法を提供します。

Debian 8 では動作しませんでした。ボタンを右クリックしたときに flash のコンテキストメニューが表示されると動作しています。

v4.0.1 がリリースされました

v4.0.1 がリリースされました
日本時間で(2017.2.24)に v4.0.1 がリリースされました。

Releases 4.0.1 - openlayers/openlayers GitHub
(https://github.com/openlayers/openlayers/releases/tag/v4.0.1)より

v4.0.1
Summary

The v4.0.1 release is a patch release that addresses a regression in the v4.0.0 release. The fix makes pinch zooming work again properly when the two fingers are not placed on the screen at the same time.

See the v4.0.0 release notes for details on upgrading from v3.20.x.

v4.0.1リリースは、v4.0.0リリースの回帰に対処するパッチリリースです。 この修正により、2本の指が画面上に同時に置かれていないときに、ピンチズームが再び適切に機能します。

v3.20.x からのアップグレードの詳細について v4.0.0 リリースノートを参照してください。


v4.0.0 がリリースされました
日本時間で(2017.2.11)に v4.0.0 がリリースされました。

Releases 4.0.0 - openlayers/openlayers GitHub
(https://github.com/openlayers/openlayers/releases/tag/v4.0.0)より

v4.0.0

Starting with this version, OpenLayers introduces Semantic Versioning. Unlike the switch from v2.x to v3.x, which marked a complete rewrite of the library with an entirely new API, major version increments now simply mean that users should pay attention to the 'Breaking changes' section of the upgrade notes.

このバージョンから、OpenLayers はセマンティック バージョニング(Semantic Versioning)を導入しました。(訳注:セマンティック バージョニング[http://semver.org/lang/ja/]」)まったく新しいAPIでライブラリの完全な書き換えを行った v2.x から v3.x への切り替えとは異なり、メジャーバージョンの増分は、アップグレードノートの「Breaking changes」セクションに注意を払う必要があることを意味します。

For users of mainstream bundlers and minifiers, OpenLayers is now also available as a set of ES2015 modules. See https://npmjs.com/package/ol/. With that package, bundling only the needed parts of the library with an application is now completely hassle free.

主流のバンドルやミニファイユーザにとって、OpenLayers は ES2015 モジュールのセットとしても利用できるようになりました。 https://npmjs.com/package/ol/ を参照してください。このパッケージでは、ライブラリの必要な部分だけをアプリケーションにバンドルするだけで、手間がかかりません。

Version 4.0.0 includes enhancements and fixes from 107 pull requests since the previous release.

バージョン 4.0.0 には、以前のリリースからの 107個のプルリクエスト(訳注:Git でリクエストを出す機能)の拡張と修正が含まれています。

Among these changes, #6381 adds an example which shows how to use geojson-vt for highly efficient rendering of GeoJSON data as vector tiles.

これらの変更のうち、#6381 には GeoJson データをベクタタイルとして効率的にレンダリングするために geojson-vt を使用する方法を示す例が追加されています。

Several improvements were made to ol.source.Zoomify, including projection support (#6387) and support for URL templates (#6475).

投影サポート(#6387)と URL テンプレート(#6475)のサポートを含む ol.source.Zoomify のいくつかの改良が行われました。

Also the ol.source.ImageArcGISRest saw some enhancements, including HiDPI/Retina support and a fix that avoids non-integer DPI values (#6300 and #6467).

また、ol.source.ImageArcGISRest は、HiDPI/Retin aのサポートや、非整数の DPI 値(#6300 と#6467)を避ける修正を含むいくつかの機能強化を見ました。

On the topic of drawing tools, @tst-ppenev completed an effort to make the ol.interaction.Modify interaction support modification of ol.geom.Circle geometries (#6457).

描画ツールのトピックでは、@tst-ppenev が ol.interaction.Modify インタラクションサポートを ol.geom.Circle ジオメトリの変更にするための作業を完了しました(#6457)。


Breaking changes

Simplified ol.View#fit() API

In most cases, it is no longer necessary to provide an ol.Size (previously the 2nd argument) to ol.View#fit(). By default, the size of the first map that uses the view will be used. If you want to specify a different size, it goes in the options now (previously the 3rd argument, now the 2nd).

ほとんどの場合、ol.View#fit() に ol.Size(以前は2番目の引数)を指定する必要がなくなりました。 デフォルトでは、ビューを使用する最初のマップのサイズが使用されます。 別のサイズを指定したい場合は、オプション(以前は3番目の引数、現在は2番目の引数)に入ります。

Most common use case - old API:
最も一般的なケース - 以前の API:

map.getView().fit(extent, map.getSize());

Most common use case - new API:
最も一般的なケース - 現在の API:

map.getView().fit(extent);

Advanced use - old API:
拡張ケース - 以前の API:

map.getView().fit(extent, [200, 100], {padding: 10});

Advanced use - new API:
拡張ケース - 現在の API:

map.getView().fit(extent, {size: [200, 100], padding 10});


Removal of deprecated methods
非推奨メソッドの削除

The deprecated ol.animation functions and map.beforeRender() method have been removed. Use view.animate() instead.

非推奨の ol.animation 関数と map.beforeRender() メソッドは削除されました。 代わりに view.animate() を使用してください。

The unByKey() method has been removed from ol.Observable instances. Use the ol.Observable.unByKey() static function instead.

unByKey() メソッドは ol.Observable インスタンスから削除されました。 替わりに ol.Observable.unByKey() 静的関数を使用してください。

var key = map.on('moveend', function() { ...});
map.unByKey(key);

New code:
現在のコード:

var key = map.on('moveend', function() { ...});
ol.Observable.unByKey(key);


Upgrade notes

Simpler ol.source.Zoomify url configuration
ol.source.Zoomify url 設定の簡素化

Instead specifying a base url, the url for the ol.source.Zoomify source can now be a template. The {TileGroup}, {x}, {y}, {z} and placeholders must be included in the url in this case. the url can now also include subdomain placeholders:

base urlを指定する替わりに、ol.source.Zoomify ソースの url をテンプレートにすることができます。 この場合、{TileGroup}、{x}、{y}、{z} とプレースホルダを url に含める必要があります。 url にはサブドメインのプレースホルダも含めることができます。

new ol.source.Zoomify({
 url: 'https://{a-f}.example.com/cgi-bin/iipsrv.fcgi?zoomify=/a/b/{TileGroup}/{z}-{x}-{y}.jpg'
});


Removed build flags (@define)
build flag の削除

The ol.DEBUG, ol.ENABLE_TILE, ol.ENABLE_IMAGE, ol.ENABLE_VECTOR, and ol.ENABLE_VECTOR_TILE build flags are no longer necessary and have been removed. If you were using these in a define array for a custom build, you can remove them.

ol.DEBUG、ol.ENABLE_TILE、ol.ENABLE_IMAGE、ol.ENABLE_VECTOR、およびol.ENABLE_VECTOR_TILE ビルドフラグは不要になり、削除されました。 カスタムビルドの定義配列でこれらを使用していた場合は、それらを削除できます。

If you leave ol.ENABLE_WEBGL set to true in your build, you should set ol.DEBUG_WEBGL to false to avoid including debuggable shader sources.

ビルドで ol.ENABLE_WEBGL を true に設定したままにしてある場合、デバッグ可能なシェーダソースを含まないようにするため、ol.DEBUG_WEBGL を false に設定する必要があります。


(Full list of changes と fixes リストはサイトをみてください。)

OpenLayers4 - 2 OpenLayers のインストール

2 OpenLayers のインストール
2-1 OpenLayers のダウンロード
OpenLayers 3 のホームページ(http://openlayers.org/)の「LATEST」の文中の「v4.0.1」をクリックします。



開いたページ「Downloads for the v4.0.1 release(http://openlayers.org/download/)」の「v4.0.1.zip」をクリックしてダウンロードします。


次のようなダイアログが表示されたら「OK」ボタンをクリックします。


このファイルを解凍します。

user@deb8-vmw:~$ cd ダウンロード
user@deb8-vmw:~/ダウンロード$ ls
---
v4.0.1.zip
---
user@deb8-vmw:~/ダウンロード$ unzip v4.0.1.zip
user@deb8-vmw:~/ダウンロード$ ls
---
v4.0.1
v4.0.1.zip
---


2-2 Eclipse にプロジェクトを作成
Eclipseを起動します。

user@deb8-vmw:~/ダウンロード$ cd
user@deb8-vmw:~$ eclipse


プロジェクトを作成します。
a メニューの「ファイル」 -> 「新規」 -> 「JavaScript プロジェクト」をクリックします。(または、「新規 JavaScript プロジェクト」ボタンをクリックします。)


b 「javascript プロジェクトを作成します」ウィンドウで「プロジェクト名」(例えばol4proj)を入力して「完了」ボタンをクリックします。



ol4proj フォルダに、解凍した v4.0. 1フォルダを /home/user/ダウンロード から移動します。

user@deb8-vmw:~$ mv ダウンロード/v4.0.1 workspace/ol4proj/


検証(時間がかかることがあります)が終わったあと「プロジェクタ・エクスプローラー」ビューの「ol4proj」左側の▽をクリックして、「v4.0.1」を表示します。


「v4.0.1」左側の▽をクリックすると中身が表示されます。