2015年11月30日月曜日

2 - ol3.11ex 134b - Animate a feature movement 2

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

「2134-ol3ex.js」
// This long string is placed here due to jsFiddle 
// limitations. It is usually loaded with AJAX.
// この長い文字列は、jsFiddleの制限が原因でここに置かれています。
// これは通常、Ajaxを使ってロードされます。
var polyline = [
  (省略)
].join('');
/** Array.prototype.join()
 * join() メソッドは、配列のすべての要素を繋いで文字列にします。
 * (MDN[https://developer.mozilla.org/ja/docs/Web/
 * JavaScript/Reference/Global_Objects/Array/join])
 */
var route = /** @type {ol.geom.LineString} */ (new ol.format.Polyline({
/** @type 
 * 値のタイプ(型)の説明 - 式などで表示
 * (@use JSDoc[http://usejsdoc.org/]より)
 */
/** ol.format.Polyline
 * Feature format for reading and writing data in the 
 * Encoded Polyline Algorithm Format.
 * Encoded Polyline Algorithm Format でデータを読み書きす
 * るためのフィーチャフォーマット。
 * (ol3 API)
 */
 factor: 1e6
 /** factor
  * The factor by which the coordinates values will be 
  * scaled. Default is 1e5. Required.
  * 座標値がスケーリングされることによるファクタ。
  * デフォルトは 1E5。必須。
  * (ol3 API)
  */
}).readGeometry(polyline, {
/** readGeometry(source, opt_options)
 * Read the geometry from the source.
 * ソースからジオメトリを読み込みます。
 * (ol3 API)
 */
 dataProjection: 'EPSG:4326',
 /** dataProjection
  * Projection of the data we are reading. If not provided, 
  * the projection will be derived from the data (where 
  * possible) or the defaultDataProjection of the format 
  * is assigned (where set). If the projection can not be 
  * derived from the data and if no defaultDataProjection 
  * is set for a format, the features will not be 
  * reprojected.
  * 読み込んでいるデータの投影。提供されていない場合、投影は
  * (可能な場合)データに由来し、または、フォーマットの 
  * defaultDataProjection は(セットの場合)割り当てられま
  * す。します。投影がデータに由来できない場合、および、
  * defaultDataProjection がフォーマットに設定されていない
  * 場合、フィーチャが再投影されることはありません。
  * (ol3 API)
  */
 featureProjection: 'EPSG:3857'
 /** featureProjection
  * Projection of the feature geometries created by the 
  * format reader. If not provided, features will be 
  * returned in the dataProjection.
  * フォーマットリーダーによって作成されたフィーチャジオメトリ
  * の投影。提供されていない場合、フィーチャが dataProjection 
  * に返されます。
  * (ol3 API)
  */
}));
var routeCoords = route.getCoordinates();
/** getCoordinates()
 * Return the coordinates of the linestring.
 * ラインストリングの座標を返します
 */
var routeLength = routeCoords.length;
var routeFeature = 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)
 */
 type: 'route',
 geometry: route
});
var geoMarker = new ol.Feature({
 type: 'geoMarker',
 geometry: new ol.geom.Point(routeCoords[0])
 /** ol.geom.Point
  * Point geometry.(ol3 API)
  */
});
var startMarker = new ol.Feature({
 type: 'icon',
 geometry: new ol.geom.Point(routeCoords[0])
});
var endMarker = new ol.Feature({
 type: 'icon',
 geometry: new ol.geom.Point(routeCoords[routeLength - 1])
});
var styles = {
 'route': 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[説明は Stable Only のチェックを外すと表示])
  */
  stroke: new ol.style.Stroke({
  /** ol.style.Stroke 
   * Set stroke style for vector features. 
   * Note that the defaults given are the Canvas defaults, 
   * which will be used if option is not defined. 
   * The get functions return whatever was entered in the 
   * options;  they will not return the default.
   * ベクタフィーチャのためのストロークスタイルの設定。
   * デフォルトは、オプションが定義されていない場合に使用され
   * る Canvas のデフォルトを与えられることに注意してください。
   * GET 関数は、オプションで入力されたものはすべて返します。
   * それらはデフォルトを返しません。
   * (ol3 API[説明は Stable Only のチェックを外すと表示])
   */
   width: 6, color: [237, 212, 0, 0.8]
  })
 }),
 'icon': new ol.style.Style({
  image: new ol.style.Icon({
  /** ol.style.Icon 
   * Set icon style for vector features.
   * ベクタフィーチャのアイコンスタイルを設定します。
   * (ol3 API[説明は Stable Only のチェックを外すと表示])
   */
   anchor: [0.5, 1],
   // src: 'data/icon.png'
   src: 'v3.11.2/examples/data/icon.png'
  })
 }),
 'geoMarker': new ol.style.Style({
  image: new ol.style.Circle({
  /** ol.style.Circle
   * Set circle style for vector features.
   * ベクタフィーチャの円のスタイルを設定。
   * (ol3 API[説明は Stable Only のチェックを外すと表示])
   */
   radius: 7,
   snapToPixel: false,
   /** snapToPixel
    * If true integral numbers of pixels are used as the 
    * X and Y pixel coordinate when drawing the circle 
    * in the output canvas. If false fractional numbers 
    * may be used. Using true allows for "sharp" rendering 
    * (no blur), while using false allows for "accurate" 
    * rendering. Note that accuracy is important if the 
    * circle's position is animated. Without it, the 
    * circle may jitter noticeably. Default value is true.
    * true の場合、ピクセル整数は、出力キャンバスに円を描画す
    * るとき、XとYピクセル座標として使用されます。false の場
    * 合、分数を使用することができます。true を使用すると「
    * シャープ」レンダリング(ぼかしなし)を可能にし、false 
    * 使用すると「正確」なレンダリングを可能にします。円の位
    * 置がアニメーション化されている場合は、その正確さが重要
    * であることに注意してください。それがなければ、円が著し
    * く乱れることがあります。デフォルト値は true です。
    * (ol3 API[説明は Stable Only のチェックを外すと表示])
    */
   fill: new ol.style.Fill({color: 'black'}),
   /** ol.style.Fill 
    * Set fill style for vector features.
    * ベクタフィーチャの塗りつぶしスタイルを設定。(ol3 API)
    */
   stroke: new ol.style.Stroke({
    color: 'white', width: 2
   })
  })
 })
};
var vectorLayer = new ol.layer.Vector({
/** ol.layer.Vector
 * Vector data that is rendered client-side.
 * クライアント側で描画されたベクタデータ。(ol3 API)
 */
 source: new ol.source.Vector({
 /** ol.source.Vector 
  * Provides a source of features for vector layers. Vector 
  * features provided by this source are suitable for 
  * editing. See ol.source.VectorTile for vector data that 
  * is optimized for rendering.
  * ベクタレイヤのフィーチャのソースを提供します。このソースが
  * 提供するベクトルのフィーチャは、編集に適しています。レンダ
  * リングのために最適化されたベクトルデータのための 
  * ol.source.VectorTile を参照してください。(ol3 API)
  */
  features: [routeFeature, geoMarker, startMarker, endMarker]
 }),
 style: function(feature, resolution) {
 // hide geoMarker if animation is active
 // アニメーションがアクティブである場合 geoMarker を隠します
  if (animating && feature.get('type') === 'geoMarker') {
  /** get(key)
   * Gets a value.
   * 値を取得します。(ol3 API)
   */
   return [];
  }
  return [styles[feature.get('type')]];
 }
});
var center = [-5639523.95, -3501274.52];
var map = new ol.Map({
 target: document.getElementById('map'),
 loadTilesWhileAnimating: true,
 /** loadTilesWhileAnimating:
  * When set to true, tiles will be loaded during 
  * animations. This may improve the user experience, but 
  * can also make animations stutter on devices with slow 
  * memory. Default is `false`.
  * true に設定すると、タイルは、アニメーションの間にロード
  * されます。これは、ユーザーエクスペリエンスを向上させるこ
  * とだけでなく、アニメーションが遅いメモリを搭載したデバイ
  * ス上で途切れ途切れにすることができます。
  * デフォルトは `false` です。(ol3 API)
  */
 view: new ol.View({
  center: center,
  zoom: 10,
  minZoom: 2,
  maxZoom: 19
 }),
 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.BingMaps({
   /** ol.source.BingMaps
    * Layer source for Bing Maps tile data.
    * Bing Maps タイルデータのレイヤソース。(ol3 API)
    */
    imagerySet: 'AerialWithLabels',
    key: 'Ak-dzM...(省略)'
   })
  }),
  vectorLayer
 ]
});
var moveFeature = function(event) {
 var vectorContext = event.vectorContext;
 /** vectorContext{ol.render.VectorContext} 
  * For canvas, this is an instance of 
  * ol.render.canvas.Immediate.
  * キャンバスの場合、これは  ol.render.canvas.Immediate 
  * のインスタンスです。
  * (ol3 API[説明は Stable Only のチェックを外すと表示])
  */
 var frameState = event.frameState;
  /** frameState{olx.FrameState}
   * The frame state at the time of the event.
   * イベント時のフレーム状態。
   * (ol3 API[説明は Stable Only のチェックを外すと表示])
   */
 if (animating) {
  var elapsedTime = frameState.time - now;
  // here the trick to increase speed is to jump some 
  // indexes on lineString coordinates
  // ここで速度を向上させるコツは、座標をラインストリング上のい
  // くつかのインデックスをジャンプすることです
  var index = Math.round(speed * elapsedTime / 1000);
  /** Math.round()
   * 引数として与えた数を四捨五入して、最も近似の整数を返します。
   * (MDN[https://developer.mozilla.org/ja/docs/Web/
   * JavaScript/Reference/Global_Objects/Math/round])
   */
  if (index >= routeLength) {
   stopAnimation(true);
   return;
  }
  var currentPoint = new ol.geom.Point(routeCoords[index]);
  var feature = new ol.Feature(currentPoint);
  vectorContext.drawFeature(feature, styles.geoMarker);
  /** drawFeature(()
   * Render a feature into the canvas. In order to 
   * respect the zIndex of the style this method draws 
   * asynchronously and thus after calls to 
   * drawXxxxGeometry have been finished, effectively 
   * drawing the feature on top of everything else. You 
   * probably should be using ol.layer.Vector instead 
   * of calling this method directly.
   * キャンバスにフィーチャをレンダリングします。 スタイルの 
   * zIndex を尊重するために、このメソッドは非同期的に描画
   * します。これにより、終了した drawXxxxGeometry への呼
   * び出した後に、他のすべての上のフィーチャを効果的に描画し
   * ます。このメソッドを直接呼び出す代わりに、おそらく 
   * ol.layer.Vector  を使用する必要があります。
   * (ol3 API[説明は Stable Only のチェックを外すと表示])
   */
 }
 // tell OL3 to continue the postcompose animation
 // postcompose animation を継続するために OL3 に伝えます
 map.render();
 /** render()
  * Request a map rendering (at the next animation 
  * frame).
  * (次のアニメーションフレームで)map 描画を要求します。
  * (ol3 API)
  */
};
function startAnimation() {
 if (animating) {
  stopAnimation(false);
 } else {
  animating = true;
  now = new Date().getTime();
  /** Date
   * 日付や時刻を扱うことが可能な、JavaScript の Date 
   * インスタンスを生成します。
   * (MDN[https://developer.mozilla.org/ja/docs/Web/
   * JavaScript/Reference/Global_Objects/Date])
   */
  /** Date.prototype.getTime()
   * ユニバーサル時間に従い、指定された日付の時刻に対応する数
   * 値を返します。
   * GetTime メソッドによって返される値は、1970 年 1 月 1 日 
   * 00:00:00 UTC からの経過ミリ秒です。このメソッドは、日付
   * と時刻を別の Date オブジェクトに割り当てるために使用でき
   * ます。
   * (MDN[https://developer.mozilla.org/ja/docs/Web/
   * JavaScript/Reference/Global_Objects/Date/getTime])
   */
  speed = speedInput.value;
  startButton.textContent = 'Cancel Animation';
  /** Node.textContent
   * The Node.textContent property represents the text 
   * content of a node and its descendants.
   * Node.textContentプロパティは、ノードとノードの子孫のテキ
   * ストの内容を表します。
   * (MDN[https://developer.mozilla.org/en-US/docs/
   * Web/API/Node/textContent])
   */
  // hide geoMarker
  // geoMarker を隠します
  geoMarker.setStyle(null);
  /** setStyle(style)
   * Set the style for the feature. This can be a single 
   * style object, an array of styles, or a function that 
   * takes a resolution and returns an array of styles. If 
   * it is null the feature has no style (a null style).
   * フィーチャのスタイルを設定します。これは、単一のスタイルオ
   * ブジェクト、スタイルの配列、または解像度をとり、スタイルの
   * 配列を返す関数とすることができます。null の場合、フィー
   * チャは、スタイルなし(null のスタイル)を持ちます。
   * (ol3 API)
   */
  // just in case you pan somewhere else
  // 念のために、どこか他にパンします。
  map.getView().setCenter(center);
  /** 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)
   */
  /** setCenter()
   * Set the center of the current view.
   * 現在のビューの中心を設定します。(ol3 API)
   */
  map.on('postcompose', moveFeature);
  /** on(type, listener, opt_this)
   * Listen for a certain type of event.
   * あるタイプのイベントをリッスンします。(ol3 API)
   */
  map.render();
 }
}
/**
 * @param {boolean} ended end of animation.
 */
/** 「@param」
 * The @param tag provides the name, type, and 
 * description of a function parameter.
 * The @param tag requires you to specify the name of 
 * the parameter you are documenting. You can also 
 * include the parameter's type, enclosed in curly 
 * brackets, and a description of the parameter.
 * @paramタグは、関数パラメータの名前と型、説明を提供します。
 * @paramタグを使用すると、文書化されたパラメータの名前を
 * 指定する必要があります。また、パラメータのタイプと、中括弧
 * で囲まれたおよびパラメータの説明を含めることができます。
 * (@use JSDoc [http://usejsdoc.org/tags-param.html])
 */
function stopAnimation(ended) {
 animating = false;
 startButton.textContent = 'Start Animation';
 // if animation cancelled set the marker at the beginning
 // アニメーションキャンセルされた場合、先頭にマーカーを設定
 var coord = ended ? routeCoords[routeLength - 1] : routeCoords[0];
 /** 条件演算子 condition ? expr1 : expr2 
  * condition: true か false かを評価する条件文です。
  * expr1, expr2: 各々の値の場合に実行する式です。
  * condition が true の場合、演算子は expr1 の値を選択します。
  * そうでない場合は expr2 の値を選択します。
  * (MDN[https://developer.mozilla.org/ja/docs/Web/
  * JavaScript/Guide/Expressions_and_Operators])
  */
 /** @type {ol.geom.Point} */ (geoMarker.getGeometry())
 /** 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)
  */
  .setCoordinates(coord);
  /** setCoordinates(coordinates, opt_layout)
   * Set the coordinate of the point.
   * 点の座標を設定します。
   * (ol3 API)
   */
 //remove listener
 // リスナを削除
 map.un('postcompose', moveFeature);
}
var speed, now;
var animating = false;
var speedInput = document.getElementById('speed');
var startButton = document.getElementById('start-animation');
startButton.addEventListener('click', startAnimation, false);
/** EventTarget.addEventListener
 * addEventListener は、 1 つのイベントターゲットにイベント 
 * リスナーを1つ登録します。イベントターゲットは、ドキュメント
 * 上の単一のノード、ドキュメント自身、ウィンドウ、あるいは、
 * XMLHttpRequest です。
 *(MDN[https://developer.mozilla.org/ja/docs/Web/API/
 * EventTarget.addEventListener])
 */

0 件のコメント: