2017年10月10日火曜日

2 - ol4.4ex 173b - Tile Transitions 2

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


「2173-ol4ex.js」
var url = 'https://{a-c}.tiles.mapbox.com/v3/mapbox.world-bright/{z}/{x}/{y}.png';
var withTransition = 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.XYZ({url: url})
 /** 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 
  * で次のように使用できます。(ol4 API)
  */
 /** 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 オプションでそれぞれを個別に定義する代
  * わりに、使用することができます。(ol4 API)
  */
});
var withoutTransition = new ol.layer.Tile({
 source: new ol.source.XYZ({url: url, transition: 0}),
 /** transition:
  * Duration of the opacity transition for rendering. 
  * To disable the opacity transition, pass 
  * transition: 0.
  * レンダリングのための不透明度遷移のデュレーション(期限)。
  *  不透明度の遷移を無効にするには、transition:0を渡します。
  * (ol4 API)
  */
 visible: false
 /** visible:
  * Visibility. Default is true (visible).(ol4 API)
  */
});
var map = new ol.Map({
 layers: [withTransition, withoutTransition],
 target: 'map',
 view: new ol.View({
  center: [0, 0],
  zoom: 2,
  maxZoom: 11
 })
});
document.getElementById('transition').addEventListener('change', function(event) {
/** EventTarget.addEventListener
 * The EventTarget.addEventListener() method adds the 
 * specified EventListener-compatible object to the 
 * list of event listeners for the specified event 
 * type on the EventTarget on which it is called. 
 * 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() メソッドは、指定された
 * EventListener 互換オブジェクトを、呼び出される 
 * EventTarget の指定されたイベントタイプのイベントリスナのリ
 * ストに追加します。イベントターゲットは、ドキュメントの Element、
 * Document 自身、Window、または(XMLHttpRequest などの)
 * イベントをサポートしている他のオブジェクトです。
 * (MDN[https://developer.mozilla.org/en-US/docs/Web/
 * API/EventTarget/addEventListener])
 */
 var transition = event.target.checked;
 withTransition.setVisible(transition);
 /** setVisible(visible)
  * Set the visibility of the layer (true or false).
  * レイヤの可視性(true または false)を設定します。
  * (ol4 API)
  */
 withoutTransition.setVisible(!transition);
});
 
 

2 - ol4.4ex 173a - Tile Transitions 1

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

By default tiles are rendered with an opacity transition - fading in over 250 ms. To disable this behavior, set the transition option of the tile source to 0.

デフォルトでは、タイルは不透明なトランジションでレンダリングされます。フェーディングは250ミリ秒を超えます。 この動作を無効にするには、タイルソースのトランジションオプションを0に設定します。



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



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



(この状態でファイル名をキーボードで打つと検索欄が表示されて候補が絞り込めます。)

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



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







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

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






「2173-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>Tile Transitions</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">API</a></li>
      <li><a href="https://github.com/openlayers/openlayers">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.3.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">Tile Transitions</h4>
     <div id="map" class="map"></div>
     <label>
      render with an opacity transition
     <input id="transition" type="checkbox" checked>
    </label>
    </div>
   </div>
   <div class="row-fluid">
    <div class="span12">
     <p id="shortdesc">Custom configuration for opacity 
      transitions on tiles.</p>
     <div id="docs"><p>By default tiles are rendered 
      with an opacity transition - fading in over 250 ms.  
      To disable this behavior, set the <code>transition
      </code> option of the tile source to 0.</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.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="codepen-button">
      <i class="fa fa-codepen"></i> Edit
     </a>
    </div>
    <form method="POST" id="codepen-form" target="_blank" action="https://codepen.io/pen/define/">
     <textarea class="hidden" name="title">Tile Transitions</textarea>
     <textarea class="hidden" name="description">Custom configuration for opacity transitions on tiles.</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=tile-transitions"></script>
  -->
  <!-- ファイル修正 -->
  <script src="loader.js?id=2173-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]) && '4.1.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 9 では動作しませんでした。ボタンを右クリックしたときに flash のコンテキストメニューが表示されると動作しています。

2017年10月7日土曜日

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

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

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

4.4.2

The v4.4.2 fixes a number of rendering issues in the 4.4 releases.

v4.4.2 には、4.4 リリースの数個のレンダリング問題を修正します。


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

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

