2015年10月18日日曜日

OL3-Cesium 12 - ol3cesium synthetic vector layer example using several layers 2

12-2 JavaScript ファイルの作成
「synthvectors_batch.js(12-ol3cesium17.js)」は、マップを表示するための JavaScript ファイルです。

OL3-Cesium API は、現在、すべて実験的(experimental)なものです。

「12-ol3cesium18.js」
var total = 0;
var created = 0;
var added = 0;
var vectorLayers = [];
var addFeatures = function() {
 var then = Date.now();
 /** Date.now()
  * UTC(協定世界時)での 1970 年 1 月 1 日 00 時 00 分 00 秒 
  * から現在までの経過ミリ秒を数値で返します。
  * (MDN[https://developer.mozilla.org/ja/docs/Web/
  * JavaScript/Reference/Global_Objects/Date/now])
  */
 var count = 1000;
 var features = [];
 var e = 18000000;
 for (var i = 0; i < count; ++i) {
  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([
   /** ol.geom.Point
    * Point geometry.(ol3 API)
    */
    2 * e * Math.random() - e,
    /** Math.random()
     * The Math.random() function returns a floating-point, 
     * pseudo-random number in the range [0, 1) that is, 
     * from 0 (inclusive) up to but not including 1 
     * (exclusive), which you can then scale to your 
     * desired range. The implementation selects the 
     * initial seed to the random number generation 
     * algorithm; it cannot be chosen or reset by the 
     * user.
     * Math.random() 関数は浮動小数点を返し、0 と 1 の範囲の
     * 擬似乱数、すなわち 0 以上 1 未満、で、任意の範囲に合わせ
     * ることができます。インプリメンテーションは、乱数発生アル
     * ゴリズムのためにイニシャルシードを選択しますが、ユーザが
     * 選んだりリセットできません。
     * (MDN[https://developer.mozilla.org/en-US/docs/Web/
     * JavaScript/Reference/Global_Objects/Math/random])
     */
    2 * e * Math.random() - e,
    e * Math.random()
   ])
  });
  var style = [new ol.style.Style({
  /** ol.style.Style 
   * Base class for vector feature rendering styles.
   * ベクタフィーチャがスタイルを描画するための基本クラス。
   * (ol3 API[説明は Stable Only のチェックを外すと表示])
   */
   image: new ol.style.Circle({
   /** ol.style.Circle
    * Set circle style for vector features.
    * ベクタフィーチャの円のスタイルを設定。(ol3 API)
    */
    radius: 2,
    fill: new ol.style.Fill({color: [
    /** ol.style.Fill 
     * Set fill style for vector features.
     * ベクタフィーチャの塗りつぶしスタイルを設定。(ol3 API)
     */
     Math.random() * 255,
     Math.random() * 255,
     Math.random() * 255,
     Math.random()
    ]})
   })
  })];
  feature.setStyle(style);
  /** 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)
   */
  feature.setId(e * Math.random());
  /** 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)
   */
  features.push(feature);
  /** push(elem)
   * Insert the provided element at the end of the 
   * collection.
   * コレクションの最後に供給されたエレメントに挿入します。
   * Name: elem, Type: T, Description: Element
   * (ol3 API)
   */
 }
 var now = Date.now();
 created = now - then;
 then = now;
 var vectorSource = new ol.source.Vector({});
 /** ol.source.Vector 
  * Provides a source of features for vector layers.
  * ベクタレイヤのフィーチャのソースを提供します。(ol3 API)
  */
 var vector = new ol.layer.Vector({
 /** ol.layer.Vector
  * Vector data that is rendered client-side.
  * クライアント側で描画されたベクタデータ。(ol3 API)
  */
  source: vectorSource,
 });
 vectorSource.addFeatures(features);
 /** addFeature(feature)
  * Add a single features to the source.If you want to add a 
  * batch of features at once, call source.addFeatures() 
  * instead.
  * 単一フィーチャをソースに追加します。もし即座にフィーチャの
  * バッチを追加したいなら、替りに source.addFeatures() を呼び
  * 出します。(ol3 API)
  */
 map.addLayer(vector);
 /** addLayer(layer)
  * Adds the given layer to the top of this map. If you 
  * want to add a layer elsewhere in the stack, use 
  * getLayers() and the methods available on ol.Collection.
  * 与えられたレイヤをこのマップの一番上に追加します。あなたは、
  * スタックの他の箇所にレイヤを追加したい場合は、getLayers()と
  * ol.Collection で使用可能なメソッドを使用します。(ol3 API)
  */
 vectorLayers.push(vector);
 now = Date.now();
 added = now - then;
 total += count;
 document.getElementById('total').innerHTML = total;
 /** element.innerHTML
  * innerHTML は、与えられた要素に含まれる全てのマークアップ
  * と内容を設定または取得します。
  * (MDN[https://developer.mozilla.org/ja/docs/Web/
  * API/element.innerHTML])
  */
 document.getElementById('created').innerHTML = 'Features created in ' + created + 'ms.';
 document.getElementById('added').innerHTML = 'Features added in ' + added + 'ms.';
};
var tile = 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.TileWMS({
 /** ol.source.TileWMS
  * Layer source for tile data from WMS servers.
  * WMS サーバからのタイルデータのレイヤソース。
  * (ol3 API)
  */
  url: 'http://demo.boundlessgeo.com/geoserver/wms',
  params: {
   'LAYERS': 'ne:NE1_HR_LC_SR_W_DR'
  }
 })
});
var map = new ol.Map({
 layers: [tile],
 target: 'map2d',
 view: new ol.View({
  center: [0, 0],
  zoom: 2
 })
});
var ol3d = new olcs.OLCesium({map: map});
/** new olcs.OLCesium(options)
 * map: The OpenLayers map we want to show on a Cesium scene.
 * Cesium シーンで表示したい OpenLayers マップ。
 * (OL3-Cesium API)
 */
var scene = ol3d.getCesiumScene();
/** getCesiumScene()
 * (OL3-Cesium API に説明がありませんでした。)
 */
var terrainProvider = new Cesium.CesiumTerrainProvider({
/** new CesiumTerrainProvider(options)
 * A TerrainProvider that access terrain data in a Cesium 
 * terrain format. The format is described on the Cesium 
 * wiki. 
 * セシウム地形(Cesium terrain)フォーマットの地形(terrain)
 * データにアクセスする TerrainProvider。フォーマットは、セシウ
 * ムウィキに記載されています。
 * (Cesium refdoc)
 */
 // url : '//cesiumjs.org/stk-terrain/tilesets/world/tiles'
 // 2015.10.2 変更
 url : '//assets.agi.com/stk-terrain/world'
 /** url
  * The URL of the Cesium terrain server.
  * セシウム地形(Cesium terrain)サーバの URL。
  * (Cesium refdoc)
  */
});
scene.terrainProvider = terrainProvider;
ol3d.setEnabled(true);
/** setEnabled(enable)
 * Enables/disables the Cesium. This modifies the visibility 
 * style of the container element.
 * セシウムを有効または無効にします。これは、コンテナ要素の可視
 * 性スタイルを変更します。
 * (OL3-Cesium API)
 */
// Show off 3D feature picking
var handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);
/** new ScreenSpaceEventHandler(element)
 * Handles user input events. Custom functions can be added 
 * to be executed on when the user enters input. 
 * ユーザ input イベントを処理します。カスタム関数は、ユーザが 
 *  input を入力するときに実行されるように追加できます。
 * (Cesium refdoc)
 */
var lastPicked;
handler.setInputAction(function(movement) {
/** setInputAction(action, type, modifier)
 * Set a function to be executed on an input event. 
 * input イベントで実行される関数を設定します。
 * (Cesium refdoc)
 */
 var pickedObjects = scene.drillPick(movement.position);
 /** drillPick(windowPosition, limit)
  * Returns a list of objects, each containing a `primitive` 
  * property, for all primitives at a particular window 
  * coordinate position. Other properties may also be set 
  * depending on the type of primitive. The primitives in 
  * the list are ordered by their visual order in the scene 
  * (front to back).
  * 特定のウィンドウの座標位置で、`primitive(基本要素?)`プロ
  * パティを含む、すべてのプリミティブのためのオブジェクトのリス
  * トを返します。他のプロパティは、プリミティブの種類に応じて設
  * 定することができます。リスト内のプリミティブは、シーン(前面
  * から背面へ)での視覚的順序によって順序付けられます。 
  * (Cesium refdoc)
  */
 if (Cesium.defined(pickedObjects)) {
 /** defined(value) -> Boolean
   * Returns: Returns true if the object is defined, returns 
  * false otherwise. (Cesium refdoc)
  */
  for (i = 0; i < pickedObjects.length; ++i) {
   var picked = pickedObjects[i].primitive;
   if (picked.olFeature == lastPicked) continue;
   var carto = Cesium.Ellipsoid.WGS84.cartesianToCartographic(picked.position);
   /** Ellipsoid.WGS84
    * An Ellipsoid instance initialized to radii of (1.0, 
    * 1.0, 1.0). 
    * 半径(1.0、1.0、1.0)に初期化された楕円インスタンス。
    * (Cesium refdoc)
    */
   /** cartesianToCartographic(cartesian, result)
    * Converts the provided cartesian to cartographic 
    * representation. The cartesian is undefined at the 
    * center of the ellipsoid. 
    * 提供されたデカルトを地図製作表現にに変換します。デカルト
    * は、楕円体の中心に定義されていません。
    */
   console.log('Picked feature', picked.olFeature, ' is at ', carto);
   /** console.log
    * デバッガの Web コンソールにメッセージを出力します。
    * (MDN[https://developer.mozilla.org/ja/docs/Web/API/
    * Console/log])
    */
   lastPicked = picked.olFeature;
  }
 } else {
  lastPicked = undefined;
 }
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
/** ScreenSpaceEventType
 * This enumerated type is for classifying mouse events: 
 * down, up, click, double click, move and move while a 
 * button is held down.
 * この列挙型は、マウスイベントを分類するためのものです:ダウ
 * ン、アップ、クリック、ダブルクリック、移動、ボタンを押して
 * いる間に移動です。
 * ScreenSpaceEventType.LEFT_CLICK()
 * Represents a mouse left click event. 
 * マウスの左クリックイベントを表します。
 */
function clearFeatures() {
 vectorLayers.forEach(function(layer) {
 /** forEach(f, opt_this)
  * Iterate over each element, calling the provided callback.
  * 提供されるコールバックを呼び出して、各要素を反復処理します。
  * (ol3 API)
  */
  map.getLayers().remove(layer);
  /** getLayers()
   * Get the collection of layers associated with 
   * this map.
   * このマップと関連するレイヤのコレクションを取得します。
   * (ol3 API)
   */
  /** remove(elem)
   * Remove the first occurrence of an element from the 
   * collection.
   * コレクションから最初に出現する要素(elemnet)を削除します。
   * (ol3 API)
   */
 });
 vectorLayers.length = 0;
 total = document.getElementById('total').innerHTML = 0;
 document.getElementById('created').innerHTML = '';
 document.getElementById('added').innerHTML = '';
}
Chromium では表示できないので、Iceweasel(Firefox)のアドレスバーに

http://localhost/~user/ol3cesiumproj/public_html/12-ol3cesium18.html

と入力して表示します。

0 件のコメント: