2017年8月30日水曜日

2 - ol4.3ex 171b - Street Labels 2

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

「2171-ol4ex.js」
var emptyFn = function() {};
var labelEngine = new labelgun['default'](emptyFn, emptyFn);
/** labelgun(hideLabel, showLabel, entries)
 * Create a label gun instance with a hide and show label 
 * callback.
 * hide と show label コールバックで label gun インスタンスを
 * 作成します。
 * (JSDoc[http://tech.geovation.uk/labelgun/documentation/
 * labelgun.html])
 */
var context, pixelRatio; 
// Will be set in the map's postcompose listener
function measureText(text) {
 return context.measureText(text).width * pixelRatio;
 /** CanvasRenderingContext2D.measureText()
  * The CanvasRenderingContext2D.measureText() method 
  * returns a TextMetrics object that contains information 
  * about the measured text (such as its width for example).
  * CanvasRenderingContext2D.measureText() メソッドは、
  * (例えば幅などの)測定されたテキストについて情報を含む  
  * TextMetricsオブジェクトを返します。
  * (MDN[https://developer.mozilla.org/en-US/docs/Web/
  * API/CanvasRenderingContext2D/measureText])
  */
}
var extent, letters; 
// Will be set in the style's renderer function
function collectDrawData(letter, x, y, angle) {
 ol.extent.extend(extent, [x, y, x, y]);
 /** ol.extent.extend(extent1, extent2)
  * Modify an extent to include another extent.
  * もう一つの範囲を含むために、範囲を修正します。
  * (ol4 API)
  */
 letters.push([x, y, angle, letter]);
 /** Array.prototype.push()
  * The push() method adds one or more elements to the end 
  * of an array and returns the new length of the array.
  * push() メソッドは、配列の末尾に 1 つ以上の要素を追加し、新
  * しい配列の数を返します。
  * (MDN[https://developer.mozilla.org/en-US/docs/Web/
  * JavaScript/Reference/Global_Objects/Array/push])
  */
}
var style = new ol.style.Style({
/** ol.style.Style 
 * Container for vector feature rendering styles. Any 
 * changes made to the style or its children through 
 * set*() methods will not take effect until the feature 
 * or layer that uses the style is re-rendered.
 * ベクタフィーチャがスタイルを描画するためのコンテナ。
 * スタイルや set*() メソッドを通じてその子に加えられた変
 * 更は、スタイルを使用するフィーチャまたはレイヤが再レン
 * ダリングされるまで有効になりません。
 * (ol4 API)
 */
 renderer: function(coords, context) {
 /** renderer:
  * Custom renderer. When configured, fill, stroke and 
  * image will be ignored, and the provided function will 
  * be called with each render frame for each geometry.
  * カスタムレンダラ。設定されたとき、fill と stroke、 image
  * は無視され、 提供されたファンクションは各ジオメトリに対
  * する各描画フレームを呼び出します。
  * (ol4 API)
  */
  var feature = context.feature;
  var text = feature.get('name');
  /** get(key)
   * Gets a value.(ol4 API)
   */
  // Only create label when geometry has a long and straight segment
  var path = labelSegment(coords, Math.PI / 8, measureText(text));
  /** labelSegment(path, maxAngle, labelLength)
   * path: Array<Array<number>>, Path represented in 
   * coordinate pairs.
   * 座標と対で表されるパス。
   * maxAngle: number Maximum angle in radians for a 
   * suitable segment.
   * 適切なセグメントの最大角度(ラジアン)。
   * labelLength: number, Required segment length for the 
   * label.
   * ラベルの必要とされるセグメント長。
   * (labelSegment[https://github.com/ahocevar/
   * label-segment])
   */
  /** Math.PI()
   * The Math.PI property represents the ratio of the 
   * circumference of a circle to its diameter, 
   * approximately 3.14159:
   * Math.PIプロパティは、円周とその直径の比(約3.14159)を表し
   * ます。
   * (MDN[https://developer.mozilla.org/en-US/docs/Web/
   * JavaScript/Reference/Global_Objects/Math/PI])
   */
  if (path) {
   extent = ol.extent.createEmpty();
   /** ol.extent.createEmpty
    * Create an empty extent.(ol4 API)
    */
   letters = [];
   textPath(text, path, measureText, collectDrawData);
   /** textPath(text, path, measureText, draw, textArea)
    * text: string, Text to draw along the path.
    * パスに沿って描画されるテキスト。
    * path: Array<Array<number>>, Path represented in 
    * coordinate pairs.
    * 座標と対で表されるパス。
    * measureText: Function, Function that takes a text as 
    * argument and returns the width of the provided text.
    * 引数としてテキストをとり、指定されたテキストの幅を返す
    * 関数。
    * draw: Function, Function that takes a letter, its x 
    * coordinate, y coordinate and angle (in radians) as 
    * arguments. It is typically used to draw the provided 
    * letter to a canvas.
    * 文字、そのx座標、y座標、角度(ラジアン)を引数とする関
    * 数。 これは通常、指定された文字をキャンバスに描画するた
    * めに使用されます。
    * textAlign: string, Text alignment along the path. One 
    * of 'left', 'center', 'right'. (optional, default 
    * 'center')
    * パスに沿ったテキストの配置。 「左」、「中央」、「右」の
    * いずれか。 
    * (オプション、デフォルトは 'center')
    * (textPath[https://github.com/ahocevar/textpath])
    */
   ol.extent.buffer(extent, 5 * pixelRatio, extent);
   /** ol.extent.buffer(extent, value, opt_extent)
    * Return extent increased by the provided value.
    * 提供された値によって拡大した範囲を返します。
    * (ol4 API)
    */
   var bounds = {
    bottomLeft: ol.extent.getBottomLeft(extent),
    /** ol.extent.getBottomLeft(extent)
     * Get the bottom left coordinate of an extent.
     * 範囲の左下の座標を取得します。
     * (ol4 API)
     */
    topRight: ol.extent.getTopRight(extent)
    /** ol.extent.getTopRight(extent)
     * Get the top right coordinate of an extent.
     * 範囲の右上の座標を取得します。
     * (ol4 API)
     */
   };
   labelEngine.ingestLabel(bounds, feature.getId(), 1, letters, text, false);
   /** ingestLabel
    * Creates a label if it does not already exist, then 
    * adds it to the tree, and renders it based on whether 
    * it can be shown.
    * ラベルがまだ存在しない場合は作成し、ツリーに追加し、表示
    * 可能かどうかに基づいてレンダリングします。
    * (JSDoc[http://tech.geovation.uk/labelgun/
    * documentation/module-labelgun.html])
    */
   /** getId()
    * Get the feature identifier. This is a stable 
    * identifier for the feature and is either set when 
    * reading data from a remote source or set explicitly 
    * by calling ol.Feature#setId.
    * フィーチャ識別子を取得します。これは、フィーチャの安定し
    * た識別子で、リモートソースからデータを読み取るか、
    * ol.Feature#setid を呼び出すことによって明示的に設定した
    * 場合のいずれかのセットです。(ol4 API)
    */
  }
 }
});
var rasterLayer = new ol.layer.Tile({
/** ol.layer.Tile 
 * For layer sources that provide pre-rendered, tiled 
 * images in grids that are organized by zoom levels 
 * for specific resolutions. 
 * プリレンダリング(事前描画)を提供するレイヤソースのた
 * めの、特定の解像度でのズームレベルによって編成されてい
 * るグリッドのタイルイメージ。(ol4 API)
 */
 source: new ol.source.BingMaps({
 /** ol.source.BingMaps
  * Layer source for Bing Maps tile data.(ol4 API)
  */
  key: 'As1Hi...(省略)',
  imagerySet: 'Aerial'
 })
});
var source = new ol.source.Vector();
/** ol.source.Vector
 * Provides a source of features for vector layers. 
 * Vector features provided by this source are suitable 
 * for editing. See ol.source.VectorTile for vector 
 * data that is optimized for rendering.
 * ベクタレイヤのフィーチャのソースを用意します。このソース
 * が提供するベクタフィーチャは、編集に適しています。レンダ
 * リングのために最適化されたベクタデータの 
 * ol.source.VectorTile を参照してください。(ol4 API)
 */