4.4.1

The v4.4.1 release includes a fixe for the ol package and a fix for a tile rendering regression.

v4.4.1 には、ol パッケージの修正とタイルレンダリングリグレッションの修正が含まれています。


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

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

4.4.0
Summary

The 4.4.0 release includes features and fixes from 80 pull requests, including first time contributions from @EduardoNogueira, @ath0mas, @f7o, @trevorblades, @viethang, and @wb14123. There are some really nice rendering enhancements included in this release. It is now possible to render labels along lines (see #7239 for more detail) and polygon labels are only rendered if they fit within the polygon (#7292). In addition, we now render tiles with an opacity transition, so tiled layers more gracefully fade in (#7267).

4.4.0リリースには、@EduardoNogueira、@ath0mas、@ f7o、@trevorblades、@viethang、および @wb14123 からの初めての貢献などが含まれた、80のプルリクエストの機能と修正が含まれています。 このリリースには、本当に素晴らしいレンダリング拡張がいくつか追加されています。 線に沿ってラベルをレンダリングすることが可能になり(詳細は#7239を参照)、ポリゴンラベルはポリゴン内に収まる場合にのみレンダリングされます(#7292)。 さらに、不透明なトランジション(遷移)でタイルをレンダリングするので、タイルレイヤはよりスムーズにフェードインします(#7267)。

(Full List of Changes リストはサイトをみてください。)


OpenLayers のダウンロード
OpenLayers のホームページ(http://openlayers.org/)の「LATEST」の文中の「v4.4.1」をクリックします。


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


■参考■
「The ol package」と「Hosted builds for development」には、次のようなことが記載されています。

The ol package

The recommended way to use OpenLayers is to work with the ol package. You can install the latest with npm:

OpenLayers を使用する推奨方法は、ol パッケージで作業することです。npm で最新版をインストールできます:

npm install ol


Hosted builds for development

If you want to try out OpenLayers without downloading anything, a full build of each release which can be used in a script tag is available from cdnjs. You will need both the JS build and the CSS files; see the examples or the Quickstart tutorial for usage. Note that you should not use a full build in production, instead you are encouraged to use the ol package described above.

ダウンロードしないで OpenLayers を試したい場合は、スクリプトタグで使用できる各リリースのフルビルドを cdnjs から入手できます。 JSビルドファイルとCSSファイルの両方が必要になります。 使用例については、examples または Quickstart tutorial を参照してください。 本番環境では完全ビルドを使用しないでください。代わりに、上記の ol パッケージを使用することをお勧めします。
■ここまで■

次のようなダイアログが表示されたら「ファイルを保存する」のラジオボタンがオンになっていることを確認して「OK」ボタンをクリックします。



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

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

ol4proj フォルダに、解凍した v4.4.1 フォルダを eclipse にインポートします。
eclipse を起動します。

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

起動の途中で「ワークスペースの選択」ウィンドウが表示されます。
「参照」ボタンをクリックして /home/user/public_html/eclipse-workspace でとりあえず「OK」をクリックします。(Web ブラウザで表示しやすくするため eclipse-workspace を /home/user/public_html に移動しました。)


メニューの ファイル -> インポート をクリックします。











「インポート」ダイアログの「選択」の「インポート・ウィザードの選択(S):」で、一般 -> ファイル・システム をクリックして選択し、「次へ」ボタンをクリックします。







「インポート」ダイアログの「ファイル・システム」の「次のディレクトリから(Y):」欄の右側の「参照(R)」ボタンをクリックします。







「ディレクトリーからインポート」ダイアログで左側の「ホーム」をクリックして、表示された「名前」欄の「ダウンロード」をクリックして選択し、「OK」ボタンをクリックします。





「インポート」ダイアログの「ファイル・システム」の「ダウンロード」の左側の三角形をクリックして「ダウンロード」以下の一覧を表示し、「v4.4.1」をクリックして選択します。





「インポート」ダイアログの「ファイル・システム」の「宛先フォルダー(L):」欄の右側の「参照(W)」ボタンをクリックします。



「フォルダーにインポート」ダイアログで「ol4proj」をクリックして選択し、「OK」ボタンをクリックします。











「インポート」ダイアログの「ファイル・システム」の「完了(F)」ボタンをクリックします。




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

追加された Examples を試してみます。