2016年12月31日土曜日

2 - ol3.20ex 165b - topolis integration 2

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

「2165-ol3ex.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. 
 * プリレンダリング(事前描画)を提供するレイヤソースのため
 * の、特定の解像度でのズームレベルによって編成されているグ
 * リッドのタイルイメージ。(ol3 API)
 */
 source: new ol.source.OSM()
 /** ol.source.OSM 
  * Layer source for the OpenStreetMap tile server.
  * OpenStreetMap タイルサーバのレイヤソース。(ol3 API)
  */
});
var nodes = new ol.source.Vector({wrapX: false});
/** 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 を参照してください。(ol3 API)
 */
/** wrapX:
 * Wrap the world horizontally. Default is true. For 
 * vector editing across the -180° and 180° meridians 
 * to work properly, this should be set to false. The 
 * resulting geometry coordinates will then exceed the 
 * world bounds.
 * 水平方向に世界をラップします。デフォルトは true。-180°
 * と180°の子午線を横切って編集するベクトルが正しく動作す
 * るために、これは false に設定する必要があります。ジオメ
 * トリの座標の結果は、その後、世界の境界線を超えます。
 * (ol3 API[experimental])
 */
var nodesLayer = new ol.layer.Vector({
/** ol.layer.Vector
 * Vector data that is rendered client-side.
 * クライアント側で描画されるベクタデータ。(ol3 API)
 */
 source: nodes,
 style: function(f) {
  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*() メソッドを通じてその子に加えられた変
   * 更は、スタイルを使用するフィーチャまたはレイヤが再レン
   * ダリングされるまで有効になりません。
   * (ol3 API[experimental])
   */
   image: new ol.style.Circle({
   /** ol.style.Circle
    * Set circle style for vector features.
    * ベクタフィーチャの円のスタイルを設定。(ol3 API)
    */
    radius: 8,
    fill: new ol.style.Fill({color: 'rgba(255, 0, 0, 0.2)'}),
    /** ol.style.Fill 
     * Set fill style for vector features.
     * ベクタフィーチャの塗りつぶしスタイルを設定。
     * (ol3 API[experimental])
     */
    stroke: new ol.style.Stroke({color: 'red', width: 1})
    /** 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 関数は、オプションで入力されたものはすべて返
     * す。それらはデフォルトを返しません。
     * (ol3 API[experimental])
     */
    /** 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 デフォルトの
     * 黒が使用されます。
     * (ol3 API[experimental])
     */
    }),
    text: new ol.style.Text({
    /** ol.style.Text
     * Set text style for vector features.
     * ベクタフィーチャの文字列のスタイルを設定します。
     * (ol3 API[experimental])
     */
     text: f.get('node').id.toString(),
     /** get(key)
      * Gets a value.(ol3 API)
      */
     /** Number.prototype.toString( [ radix ] )
      * 指定された Number オブジェクトを表す 文字列を返します。
      * radix: 数値を表すために使われる基数を指定する、2 から 
      * 36 までの整数。省略したときは 10。
      * MDN([https://developer.mozilla.org/ja/docs/Web/
      * JavaScript/Reference/Global_Objects/Number/toString])
      */
     fill: new ol.style.Fill({color: 'red'}),
     /** fill:
      * Fill style. If none is provided, we'll use a dark 
      * fill-style (#333).
      * (ol3 API[experimental])
      */
     stroke: new ol.style.Stroke({
      color: 'white',
      width: 3
     })
    })
   });
  return [style];
 }
});
var edges = new ol.source.Vector({wrapX: false});
var edgesLayer = new ol.layer.Vector({
 source: edges,
 style: function(f) {
  var style = new ol.style.Style({
   stroke: new ol.style.Stroke({
    color: 'blue',
    width: 1
   }),
   text: new ol.style.Text({
    text: f.get('edge').id.toString(),
    fill: new ol.style.Fill({color: 'blue'}),
    stroke: new ol.style.Stroke({
     color: 'white',
     width: 2
    })
   })
  });
  return [style];
 }
});
var faces = new ol.source.Vector({wrapX: false});
var facesLayer = new ol.layer.Vector({
 source: faces,
 style: function(f) {
  var style = new ol.style.Style({
   stroke: new ol.style.Stroke({
    color: 'black',
    width: 1
   }),
   fill: new ol.style.Fill({
    color: 'rgba(0, 255, 0, 0.2)'
   }),
   text: new ol.style.Text({
    font: 'bold 12px sans-serif',
    /** font:
     * Font style as CSS 'font' value, see: 
     * https://developer.mozilla.org/en-US/docs/Web/API/
     * CanvasRenderingContext2D/font. 
     * Default is '10px sans-serif'
     * (ol3 API[experimental])
     */
    text: f.get('face').id.toString(),
    fill: new ol.style.Fill({color: 'green'}),
    stroke: new ol.style.Stroke({
     color: 'white',
     width: 2
    })
   })
  });
  return [style];
 }
});
var map = new ol.Map({
 layers: [raster, facesLayer, edgesLayer, nodesLayer],
 target: 'map',
 view: new ol.View({
  center: [-11000000, 4600000],
  zoom: 16
 })
});
var topo = topolis.createTopology();
/** createTopology()
 * createTopology(name, srid, tolerance)
 * Create topology.
 * (JDoc:Module:topo[https://bjornharrtell.github.io/
 * topolis/0.1.0/apidocs/module-topo.html#.createTopology])
 */
topo.on('addnode', nodeToFeature);
/** on(topo, name, callback)
 * topo.js line 100
 * (JSDoc: Source topo.js[https://bjornharrtell.github.io/
 * topolis/0.1.0/apidocs/topo.js.html])
 */
topo.on('removenode', function(e) {
 removeElementFeature(nodes, e);
});
topo.on('addedge', edgeToFeature);
topo.on('modedge', function(e) {
 var feature = edges.getFeatureById(e.id);
 /**getFeatureById(id)
  * Get a feature by its identifier (the value returned by 
  * feature.getId()). Note that the index treats string 
  * and numeric identifiers as the same. So 
  * source.getFeatureById(2) will return a feature with id 
  * '2' or 2.
  * フィーチャ識別子(feature.getId()によって返される値)に
  * よってフィーチャを取得します。 インデックスは、文字列と数
  * 値の識別子を同じものとして扱うことに注意してください。 し
  * たがって、source.getFeatureById(2)は、IDが '2'(文字列)
  * または 2 (数値)のフィーチャを返します。(ol3 API)
  */
 feature.setGeometry(new ol.geom.LineString(e.coordinates));
 /** setGeometry()
  * Set the geometry for this feature. This will 
  * update the property with the current name 
  * returned by ol.Feature#getGeometryName. 
  * このフィーチャのジオメトリを設定します。これは、
  * ol.Feature#getGeometryName によって返された、現在の
  * 名前とともにプロパティを更新します。
  * (ol3 API)
  */
 /** ol.geom.LineString
  * Linestring geometry.(ol3 API)
  */
});
topo.on('removeedge', function(e) {
 removeElementFeature(edges, e);
});
topo.on('addface', faceToFeature);
topo.on('removeface', function(e) {
 removeElementFeature(faces, e);
});
function removeElementFeature(source, element) {
 var feature = source.getFeatureById(element.id);
 source.removeFeature(feature);
}
function nodeToFeature(node) {
 var feature = new ol.Feature({
 /** 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のようなベクトルファイル形式のフィーチャに類
  * 似した、ジオメトリとその他の属性プロパティを持つ地物
  * フィーチャのためのベクトルオブジェクト。(ol3 API)
  */
  geometry: new ol.geom.Point(node.coordinate),
  /** ol.geom.Point
   * Point geometry.(ol3 API)
   */
  node: node
 });
 feature.setId(node.id);
 /** setId(id)
  * Set the feature id. The feature id is considered 
  * stable and may be used when requesting features or 
  * comparing identifiers returned from a remote source. 
  * The feature id can be used with the 
  * ol.source.Vector#getFeatureById method.
  * フィーチャ id を設定します。 フィーチャ id は安定していると
  * 考えられ、フィーチャを要求したり、リモートソースから返された
  * 識別子を比較するときに使用されます。 フィーチャ id は、
  * ol.source.Vector#getFeatureByIdメソッドで使用できます。
  * (ol3 API)
  */
 nodes.addFeature(feature);
 /** addFeature(feature)
  * Add a single feature to the source. If you want to 
  * add a batch of features at once, call 
  * source.addFeatures() instead.
  * 単一のフィーチャをソースに追加します。 一度にフィーチャの
  * バッチを追加する場合は、代わりにsource.addFeatures() を呼
  * び出します。(ol3 API)
  */
}
function edgeToFeature(edge) {
 var feature = new ol.Feature({
  geometry: new ol.geom.LineString(edge.coordinates),
  edge: edge
 });
 feature.setId(edge.id);
 edges.addFeature(feature);
}
function faceToFeature(face) {
 var coordinates = topo.getFaceGeometry(face);
 /** getFaceGeometry(topo, face)
  * Returns the polygon in the given topology with the  
  * specified face.
  * 指定された面の指定されたトポロジのポリゴンを返します。
  * (JDoc:Module:topo[https://bjornharrtell.github.io/
  * topolis/0.1.0/apidocs/module-face.html])
  */
 var feature = new ol.Feature({
  geometry: new ol.geom.Polygon(coordinates),
  /** ol.geom.Polygon
   * Polygon geometry.(ol3 API)
   */
  face: face
 });
 feature.setId(face.id);
 faces.addFeature(feature);
}
function createNode(topo, coord) {
 var node;
 var existingEdge = topo.getEdgeByPoint(coord, 5)[0];
 /** getEdgeByPoint
  * (JDoc:Module:topo[https://bjornharrtell.github.io/
  * topolis/0.1.0/apidocs/module-topo.html])
  */
 if (existingEdge) {
  node = topo.modEdgeSplit(existingEdge, coord);
  /** modEdgeSplit
   * (JDoc:Module:topo[https://bjornharrtell.github.io/
   * topolis/0.1.0/apidocs/module-topo.html])
   */
 } else {
  node = topo.addIsoNode(coord);
  /** addIsoNode(topo, coordinate)
   * Adds an isolated node to a face in a topology and 
   * returns the new node. If face is null, the node is 
   * still created.
   * 分離されたノードをトポロジの面に追加し、新しいノードを返し
   * ます。 face が null の場合、ノードはまだ作成されています。
   * (JDoc:Module:topo[https://bjornharrtell.github.io/
   * topolis/0.1.0/apidocs/module-node.html])
   */
 }
 return node;
}
function onDrawend(e) {
 var edgeGeom = e.feature.getGeometry().getCoordinates();
 /** getGeometry()
  * Get the feature's default geometry. A feature may 
  * have any number of named geometries. The "default" 
  * geometry (the one that is rendered by default) is 
  * set when calling ol.Feature#setGeometry.
  * フィーチャのデフォルトのジオメトリを取得します。フィーチャ
  * は、任意の数の指定のジオメトリのを有することができます。
  * 「デフォルト」のジオメトリ(デフォルトでレンダリングされ
  * るもの)が ol.Feature#setGeometry を呼び出すときに
  * 設定されています。(ol3 API)
  */
 /** getCoordinates()
  * Return the coordinates of the linestring.
  * ラインストリングの座標を返します。(ol3 API)
  */
 var startCoord = edgeGeom[0];
 var endCoord = edgeGeom[edgeGeom.length - 1];
 var start, end;
 try {
  start = topo.getNodeByPoint(startCoord);
  /** getNodeByPoint(topo, coordinate)
   * Find the node at a point location.
   * 点座標のノードを見つけます。
   * (JDoc:Module:topo[https://bjornharrtell.github.io/
   * topolis/0.1.0/apidocs/module-node.html])
   */
  end = topo.getNodeByPoint(endCoord);
  var edgesAtStart = topo.getEdgeByPoint(startCoord, 5);
  var edgesAtEnd = topo.getEdgeByPoint(endCoord, 5);
  var crossing = topo.getEdgesByLine(edgeGeom);
  /** getEdgesByLine
   * (JDoc:Module:topo[https://bjornharrtell.github.io/
   * topolis/0.1.0/apidocs/module-topo.html])
   */
  if (crossing.length === 1 && !start && !end && edgesAtStart.length === 0 && edgesAtEnd.length === 0) {
   topo.remEdgeNewFace(crossing[0]);
   /** remEdgeNewFace
    * (JDoc:Module:topo[https://bjornharrtell.github.io/
    * topolis/0.1.0/apidocs/module-topo.html])
    */
   start = crossing[0].start;
   if (start.face) {
    topo.removeIsoNode(start);
    /** removeIsoNode
     * (JDoc:Module:topo[https://bjornharrtell.github.io/
     * topolis/0.1.0/apidocs/module-topo.html])
     */
   }
   end = crossing[0].end;
   if (end.face) {
    topo.removeIsoNode(end);
   }
   return;
  }
  if (!start) {
   start = createNode(topo, startCoord);
   edgeGeom[0] = start.coordinate;
  }
  if (!end) {
   end = createNode(topo, endCoord);
   edgeGeom[edgeGeom.length - 1] = end.coordinate;
  }
  topo.addEdgeNewFaces(start, end, edgeGeom);
  /** addEdgeNewFaces(topo, start, end, coordinates)
   * Add a new edge and, if in doing so it splits a face, 
   * delete the original face and replace it with two new 
   * faces.
   * 新しいエッジを追加し、その際に面を分割する場合は元の面を削
   * 除し、2つの新しい面に置き換えます。
   * (JDoc:Module:topo[https://bjornharrtell.github.io/
   * topolis/0.1.0/apidocs/module-edge.html#.addEdgeNewFaces])
   */
 } catch (e) {
  toastr.warning(e.toString());
 }
}
var draw = new ol.interaction.Draw({
 /** ol.interaction.Draw 
  * Interaction that allows drawing geometries.
  * ジオメトリの描画を認めるインターラクション。(ol3 API)
  */
 type: 'LineString'
});
draw.on('drawend', onDrawend);
/** on(type, listener, opt_this)
 * Listen for a certain type of event.
 * あるタイプのイベントをリッスンします。(ol3 API)
 */
map.addInteraction(draw);
/** addInteraction(interaction)
 * Add the given interaction to the map.
 * マップへ指定されたインターラクションを追加します。
 * (ol3 API)
 */
var snap = new ol.interaction.Snap({
/** ol.interaction.Snap
 * Handles snapping of vector features while modifying 
 * or drawing them. The features can come from a 
 * ol.source.Vector or ol.Collection Any interaction 
 * object that allows the user to interact with the 
 * features using the mouse can benefit from the 
 * snapping, as long as it is added before.
 * The snap interaction modifies map browser event 
 * coordinate and pixel properties to force the snap to 
 * occur to any interaction that them.
 * 変更または描画の間、ベクタフィーチャのスナップを処理しま
 * す。フィーチャは、ol.source.Vector または ol.Collection 
 * 由来です。ユーザーがマウスを使用してフィーチャをインタラ
 * クションすることを可能にする任意のインタラクションオブジェ
 * クトは、それが前に追加されるように、スナップの恩恵を得る
 * ことができます。スナップインタラクションは、マップブラウ
 * ザイベントコーディネートと画素特性をそれらの任意のインタ
 * ラクションのために発生するスナップへ強制的に変更します。 
 * (ol3 API)
 */
 source: edges
});
map.addInteraction(snap);
map.addControl(new ol.control.MousePosition());
/** addControl(control)
 * Add the given control to the map.
 * 指定したコントロールをマップに追加します。
 * (ol3 API)
 */
/** ol.control.MousePosition 
 * A control to show the 2D coordinates of the mouse 
 * cursor. By default, these are in the view projection, 
 * but can be in any supported projection. By default 
 * the control is shown in the top right corner of the 
 * map, but this can be changed by using the css selector 
 * .ol-mouse-position.
 * マウスカーソルの2次元座標を表示すするためのコントロール。デ
 * フォルトでは、これらはビュー投影(の数値)ですが、サポートさ
 * れている任意の投影にすることができます。デフォルトでは、コン
 * トロールは、マップの右上に表示されますが、これは CSS セレク
 * タ .ol-mouse-position を使用して変更することができます。
 * (ol3 API)
 */
 

2 - ol3.20ex 165a - topolis integration 1

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

Example showing the integration of topolis with OpenLayers 3, enabling creating and editing topological geometry. Standard interaction draws edges, snapping to existing edges. Delete an edge by drawing a new edge crossing the one to delete.

OpenLayers 3 を使用して、トポロジのインタラクションを示す例。トポロジカルなジオメトリの作成と編集が可能です。 標準インタラクションは、エッジを描き、既存のエッジにスナップします。 削除するエッジを横切る新しいエッジを描画して、エッジを削除します。
HTML ファイルの作成
a Eclipse のメニューの「ファイル」->「ファイルを開く」をクリックします。






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





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




d 「ファイル」ウィンドウで「ol3proj」をクリックして選択し、「ファイル名」を「2165-ol3ex.html」と入力し、「次へ」ボタンをクリックします。








e 「File Template」ウィンドウで「HTML 5 Template」をクリックして選択し、「OK」ボタンをクリックします。











f 「topolis.html」の内容をコピーして「2165-ol3ex.html」に貼り付け、修正します。
g 同じように、新規に「2165-ol3ex.js」ファイルを作成し、「File Template」ウィンドウで「JavaScript Template」をクリックして選択し、「完了」ボタンをクリックして、「topolis.js」の内容をコピーして貼り付け、修正します。「topolis-require.js」も「2165-ol3ex-require.js」に貼り付けます。

「2165-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-combined.min.css" type="text/css">
  <!--
  <link rel="stylesheet" href="../css/ol.css" type="text/css">
  <link rel="stylesheet" href="./resources/layout.css" type="text/css">

  <link rel="stylesheet" href="./resources/prism/prism.css" type="text/css">
  <script src="./resources/zeroclipboard/ZeroClipboard.min.js"></script>
  <link rel="stylesheet" href="sea-level.css">
  -->
  <!-- ディレクトリ修正 -->
  <link rel="stylesheet" href="v3.20.1/css/ol.css" type="text/css">
  <link rel="stylesheet" href="v3.20.1/examples/resources/layout.css" type="text/css">

  <link rel="stylesheet" href="v3.20.1/examples/resources/prism/prism.css" type="text/css">
  <link rel="stylesheet" href="v3.20.1/examples/sea-level.css">
  <script src="v3.20.1/examples/resources/zeroclipboard/ZeroClipboard.min.js"></script>
  <script src="https://cdn.rawgit.com/bjornharrtell/topolis/releases/0.1.1/topolis.min.js"></script>
  <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/2.1.3/toastr.min.js"></script>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/2.1.3/toastr.min.css">
  <title>topolis 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>
    -->
    <!-- ディレクトリ修正 -->
    <a class="navbar-brand" href="v3.20.1/examples/"><img src="v3.20.1/examples/resources/logo-70x70.png"> OpenLayers Examples</a>
    <!-- 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 href="v3.20.1/doc">Docs</a></li>
      <li><a class="active" href="index.html">Examples</a></li>
      <!-- <li><a href="../apidoc">Docs</a></li> -->
      <li><a href="v3.20.1/apidoc">API</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>3.20.1</span>. 
     The <a id="latest-link" href="#" class="alert-link">latest</a>
     is v<span id="latest-version"></span>.
    </div>
   </div>
   <div class="row-fluid">
    <div class="span12">
     <h4 id="title">topolis integration</h4>
     <div id="map" class="map"></div>
    </div>
   </div>
   <div class="row-fluid">
    <div class="span12">
     <p id="shortdesc">Example on how to use topolis with 
      OpenLayers 3.</p>
     <div id="docs"><p>Example showing the integration of 
      <a href="https://github.com/bjornharrtell/topolis">topolis
      </a> with OpenLayers 3, enabling creating and editing 
      topological geometry. Standard interaction draws edges, 
      snapping to existing edges. Delete an edge by drawing a 
      new edge crossing the one to delete.</p>
     </div>
     <div id="api-links">Related API documentation: 
      <ul class="inline">
       <li>
        <!-- <a href="../apidoc/ol.Feature.html" title="API documentation for ol.Feature">ol.Feature</a> -->
        <a href="3.20.1/apidoc/ol.Feature.html" title="API documentation for ol.Feature">ol.Feature</a>
       </li>,
       <li>
        <!-- <a href="../apidoc/ol.Map.html" title="API documentation for ol.Map">ol.Map</a> -->
        <a href="3.20.1/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> -->
        <a href="3.20.1/apidoc/ol.View.html" title="API documentation for ol.View">ol.View</a>
       </li>,
       <li>
        <!-- <a href="../apidoc/ol.geom.Point.html" title="API documentation for ol.geom.Point">ol.geom.Point</a> -->
        <a href="3.20.1/apidoc/ol.geom.Point.html" title="API documentation for ol.geom.Point">ol.geom.Point</a>
       </li>,
       <li>
        <!-- <a href="../apidoc/ol.geom.LineString.html" title="API documentation for ol.geom.LineString">ol.geom.LineString</a> -->
        <a href="3.20.1/apidoc/ol.geom.LineString.html" title="API documentation for ol.geom.LineString">ol.geom.LineString</a>
       </li>,
       <li>
        <!-- <a href="../apidoc/ol.geom.Polygon.html" title="API documentation for ol.geom.Polygon">ol.geom.Polygon</a> -->
        <a href="3.20.1/apidoc/ol.geom.Polygon.html" title="API documentation for ol.geom.Polygon">ol.geom.Polygon</a>
       </li>,
       <li>
        <!-- <a href="../apidoc/ol.interaction.Draw.html" title="API documentation for ol.interaction.Draw">ol.interaction.Draw</a> -->
        <a href="3.20.1/apidoc/ol.interaction.Draw.html" title="API documentation for ol.interaction.Draw">ol.interaction.Draw</a>
       </li>,
       <li>
        <!-- <a href="../apidoc/ol.interaction.Snap.html" title="API documentation for ol.interaction.Snap">ol.interaction.Snap</a> -->
        <a href="3.20.1/apidoc/ol.interaction.Snap.html" title="API documentation for ol.interaction.Snap">ol.interaction.Snap</a>
       </li>,
       <li>
        <!-- <a href="../apidoc/ol.layer.Tile.html" title="API documentation for ol.layer.Tile">ol.layer.Tile</a> -->
        <a href="3.20.1/apidoc/ol.layer.Tile.html" title="API documentation for ol.layer.Tile">ol.layer.Tile</a>
       </li>,
       <li>
        <!-- <a href="../apidoc/ol.layer.Vector.html" title="API documentation for ol.layer.Vector">ol.layer.Vector</a> -->
        <a href="3.20.1/apidoc/ol.layer.Vector.html" title="API documentation for ol.layer.Vector">ol.layer.Vector</a>
       </li>,
       <li>
        <!-- <a href="../apidoc/ol.source.OSM.html" title="API documentation for ol.source.OSM">ol.source.OSM</a> -->
        <a href="3.20.1/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> -->
        <a href="3.20.1/apidoc/ol.source.Vector.html" title="API documentation for ol.source.Vector">ol.source.Vector</a>
       </li>,
       <li>
        <!-- <a href="../apidoc/ol.style.Style.html" title="API documentation for ol.style.Style">ol.style.Style</a> -->
        <a href="3.20.1/apidoc/ol.style.Style.html" title="API documentation for ol.style.Style">ol.style.Style</a>
       </li>,
       <li>
        <!-- <a href="../apidoc/ol.style.Stroke.html" title="API documentation for ol.style.Stroke">ol.style.Stroke</a> -->
        <a href="3.20.1/apidoc/ol.style.Stroke.html" title="API documentation for ol.style.Stroke">ol.style.Stroke</a>
       </li>,
       <li>
        <!-- <a href="../apidoc/ol.style.Fill.html" title="API documentation for ol.style.Fill">ol.style.Fill</a> -->
        <a href="3.20.1/apidoc/ol.style.Fill.html" title="API documentation for ol.style.Fill">ol.style.Fill</a>
       </li>,
       <li>
        <!-- <a href="../apidoc/ol.style.Circle.html" title="API documentation for ol.style.Circle">ol.style.Circle</a> -->
        <a href="3.20.1/apidoc/ol.style.Circle.html" title="API documentation for ol.style.Circle">ol.style.Circle</a>
       </li>,
       <li>
        <!-- <a href="../apidoc/ol.style.Text.html" title="API documentation for ol.style.Text">ol.style.Text</a> -->
        <a href="3.20.1/apidoc/ol.style.Text.html" title="API documentation for ol.style.Text">ol.style.Text</a>
       </li>,
       <li>
        <!-- <a href="../apidoc/ol.control.MousePosition.html" title="API documentation for ol.control.MousePosition">ol.control.MousePosition</a> -->
        <a href="3.20.1/apidoc/ol.control.MousePosition.html" title="API documentation for ol.control.MousePosition">ol.control.MousePosition</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="http://jsfiddle.net/api/post/jquery/1.11.0/">
    <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>
  -->
  <!-- ディレクトリ修正
   CommonJS と
   prism.js
 -->
  <script src="v3.20.1/examples/resources/common.js"></script>
  <script src="v3.20.1/examples/resources/prism/prism.min.js"></script>
  <!-- 
  <script src="loader.js?id=topolis"></script>
  -->
  <!-- ファイル修正 -->  <!-- ディレクトリ修正 -->
  <script src="loader.js?id=2165-ol3ex"></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 - ol3.20ex 164b - Sea Level 2

「sea-level.js(2164-ol3ex.js)」は、マップを表示するための JavaScript ファイルです。

「2164-ol3ex.js」
function flood(pixels, data) {
 var pixel = pixels[0];
 if (pixel[3]) {
  var height = -10000 + ((pixel[0] * 256 * 256 + pixel[1] * 256 + pixel[2]) * 0.1);
  if (height <= data.level) {
   pixel[0] = 145;
   pixel[1] = 175;
   pixel[2] = 186;
   pixel[3] = 255;
  } else {
   pixel[3] = 0;
  }
 }
 return pixel;
}
var key = 'pk.eyJ...(省略)';
var elevation = new ol.source.XYZ({
/** ol.source.XYZ
 * Layer source for tile data with URLs in a set XYZ 
 * format that are defined in a URL template. By 
 * default, this follows the widely-used Google grid 
 * where x 0 and y 0 are in the top left. Grids like 
 * TMS where x 0 and y 0 are in the bottom left can 
 * be used by using the {-y} placeholder in the URL 
 * template, so long as the source does not have a 
 * custom tile grid. In this case, ol.source.TileImage 
 * can be used with a tileUrlFunction such as:
 *
 * tileUrlFunction: function(coordinate) { 
 *  return 'http://mapserver.com/' 
 *  + coordinate[0] + '/' 
 *  + coordinate[1] + '/' 
 *  + coordinate[2] + '.png'; }
 * 
 * URL テンプレートで定義されているセット XYZ 形式の URL 
 * を持つタイルデータのレイヤソース。デフォルトでは、これは、
 * x0 と y0 が左上にある広く使用されている Google のグリッド
 * に従います。x0 と y0 が左下にある TMS のようなグリッドは、
 * ソースがカスタムタイルグリッドを持っていない限り、URL テ
 * ンプレートに {-y} プレースホルダを使用して使用することが
 * できます。この場合、ol.source.TileImage は tileUrlFunction 
 * で次のように使用できます。(ol3 API)
 */
 url: 'https://api.mapbox.com/v4/mapbox.terrain-rgb/{z}/{x}/{y}.pngraw?access_token=' + key,
 /** url
  * URL template. Must include {x}, {y} or {-y}, and 
  * {z} placeholders. A {?-?} template pattern, for 
  * example subdomain{a-f}.domain.com, may be used 
  * instead of defining each one separately in the 
  * urls option.
  * URLテンプレート。 {x}、{y} または {-y}、と {z} プレー
  * スホルダを含める必要があります。例えば 
  * subdomain{a-f}.domain.com の {?-?} テンプレートパ
  * ターンは、urls オプションでそれぞれを個別に定義する代
  * わりに、使用することができます。(ol3 API)
  */
 crossOrigin: 'anonymous'
 /** crossOrigin:
  * The crossOrigin attribute for loaded images. Note 
  * that you must provide a crossOrigin value if you 
  * are using the WebGL renderer or if you want to 
  * access pixel data with the Canvas renderer. See 
  * https://developer.mozilla.org/en-US/docs/Web/HTML/
  * CORS_enabled_image for more detail.
  * ロードされたイメージの crossOrigin属性。WebGLのレンダ
  * ラーを使用している場合、または、キャンバスレンダラでピ
  * クセルデータにアクセスする場合、crossOrigin 値を提供な
  * ければならないことに注意してください。詳細は 
  * https://developer.mozilla.org/en-US/docs/Web/HTML/
  * CORS_enabled_image を参照してください。(ol3 API)
  */
});
var raster = new ol.source.Raster({
/** ol.source.Raster
 * A source that transforms data from any number of input 
 * sources using an array of ol.raster.Operation functions 
 * to transform input pixel values into output pixel values.
 * 入力画素値を出力画素値に変換するために ol.raster.Operation
 * 関数の配列を使用して、任意の数の入力ソースからデータを変換す
 * るソース。
 * (ol3 API [experimental])
 */
 sources: [elevation],
 operation: flood
 /** operation
 * Raster operation. The operation will be called with data 
 * from input sources and the output will be assigned to the
 * raster source.
 * ラスタオペレーション。operation は入力ソースからデータととも
 * に呼び出され、出力データはラスタ·ソースに割り当てられます。
 * (ol3 API [experimental])
 */
});
var map = new ol.Map({
 target: '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. 
   * プリレンダリング(事前描画)を提供するレイヤソースのため
   * の、特定の解像度でのズームレベルによって編成されているグ
   * リッドのタイルイメージ。(ol3 API)
   */
   source: new ol.source.XYZ({
    url: 'https://api.mapbox.com/styles/v1/tschaub/ciutc102t00c62js5fqd47kqw/tiles/256/{z}/{x}/{y}?access_token=' + key
   })
  }),
  new ol.layer.Image({
 /** ol.layer.Image
  * Server-rendered images that are available for arbitrary
  * extents and resolutions.
  * 任意の範囲と解像度で利用可能なサーバで描画されたイメージ。
  * (ol3 API)
  */
   opacity: 0.6,
   source: raster
  })
 ],
 view: new ol.View({
  center: ol.proj.fromLonLat([-122.3267, 37.8377]),
  /** ol.proj.fromLonLat(coordinate, opt_projection)
   * Transforms a coordinate from longitude/latitude to a 
   * different projection.
   * 緯度/経度座標から異なる投影に変換します。(ol3 API)
   */
  zoom: 11
 })
});
var control = document.getElementById('level');
var output = document.getElementById('output');
control.addEventListener('input', function() {
/** 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])
 */
 output.innerText = control.value;
 raster.changed();
 /** changed()
  * Increases the revision counter and dispatches a 
  * 'change' event.
  * リビジョンカウンタを増加し、「change」イベントを送出します。
  * (ol3 API[experimental])
  */
});
output.innerText = control.value;
raster.on('beforeoperations', function(event) {
/** on(type, listener, opt_this)
 * Listen for a certain type of event.
 * あるタイプのイベントをリッスンします。(ol3 API)
 */
 event.data.level = control.value;
});
var locations = document.getElementsByClassName('location');
/** getElementsByClassName
 * 与えられたクラス名で得られる要素の集合を返します。document 
 * オブジェクトで呼び出されたときは、ルートノードを含む、完全な
 * 文書が検索されます。任意の要素で getElementsByClassName 
 * を呼び出すこともできます。その場合は、与えられたクラス名を持
 * つ指定されたルート要素下の要素だけが返ります。
 * (MDN[https://developer.mozilla.org/ja/docs/Web/
 * API/Document/getElementsByClassName])
 */
for (var i = 0, ii = locations.length; i < ii; ++i) {
 locations[i].addEventListener('click', relocate);
}
function relocate(event) {
 var data = event.target.dataset;
 /** Event.target
  * A reference to the object that dispatched the event. 
  * It is different from event.currentTarget when the 
  * event handler is called during the bubbling or 
  * capturing phase of the event.
  * イベントをディスパッチしたオブジェクトへの参照です。 イベント
  * のバブリングまたはキャプチャフェーズでイベントハンドラが呼び
  * 出されたときは、event.currentTarget と異なります。
  * (MDN[https://developer.mozilla.org/en-US/docs/Web/
  * API/Event/target])
  */
 /** HTMLElement.dataset
  * The HTMLElement.dataset property allows access, both 
  * in reading and writing mode, to all the custom data 
  * attributes (data-*) set on the element, either in 
  * HTML or in the DOM.  It is a map of DOMString, one 
  * entry for each custom data attribute.  Note that the 
  * dataset property itself can be read, but not directly 
  * written.  Instead, all writes must be to its 
  * "properties", which in turn represent the data 
  * attributes.
  * HTMLElement.datasetプロパティを使用すると、読み取りモード
  * と書き込みモードの両方で、HTMLまたはDOMのいずれかの要素に設定
  * されているすべてのカスタムデータ属性(data- *)にアクセスでき
  * ます。 DOMString のマップで、各カスタムデータ属性のエントリで
  * す。 データセットプロパティ自体は読み込めますが、直接書き込む
  * ことはできません。 その代わりに、すべての書き込みはデータ属性
  * を表す「プロパティ」にする必要があります。   
  * (MDN[https://developer.mozilla.org/en-US/docs/Web/
  * API/HTMLElement/dataset])
  */
 var view = map.getView();
 /** getView()
  * Get the view associated with this map. A view 
  * manages properties such as center and resolution.
  * このマップと関連するビューを取得します。ビューは、
  * 中心や解像度のような属性を管理します。
  * Return: The view that controls this map.(ol3 API)
  */
 view.setCenter(ol.proj.fromLonLat(data.center.split(',').map(Number)));
 /** setCenter()
  * Set the center of the current view.
  * 現在のビューの中心を設定します。(ol3 API)
  */
 /** Number
  * Number JavaScript オブジェクトは、数値に作用するラッパー
  * オブジェクトです。Number オブジェクトは、Number() コンスト
  * ラクタを用いて生成します。
  * (MDN[https://developer.mozilla.org/ja/docs/Web/
  * JavaScript/Reference/Global_Objects/Number])
  */
 view.setZoom(Number(data.zoom));
 /** setZoom(zoom)
  * Zoom to a specific zoom level.
  * 指定したズームレベルにズームします。(ol3 API)
  */
}
 

2 - ol3.20ex 164a - Sea Level 1

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

This example uses a ol.source.Raster with Mapbox Terrain-RGB tiles to "flood" areas below the elevation shown on the sea level slider.

この例では、海面スライダで表示される海抜以下の浸水領域を示すために、Mapbox Terrain-RGB タイルを利用して ol.source.Raster を使用します。


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






b 「ファイルを開く」ウィンドウで、「user」->「mapsite」->「ol3proj」->「v3.20.1」->「examples」->「sea-level.html」をクリックして選択し、「OK」ボタンをクリックします。
同じように「sea-level.js」を開きます。





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




d 「ファイル」ウィンドウで「ol3proj」をクリックして選択し、「ファイル名」を「2164-ol3ex.html」と入力し、「次へ」ボタンをクリックします。








e 「File Template」ウィンドウで「HTML 5 Template」をクリックして選択し、「OK」ボタンをクリックします。











f 「sea-level.html」の内容をコピーして「2164-ol3ex.html」に貼り付け、修正します。
g 同じように、新規に「2164-ol3ex.js」ファイルを作成し、「File Template」ウィンドウで「JavaScript Template」をクリックして選択し、「完了」ボタンをクリックして、「sea-level.js」の内容をコピーして貼り付け、修正します。「sea-level-require.js」も「2164-ol3ex-require.js」に貼り付けます。

「2164-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-combined.min.css" type="text/css">
  <!--
  <link rel="stylesheet" href="../css/ol.css" type="text/css">
  <link rel="stylesheet" href="./resources/layout.css" type="text/css">

  <link rel="stylesheet" href="./resources/prism/prism.css" type="text/css">
  <script src="./resources/zeroclipboard/ZeroClipboard.min.js"></script>
  <link rel="stylesheet" href="sea-level.css">
  -->
  <!-- ディレクトリ修正 -->
  <link rel="stylesheet" href="v3.20.1/css/ol.css" type="text/css">
  <link rel="stylesheet" href="v3.20.1/examples/resources/layout.css" type="text/css">

  <link rel="stylesheet" href="v3.20.1/examples/resources/prism/prism.css" type="text/css">
  <link rel="stylesheet" href="v3.20.1/examples/sea-level.css">
  <script src="v3.20.1/examples/resources/zeroclipboard/ZeroClipboard.min.js"></script>
  <script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=fetch"></script>
  <title>Sea Level</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>
    -->
    <!-- ディレクトリ修正 -->
    <a class="navbar-brand" href="v3.20.1/examples/"><img src="v3.20.1/examples/resources/logo-70x70.png"> OpenLayers Examples</a>
    <!-- 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 href="v3.20.1/doc">Docs</a></li>
      <li><a class="active" href="index.html">Examples</a></li>
      <!-- <li><a href="../apidoc">Docs</a></li> -->
      <li><a href="v3.20.1/apidoc">API</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>3.20.1</span>. 
     The <a id="latest-link" href="#" class="alert-link">latest</a>
     is v<span id="latest-version"></span>.
    </div>
   </div>
   <div class="row-fluid">
    <div class="span12">
     <h4 id="title">Sea Level</h4>
     <div id="map" class="map"></div>
      <label>
       Sea level
       <input id="level" type="range" min="0" max="100" value="1"/>
        +<span id="output"></span> m
      </label>
      <br>
      Go to
      <a class="location" data-center="-122.3267,37.8377" data-zoom="11">San Francisco</a>,
      <a class="location" data-center="-73.9338,40.6861" data-zoom="11">New York</a>,
      <a class="location" data-center="72.9481,18.9929" data-zoom="11">Mumbai</a>, or
      <a class="location" data-center="120.831,31.160" data-zoom="9">Shanghai</a>
    </div>
   </div>
   <div class="row-fluid">
    <div class="span12">
     <p id="shortdesc">Render sea level at different elevations. 
      </p>
     <div id="docs"><p> 
      This example uses a <code>ol.source.Raster</code> with
      <a href="https://www.mapbox.com/blog/terrain-rgb/">
      Mapbox Terrain-RGB tiles</a> to &quot;flood&quot; areas 
      below the elevation shown on the sea level slider.</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> -->
        <a href="v3.20.1/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> -->
        <a href="v3.20.1/apidoc/ol.View.html" title="API documentation for ol.View">ol.View</a>
       </li>,
       <li>
        <!-- <a href="../apidoc/ol.layer.Image.html" title="API documentation for ol.layer.Image">ol.layer.Image</a> -->
        <a href="v3.20.1/apidoc/ol.layer.Image.html" title="API documentation for ol.layer.Image">ol.layer.Image</a>
       </li>,
       <li>
        <!-- <a href="../apidoc/ol.layer.Tile.html" title="API documentation for ol.layer.Tile">ol.layer.Tile</a> -->
        <a href="v3.20.1/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> -->
        <a href="v3.20.1/apidoc/ol.proj.html" title="API documentation for ol.proj">ol.proj</a>
       </li>,
       <li>
        <!-- <a href="../apidoc/ol.source.Raster.html" title="API documentation for ol.source.Raster">ol.source.Raster</a> -->
        <a href="v3.20.1/apidoc/ol.source.Raster.html" title="API documentation for ol.source.Raster">ol.source.Raster</a>
       </li>,
       <li>
        <!-- <a href="../apidoc/ol.source.XYZ.html" title="API documentation for ol.source.XYZ">ol.source.XYZ</a> -->
        <a href="v3.20.1/apidoc/ol.source.XYZ.html" title="API documentation for ol.source.XYZ">ol.source.XYZ</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="http://jsfiddle.net/api/post/jquery/1.11.0/">
     <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>
  -->
  <!-- ディレクトリ修正
   CommonJS と
   prism.js
 -->
  <script src="v3.20.1/examples/resources/common.js"></script>
  <script src="v3.20.1/examples/resources/prism/prism.min.js"></script>
  <!-- 
  <script src="loader.js?id=sea-level"></script>
  -->
  <!-- ファイル修正 -->  <!-- ディレクトリ修正 -->
  <script src="loader.js?id=2164-ol3ex"></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 - ol3.20ex 163b - Pinch Zoom 2

「pinch-zoom.js(2163-ol3ex.js)」は、マップを表示するための JavaScript ファイルです。

「2163-ol3ex.js」
var map = new ol.Map({
 interactions: ol.interaction.defaults({pinchZoom: false}).extend([
 /** ol.interaction.defaults
  * Set of interactions included in maps by default. 
  * Specific interactions can be excluded by setting 
  * the appropriate option to false in the constructor 
  * options, but the order of the interactions is fixed. 
  * If you want to specify a different order for 
  * interactions, you will need to create your own 
  * ol.interaction.Interaction instances and insert 
  * them into a ol.Collection in the order you want 
  * before creating your ol.Map instance.
  * デフォルトでマップに含まれるインターラクションのセット。
  * 具体的なインターラクションは、コンストラクタのオプションで適
  * 切なオプションを false に設定することで除外することができま
  * すが、インターラクションの順番は固定されています。インターラ
  * クションに対して別の順番を指定したい場合は、独自の
  * ol.interaction.Interaction インスタンスを作成し、
  * ol.Map インスタンスを作成する前に、望む順番で 
  * ol.Collection にそれらを挿入する必要があります。(ol3 API)
  * new ol.interaction.DragRotateAndZoom()
  *(訳注:インターラクションの順番は、API を参照してください。)
  */
  new ol.interaction.PinchZoom({
  /**ol.interaction.PinchZoom
   * Allows the user to zoom the map by pinching with two 
   * fingers on a touch screen.
   * ユーザがタッチスクリーン上で2つの指で挟むことによってマッ
   * プをズームできるようにします。
   */
   constrainResolution: true // force zooming to a integer zoom
   /** constrainResolution
    * Zoom to the closest integer zoom level after the 
    * pinch gesture ends. Default is false.
    * 挟む動作終了後に最も近い整数のズームレベルにズームします。
    * デフォルトは、false。
    * (ol3 API experimental)
    */
  })
 ]),
 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. 
   * プリレンダリング(事前描画)を提供するレイヤソースのため
   * の、特定の解像度でのズームレベルによって編成されているグ
   * リッドのタイルイメージ。(ol3 API)
   */
   source: new ol.source.OSM()
   /** ol.source.OSM 
    * Layer source for the OpenStreetMap tile server.
    * OpenStreetMap タイルサーバのレイヤソース。(ol3 API)
    */
  })
 ],
 target: 'map',
 view: new ol.View({
  center: [0, 0],
  zoom: 2
 })
});


2 - ol3.20ex 163a - Pinch Zoom 1

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

By default, the ol.interaction.PinchZoom can leave the map at fractional zoom levels. If instead you want to constrain pinch zooming to integer zoom levels, set constrainResolution: true when constructing the interaction.

デフォルトでは、ol.interaction.PinchZoom はマップを分数ズームレベルのままにしておくことができます。 代わりに、ピンチズームを整数ズームレベルに制限する場合は、インタラクションを構築するときに「constrainResolution:true」を設定します。

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






b 「ファイルを開く」ウィンドウで、「user」->「mapsite」->「ol3proj」->「v3.20.1」->「examples」->「pinch-zoom.html」をクリックして選択し、「OK」ボタンをクリックします。
同じように「pinch-zoom.js」を開きます。





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




d 「ファイル」ウィンドウで「ol3proj」をクリックして選択し、「ファイル名」を「2163-ol3ex.html」と入力し、「次へ」ボタンをクリックします。








e 「File Template」ウィンドウで「HTML 5 Template」をクリックして選択し、「OK」ボタンをクリックします。











f 「pinch-zoom.html」の内容をコピーして「2163-ol3ex.html」に貼り付け、修正します。
g 同じように、新規に「2163-ol3ex.js」ファイルを作成し、「File Template」ウィンドウで「JavaScript Template」をクリックして選択し、「完了」ボタンをクリックして、「pinch-zoom.js」の内容をコピーして貼り付け、修正します。「pinch-zoom-require.js」も「2163-ol3ex-require.js」に貼り付けます。

「2163-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-combined.min.css" type="text/css">
  <!--
  <link rel="stylesheet" href="../css/ol.css" type="text/css">
  <link rel="stylesheet" href="./resources/layout.css" type="text/css">

  <link rel="stylesheet" href="./resources/prism/prism.css" type="text/css">
  <script src="./resources/zeroclipboard/ZeroClipboard.min.js"></script>
  -->
  <!-- ディレクトリ修正 -->
  <link rel="stylesheet" href="v3.20.1/css/ol.css" type="text/css">
  <link rel="stylesheet" href="v3.20.1/examples/resources/layout.css" type="text/css">

  <link rel="stylesheet" href="v3.20.1/examples/resources/prism/prism.css" type="text/css">
  <script src="v3.20.1/examples/resources/zeroclipboard/ZeroClipboard.min.js"></script>
  <script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=fetch"></script>
  <title>Pinch Zoom</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>
    -->
    <!-- ディレクトリ修正 -->
    <a class="navbar-brand" href="v3.20.1/examples/"><img src="v3.20.1/examples/resources/logo-70x70.png"> OpenLayers Examples</a>
    <!-- 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 href="v3.20.1/doc">Docs</a></li>
      <li><a class="active" href="index.html">Examples</a></li>
      <!-- <li><a href="../apidoc">Docs</a></li> -->
      <li><a href="v3.20.1/apidoc">API</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>3.20.1</span>. 
     The <a id="latest-link" href="#" class="alert-link">latest</a>
     is v<span id="latest-version"></span>.
    </div>
   </div>
   <div class="row-fluid">
    <div class="span12">
     <h4 id="title">Pinch Zoom</h4>
     <div id="map" class="map"></div>
    </div>
   </div>
   <div class="row-fluid">
    <div class="span12">
     <p id="shortdesc">Restrict pinch zooming to integer zoom 
      levels.</p>
     <div id="docs">By default, the 
      <code>ol.interaction.PinchZoom</code> can leave the map 
      at fractional zoom levels. If instead you want to 
      constrain pinch zooming to integer zoom levels, set 
      <code>constrainResolution: true</code> when constructing 
      the interaction.</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> -->
        <a href="v3.20.1/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> -->
        <a href="v3.20.1/apidoc/ol.View.html" title="API documentation for ol.View">ol.View</a>
       </li>,
       <li>
        <!-- <a href="../apidoc/ol.interaction.html" title="API documentation for ol.interaction">ol.interaction</a> -->
        <a href="v3.20.1/apidoc/ol.interaction.html" title="API documentation for ol.interaction">ol.interaction</a>
       </li>,
       <li>
        <!-- <a href="../apidoc/ol.interaction.PinchZoom.html" title="API documentation for ol.interaction.PinchZoom">ol.interaction.PinchZoom</a> -->
        <a href="v3.20.1/apidoc/ol.interaction.PinchZoom.html" title="API documentation for ol.interaction.PinchZoom">ol.interaction.PinchZoom</a>
       </li>,
       <li>
        <!-- <a href="../apidoc/ol.layer.Tile.html" title="API documentation for ol.layer.Tile">ol.layer.Tile</a> -->
        <a href="v3.20.1/apidoc/ol.layer.Tile.html" title="API documentation for ol.layer.Tile">ol.layer.Tile</a>
       </li>,
       <li>
        <!-- <a href="../apidoc/ol.source.OSM.html" title="API documentation for ol.source.OSM">ol.source.OSM</a> -->
        <a href="v3.20.1/apidoc/ol.source.OSM.html" title="API documentation for ol.source.OSM">ol.source.OSM</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="http://jsfiddle.net/api/post/jquery/1.11.0/">
     <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>
  -->
  <!-- ディレクトリ修正
   CommonJS と
   prism.js
 -->
  <script src="v3.20.1/examples/resources/common.js"></script>
  <script src="v3.20.1/examples/resources/prism/prism.min.js"></script>
  <!-- 
  <script src="loader.js?id=pinch-zoom"></script>
  -->
  <!-- ファイル修正 -->  <!-- ディレクトリ修正 -->
  <script src="loader.js?id=2163-ol3ex"></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 のコンテキストメニューが表示されると動作しています。

v3.20.1 がリリースされました

v3.20.1 がリリースされました
日本時間で(2016.12.22)に v3.20.1 がリリースされました。

Releases - openlayers/ol3 GitHub
(https://github.com/openlayers/ol3/releases)より


v3.20.1
Summary

The v3.20.1 release is a patch release that addresses two regressions in the v3.20.0 release. See the v3.20.0 release notes for details on upgrading from v3.19.x.
v3.20.1 リリースは、v3.20.0 での回帰に対処するパッチリリースです。v3.19.x からのアップグレードの詳細について v3.20.0 リリースノートを参照してください。


v3.20.0 がリリースされました
日本時間で(2016.12.12)に v3.20.0 がリリースされました。

Releases - openlayers/ol3 GitHub
(https://github.com/openlayers/ol3/releases)より

v3.20.0
Summary

The v3.20.0 release includes enhancements and fixes from 89 pull requests since the previous release.

v3.20.0 リリースは 前のリリースから、89のプルリクエスト(訳注:Git でリクエストを出す機能)からの拡張と修正が含まれています。

Among the changes, take a look at the new view.animate() function. This replaces the previous map.beforeRender() and ol.animation functions with more intuitive view animations that allow for chaining together multiple transitions and support a callback on animation end. In addition, two or more maps that share a view will be animated together. See the upgrade notes and the animation example for more detail.

変更の中で、new view.animate() 関数を見てみます。 これは、以前の map.beforeRender() および ol.animation 関数を、複数のトランジションを連鎖させ、アニメーション終了時のコールバックをサポートする、より直観的な view animation に置き換えます。 さらに、ビューを共有する2つまたはそれ以上のマップが、一緒にアニメーション化されます。 詳細については、アップグレードノートとアニメーションの例を参照してください。

On the subject of view transitions, scrolling with a trackpad or magic mouse now transitions the view resolution smoothly. Instead of jumping to the next integer zoom level, trackpad or magic mouse scrolling can leave the view at a fractional zoom level. In line with this trackpad behavior, pinch zooming on touch devices also now leaves the view at a fractional zoom level (see the upgrade notes for an option to restore the old behavior).

view transition (ビュー遷移)の対象では、トラックパッドまたはマジックマウスを使用してスクロールすると、ビューの解像度がスムーズに移行します。 次の整数ズームレベルにジャンプする代わりに、トラックパッドまたはマジックマウスのスクロールで、ビューを分数のズームレベルにすることができます。 このトラックパッドの動作に合わせて、タッチデバイスのピンチズームも分数ズームレベルになりました(以前の動作を復元するオプションについては、アップグレードノートを参照してください)。

On the rendering front, the Canvas renderer got another overhaul. This release brings back the strategy of rendering to a dedicated Canvas element per layer. If you were experiencing issues with gaps between tiles on rotated views or when zooming, this change should bring rendering improvements.

正面のレンダリングでは、キャンバスレンダラ(Canvas renderer)がもう一つのオーバーホールを取得します。 このリリースでは、レンダリングするストラテジをレイヤごとに専用の Canvas 要素に戻しています。 回転したビューやズーミングの際にタイル間にずれる問題が発生した場合、この変更によってレンダリングの改善が得られるはずです。

Also on the rendering front, @GaborFarkas completed a nearly 5 month effort to bring line and polygon support to the WebGL renderer. If you're interested in experimenting with WebGL for vector rendering, use renderer: 'webgl' in your map constructor.

正面のレンダリングでも、@GaborFarkasは、WebGLレンダラにラインとポリゴンのサポートを提供するために約5か月の作業を完了しました。 ベクタレンダリングのために WebGL を試したい場合は、マップコンストラクタで「renderer: 'webgl'」を使用してください。

See the full list of changes below. There are some other gems down there.

変更の完全なリストは以下を参照してください。 そこにはいくつかの宝石があります。

Upgrade notes

Use view.animate() instead of map.beforeRender() and ol.animation functions

The map.beforeRender() and ol.animation functions have been deprecated in favor of a new view.animate() function. Use of the deprecated functions will result in a warning during development. These functions are subject to removal in an upcoming release.

map.beforeRender() および ol.animation 関数は、新しい view.animate() 関数のために推奨されなくなりました。 推奨されない関数を使用すると、開発中に警告が表示されます。 これらの関数は、今後のリリースで削除される可能性があります。

For details on the view.animate() method, see the API docs and the view animation example. Upgrading should be relatively straightforward. For example, if you wanted to have an animated pan, zoom, and rotation previously, you might have done this:

view.animate() メソッドの詳細については、API ドキュメントと view animation の例を参照してください。 アップグレードは比較的簡単です。 たとえば、以前は、パン、ズーム、回転をアニメーション化したい場合は、次のようにします。
var zoom = ol.animation.zoom({
  resolution: view.getResolution()
});
var pan = ol.animation.pan({
  source: view.getCenter()
});
var rotate = ol.animation.rotate({
  rotation: view.getRotation()
});

map.beforeRender(zoom, pan, rotate);

map.setZoom(1);
map.setCenter([0, 0]);
map.setRotation(Math.PI);

Now, the same can be accomplished with this:

現在は、これで同じことができます:
view.animate({
  zoom: 1,
  center: [0, 0],
  rotation: Math.PI
});


ol.Map#forEachFeatureAtPixel and ol.Map#hasFeatureAtPixel parameters have changed

ol.Map#forEachFeatureAtPixel および ol.Map#hasFeatureAtPixel パラメータが変更されました。

If you are using the layer filter of one of these methods, please note that you now have to pass in the layer filter via an ol.AtPixelOptions object. If you are not using the layer filter the usage has not changed.

これらのメソッドのレイヤフィルタを使用している場合は、ol.AtPixelOptions オブジェクトを介してレイヤフィルタを渡す必要があることに注意してください。 レイヤフィルタを使用していない場合、使用方法は変更されていません。

Old syntax:
map.forEachFeatureAtPixel(pixel, callback, callbackThis, layerFilterFn, layerFilterThis);

map.hasFeatureAtPixel(pixel, layerFilterFn, layerFilterThis);

New syntax:
map.forEachFeatureAtPixel(pixel, callback.bind(callbackThis), {
  layerFilter: layerFilterFn.bind(layerFilterThis)
});

map.hasFeatureAtPixel(pixel, {
  layerFilter: layerFilterFn.bind(layerFilterThis)
});

This change is due to the introduction of the hitTolerance parameter which can be passed in via this ol.AtPixelOptions object, too.

この変更は、この ol.AtPixelOptions オブジェクトを介して渡すことができるhitToleranceパラメータの導入によるものです。


Use ol.proj.getPointResolution() instead of projection.getPointResolution()

The experimental getPointResolution method has been removed from ol.Projection instances. Since the implementation of this method required an inverse transform (function for transforming projected coordinates to geographic coordinates) and ol.Projection instances are not constructed with forward or inverse transforms, it does not make sense that a projection instance can always calculate the point resolution.

実験的な getPointResolution メソッドが ol.Projection インスタンスから削除されました。 このメソッドの実装には 逆変換(投影座標を地理座標に変換する関数)が必要であり、ol.Projectionインスタンスは順変換または逆変換で構成されていないため、投影インスタンスが常に点の解像度を計算できることは意味がありません。

As a substitute for the projection.getPointResolution() function, a ol.proj.getPointResolution() function has been added. To upgrade, you will need to change things like this:

projection.getPointResolution() 関数の代わりに、ol.proj.getPointResolution() 関数が追加されました。 アップグレードするには、次のように変更する必要があります:
projection.getPointResolution(resolution, point);

into this:
ol.proj.getPointResolution(projection, resolution, point);

Note that if you were previously creating a projection with a getPointResolution function in the constructor (or calling projection.setGetPointResolution() after construction), this function will be used by ol.proj.getPointResolution().

以前、コンストラクタで getPointResolution 関数を使用して投影を作成していた場合(または、作成後に projection.setGetPointResolution() を呼び出した場合)、この関数は ol.proj.getPointResolution() によって使用されることに注意してください。


ol.interaction.PinchZoom no longer zooms to a whole-number zoom level after the gesture ends

The old behavior of ol.interaction.PinchZoom was to zoom to the next integer zoom level after the user ends the gesture.

ol.interaction.PinchZoom の古い動作は、ユーザーがジェスチャーを終了した後、次の整数ズームレベルにズームすることでした。

Now the pinch zoom keeps the user selected zoom level even if it is a fractional zoom.

ピンチズームは、分数ズームであっても、ユーザーが選択したズームレベルを維持します。

To get the old behavior set the new constrainResolution parameter to true like this:

古い動作を取得するには、次のように新しいconstrainResolutionパラメータをtrueに設定します。

new ol.interaction.PinchZoom({constrainResolution: true})

See the pinch zoom example for a complete implementation.

完全な実装については、ピンチズームの例を参照してください。


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


OpenLayers 3 のホームページ(http://openlayers.org/)の「LATEST」の文中の「v3.20.1」をクリックします。
開いたページ「Downloads for the v3.20.1 release(http://openlayers.org/download/)」の「v3.20.1.zip」ボタンをクリックしてダウンロードします。
展開したフォルダを Eclipse の ol3proj にコピーします。

ディレクトリは次のようにしました。
ol3proj
|-v3.0.0/
|-v3.1.1/
|-v3.2.0/
|-v3.2.1/
|-v3.3.0/
|-v3.4.0/
|-v3.5.0/
|-v3.6.0/
|-v3.7.0/
|-v3.8.2/
|-v3.9.0/
|-v3.10.1/
|-v3.11.2/
|-v3.12.1/
|-v3.13.1/
|-v3.14.0/
|-v3.15.0/
|-v3.16.0/
|-v3.17.0/
|-v3.18.1/
|-v3.19.0/
|-v3.20.1/
|-2xx-ol3ex.html
|-2xx-ol3ex.js
|-2xx-ol3ex-require.js
|-loader.js
|-loader-v3.0.0.js
|-loader-v3.1.1.js
|-loader-v3.2.0.js
|-loader-v3.2.1.js
|-loader-v3.3.0.js
|-loader-v3.4.0.js
|-loader-v3.5.0.js
|-loader-v3.6.0.js
|-loader-v3.7.0.js
|-loader-v3.8.2.js
|-loader-v3.9.0.js
|-loader-v3.10.1.js
|-loader-v3.11.2.js
|-loader-v3.12.1.js
|-loader-v3.13.1.js
|-loader-v3.14.0.js
|-loader-v3.15.0.js
|-loader-v3.16.0.js
|-loader-v3.17.0.js
|-loader-v3.18.1.js

v.3.19.0 の loader.js の名前を loader-v3.19.0.js に変更し、v3.20.1/examples/loader.js を ol3proj 直下にコピーします。
ol3proj
|-v3.0.0/
|-v3.1.1/
|-v3.2.0/
|-v3.2.1/
|-v3.3.0/
|-v3.4.0/
|-v3.5.0/
|-v3.6.0/
|-v3.7.0/
|-v3.8.2/
|-v3.9.0/
|-v3.10.1/
|-v3.11.2/
|-v3.12.1/
|-v3.13.1/
|-v3.14.0/
|-v3.15.0/
|-v3.16.0/
|-v3.17.0/
|-v3.18.1/
|-v3.19.0/
|-v3.20.1/
|-2xx-ol3ex.html
|-2xx-ol3ex.js
|-2xx-ol3ex-require.js
|-loader.js
|-loader-v3.0.0.js
|-loader-v3.1.1.js
|-loader-v3.2.0.js
|-loader-v3.2.1.js
|-loader-v3.3.0.js
|-loader-v3.4.0.js
|-loader-v3.5.0.js
|-loader-v3.6.0.js
|-loader-v3.7.0.js
|-loader-v3.8.2.js
|-loader-v3.9.0.js
|-loader-v3.10.1.js
|-loader-v3.11.2.js
|-loader-v3.12.1.js
|-loader-v3.13.1.js
|-loader-v3.14.0.js
|-loader-v3.15.0.js
|-loader-v3.16.0.js
|-loader-v3.17.0.js
|-loader-v3.18.1.js
|-loader-v3.19.0.js

loader.js の内容を次のように修正します。

---
  if (!raw) {
    // document.write('<scr' + 'ipt type="text/javascript" src="../build/ol.js"></scr' + 'ipt>');
     // ディレクトリ修正
    document.write('<scr' + 'ipt type="text/javascript" src="v3.20.1/build/ol.js"></scr' + 'ipt>');

  } else {
    window.CLOSURE_NO_DEPS = true; // we've got our own deps file
    // document.write('<scr' + 'ipt type="text/javascript" src="../closure-library/closure/goog/base.js"></scr' + 'ipt>');
    // document.write('<scr' + 'ipt type="text/javascript" src="../build/ol-deps.js"></scr' + 'ipt>');
     // ディレクトリ修正
    document.write('<scr' + 'ipt type="text/javascript" src="v3.20.1/closure-library/closure/goog/base.js"></scr' + 'ipt>');
    document.write('<scr' + 'ipt type="text/javascript" src="v3.20.1/build/ol-deps.js"></scr' + 'ipt>');

    document.write('<scr' + 'ipt type="text/javascript" src="' + scriptId + '-require.js"></scr' + 'ipt>');
  }
  document.write('<scr' + 'ipt type="text/javascript" src="' + scriptId + '.js"></scr' + 'ipt>');
}());