// Request streets from OSM, using the Overpass API
fetch('https://overpass-api.de/api/interpreter', {
/** WindowOrWorkerGlobalScope.fetch()
 * The fetch() method of the WindowOrWorkerGlobalScope 
 * mixin starts the process of fetching a resource from 
 * the network. This returns a promise that resolves to 
 * the Response object representing the response to your 
 * request.
 * WindowOrWorkerGlobalScope mixin の fetch() メソッドは、
 * ネットワークからリソースを取得する処理を開始します。これは
 * 要求に 対する応答を表す Response オブジェクトに解決のプロ
 * ミス(promise)を返します。
 *(MDN[https://developer.mozilla.org/en-US/docs/Web/API/
 * WindowOrWorkerGlobalScope/fetch])
 */
 method: 'POST',
 /** method:
  *  The request method, e.g., GET, POST.
  */
 body: '(way["highway"](48.19642,16.32580,48.22050,16.41986));(._;>;);out meta;'
 /** body:
  * Any body that you want to add to your request: this 
  * can be a Blob, BufferSource, FormData, URLSearchParams, 
  * or USVString object. Note that a request using the GET 
  * or HEAD method cannot have a body.
  * リクエストに追加する body。これは、Blob や、BufferSource、
  * FormData、URLSearchParams、USVString オブジェクトです。
  * GET、または、HEAD メソッドを使用するリクエストは、body を持
  * てないことに注意してください。
  */
}).then(function(response) {
 return response.text();
}).then(function(responseText) {
 var features = new ol.format.OSMXML().readFeatures(responseText, {
 /** ol.format.OSMXML 
  * Feature format for reading data in the OSMXML format.
  * OSMXML フォーマットのデータを読み込むためのフィーチャ
  * フォーマット。(ol4 API)
  */
  featureProjection: 'EPSG:3857'
 });
 source.addFeatures(features);
 /** addFeatures(features)
  * Add a batch of features to the source.
  * ソースにフィーチャのバッチを追加します。(ol4 API)
  */
});
var vectorLayer = new ol.layer.Vector({
/** ol.layer.Vector
 * Vector data that is rendered client-side.
 * クライアント側で描画されるベクタデータ。(ol4 API)
 */
 source: source,
 style: function(feature) {
  if (feature.getGeometry().getType() == 'LineString' && feature.get('name')) {
  /** 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 を呼び出すときに
   * 設定されています。(ol4 API)
   */
   /** getType()
    * Get the type of this geometry.(ol4 API)
    */
   return style;
  }
 }
});
var viewExtent = [1817379, 6139595, 1827851, 6143616];
var map = new ol.Map({
 layers: [rasterLayer, vectorLayer],
 target: 'map',
 view: new ol.View({
  extent: viewExtent,
  center: ol.extent.getCenter(viewExtent),
  /** ol.extent.getCenter(extent)
   * Get the center coordinate of an extent.
   * 範囲の中心座標を取得します。(ol4 API)
   */
  zoom: 17,
  minZoom: 14
 })
});
vectorLayer.on('precompose', function() {
/** on(type, listener, opt_this)
 * Listen for a certain type of event.
 * ある型のイベントをリッスンします。(ol4 API)
 */
 labelEngine.destroy();
 /** destroy()
  * Destroy the collision tree and labels.
  * コリジョン(衝突)ツリーとラベルを破棄します。
  * (JSDoc[http://tech.geovation.uk/labelgun/documentation/
  * labelgun.html])
  */
});
vectorLayer.on('postcompose', function(e) {
 context = e.context;
 pixelRatio = e.frameState.pixelRatio;
 /** frameState
  * An object representing the current render frame state.
  * 現在の描画フレームの状態を表すオブジェクト。(ol4 API)
  */
 context.save();
 /** CanvasRenderingContext2D.save()
  * The CanvasRenderingContext2D.save() method of the 
  * Canvas 2D API saves the entire state of the canvas 
  * by pushing the current state onto a stack.
  * Canvas 2D API の CanvasRenderingContext2D.save()
  * メソッドは、スタック上に現在の状態を最後に追加するこ
  * とにより、キャンバスの状態全体を保存します。
  * (MDN[https://developer.mozilla.org/en-US/docs/Web/
  * API/CanvasRenderingContext2D/save])
  */
 context.font = 'normal 11px "Open Sans", "Arial Unicode MS"';
 /** CanvasRenderingContext2D.font
  * The CanvasRenderingContext2D.font property of the 
  * Canvas 2D API specifies the current text style being 
  * used when drawing text. This string uses the same 
  * syntax as the CSS font specifier. The default font 
  * is 10px sans-serif.
  * Canvas 2D APIのCanvasRenderingContext2D.font プロパ
  * ティは、テキストを描画するときに使用される現在のテキスト
  * スタイルを指定します。 この文字列は、CSSフォント記述子と
  * 同じ構文を使用します。 デフォルトのフォントは 10px 
  * sans-serif です。
  * (MDN[https://developer.mozilla.org/en-US/docs/Web/
  * API/CanvasRenderingContext2D/font])
  */
 context.fillStyle = 'white';
 /** CanvasRenderingContext2D.fillStyle
  * The CanvasRenderingContext2D.fillStyle property of 
  * the Canvas 2D API specifies the color or style to 
  * use inside shapes. The default is #000 (black).
  * Canvas 2D API の CanvasRenderingContext2D.fillStyle 
  * プロパティは、図形の内側に使用する色やスタイルを指定し
  * ます。デフォルトでは、#000(黒)です。
  * (MDN[https://developer.mozilla.org/en-US/docs/Web/
  * API/CanvasRenderingContext2D/fillStyle])
  */
 context.textBaseline = 'middle';
 /** CanvasRenderingContext2D.textBaseline
  * The CanvasRenderingContext2D.textBaseline property 
  * of the Canvas 2D API specifies the current text 
  * baseline being used when drawing text.
  * Canvas 2D API の CanvasRenderingContext2D.textBaseline 
  * プロパティは、テキストを描画するとき使用される現在のテキス
  * トのベースライン(baseline)を指定します。デフォルトでは、
  * #000(黒)です。
  * (MDN[https://developer.mozilla.org/en-US/docs/Web/
  * API/CanvasRenderingContext2D/textBaseline])
  */
 context.textAlign = 'center';
 /** CanvasRenderingContext2D.textAlign
  * The CanvasRenderingContext2D.textAlign property of 
  * the Canvas 2D API specifies the current text 
  * alignment being used when drawing text. Beware that 
  * the alignment is based on the x value of the 
  * CanvasRenderingContext2D.fillText method. So if 
  * textAlign="center", then the text would be drawn at 
  * x-50%*width.
  * Canvas 2D API の CanvasRenderingContext2D.textAlign 
  * プロパティは、テキストを描画するときに使用される現在のテキ
  * ストの配置を指定します。 配置は、
  * CanvasRenderingContext2D.fillText メソッドのx値に
  * 基づいていることに注意してください。 したがって、
  * textAlign = "center" の場合、テキストは x-50%*width 
  * の位置から描画されます。
  * (MDN[https://developer.mozilla.org/en-US/docs/Web/
  * API/CanvasRenderingContext2D/textAlign])
  */
 var labels = labelEngine.getShown();
 /** getShown()
  * Return an array of all shown labels.
  * 表示されたラベルすべての配列を返します。
  * (JSDoc[http://tech.geovation.uk/labelgun/documentation/
  * labelgun.html])
  */
 for (var i = 0, ii = labels.length; i < ii; ++i) {
  // Render label letter by letter
  var letters = labels[i].labelObject;
  /** labelObject(ingestLabel のパラメータ)
   * The object representing the actual label object from 
   * your mapping library.
   * マッピングライブラリの実際の label オブジェクトを表すオ
   * ブジェクト。
   * (JSDoc[http://tech.geovation.uk/labelgun/documentation/
   * labelgun.html])
   */
  for (var j = 0, jj = letters.length; j < jj; ++j) {
   var labelData = letters[j];
   context.save();
   context.translate(labelData[0], labelData[1]);
   /** CanvasRenderingContext2D.translate()
    * The CanvasRenderingContext2D.translate() method of the 
    * Canvas 2D API adds a translation transformation by 
    * moving the canvas and its origin x horizontally and y 
    * vertically on the grid.
    * Canvas 2D API の CanvasRenderingContext2D.translate()
    * メソッドは、canvas およびその元のグリッド上の x 垂直方向、
    * および y 水平方向を移動することによる変換変形を追加します。
    * (MDN[https://developer.mozilla.org/en-US/docs/Web/
    * API/CanvasRenderingContext2D/translate])
    */
   context.rotate(labelData[2]);
   /** CanvasRenderingContext2D.rotate()
    * The CanvasRenderingContext2D.rotate() method of the 
    * Canvas 2D API adds a rotation to the transformation 
    * matrix. The angle argument represents a clockwise 
    * rotation angle and is expressed in radians.
    * Canvas 2D APIのCanvasRenderingContext2D.rotate() 
    * メソッドは、変換行列に回転を追加します。 angle 引数は時計
    * 回りの回転角度を表し、ラジアンで表されます。
    * (MDN[https://developer.mozilla.org/en-US/docs/Web/
    * API/CanvasRenderingContext2D/rotate])
    */
   context.scale(pixelRatio, pixelRatio);
   /** CanvasRenderingContext2D.scale()
    * The CanvasRenderingContext2D.scale() method of the 
    * Canvas 2D API adds a scaling transformation to the 
    * canvas units by x horizontally and by y vertically.
    * Canvas 2D API の CanvasRenderingContext2D.scale()
    * メソッドは、x 水平方向、および y 垂直方向によってキャン
    * バス単位に伸縮変形を追加します。
    * (MDN[https://developer.mozilla.org/en-US/docs/Web/
    * API/CanvasRenderingContext2D/scale])
    */
   context.fillText(labelData[3], 0, 0);
   /** CanvasRenderingContext2D.fillText()
    * The CanvasRenderingContext2D.fillText() method of the 
    * Canvas 2D API fills a given text at the given (x, y) 
    * position. If the optional fourth parameter for a 
    * maximum width is provided, the text will be scaled to 
    * fit that width.
    * Canvas 2D APIのCanvasRenderingContext2D.fillText() 
    * メソッドは、指定された(x、y)位置で指定されたテキストを
    * 塗りつぶします。 最大幅のオプションの4番目のパラメータを
    * 指定すると、テキストはその幅に合わせて拡大/縮小されます。
    * (MDN[https://developer.mozilla.org/en-US/docs/Web/
    * API/CanvasRenderingContext2D/fillText])
    */
   context.restore();
   /** CanvasRenderingContext2D.restore()
    * The CanvasRenderingContext2D.restore() method of the 
    * Canvas 2D API restores the most recently saved canvas 
    * state by popping the top entry in the drawing state 
    * stack. If there is no saved state, this method does 
    * nothing.
    * Canvas 2D API の CanvasRenderingContext2D.restore()
    * メソッドは、描画状態のスタックの一番上のエントリを抜き
    * 出すことによって、最後に保存されたキャンバスの状態を復
    * 元します。全く保存された状態が存在しない場合、このメソッ
    * ドは何もしません。
    * (MDN[https://developer.mozilla.org/en-US/docs/Web/
    * API/CanvasRenderingContext2D/restore])
    */
  }
 }
 context.restore();
});

171x-ol4.png

0 件のコメント: