2017年1月31日火曜日

OL3-Cesium123 15 - ol3cesium tracking example 2

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

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

「15-ol3cesium123.js」
var point = new ol.geom.Point([700000, 200000, 100000]);
/** ol.geom.Point
 * Point geometry.(ol3 API)
 */
var iconFeature = 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: point
});
var iconStyle = 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.Icon(/** @type {olx.style.IconOptions} */ ({
 /** ol.style.Icon 
  * Set icon style for vector features.
  * ベクタフィーチャのアイコンスタイルを設定します。
  * (ol3 API[experimental])
  */
 /** 「@type」 
  * 値のタイプ(型)の説明 - 式などで表示
  * (@use JSDoc[http://usejsdoc.org/]より)
  */
  anchor: [0.5, 46],
  /** center:
   * Anchor. Default value is [0.5, 0.5] (icon center).
   * (ol3 API[experimental])
   */
  anchorXUnits: 'fraction',
  /** anchorXUnits
   * Units in which the anchor x value is specified. A 
   * value of 'fraction' indicates the x value is a 
   * fraction of the icon. A value of 'pixels' indicates 
   * the x value in pixels. Default is 'fraction'.
   * アンカーx値が指定されている単位。 'fraction'の値は、
   * x値がアイコンの分数であることを示します。 'pixels' 
   * の値はx値をピクセル単位で示します。 デフォルトは 
   * 'fraction'です。
   * (ol3 API[experimental])
   */
  anchorYUnits: 'pixels',
  /** anchorYUnits
   * Units in which the anchor y value is specified. A 
   * value of 'fraction' indicates the y value is a 
   * fraction of the icon. A value of 'pixels' indicates 
   * theyx value in pixels. Default is 'fraction'.
   * アンカーy値が指定されている単位。 'fraction'の値は、
   * y値がアイコンの分数であることを示します。 'pixels' 
   * の値はy値をピクセル単位で示します。 デフォルトは 
   * 'fraction'です。
   * (ol3 API[experimental])
   */
  opacity: 0.75,
  /** opacity:
   * Opacity of the icon. Default is 1.
   * (ol3 API[experimental])
   */
  //src: 'data/icon.png'
  src: './js/libs/ol3-cesium-v1.23/examples/data/icon.png'
  /** src:
   * Image source URI. Required.
   * (ol3 API[experimental])
   */
 }))
});
iconFeature.setStyle(iconStyle);
/** 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)
 */
var vectorSource2 = 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: [iconFeature]
 /** features:
  * Features. If provided as ol.Collection, the features 
  * in the source and the collection will stay in sync.
  * フィーチャ。ol.Collection として提供された場合、ソース内
  * のフィーチャとコレクションが同期したままになります。
  * (ol3 API)
  */
});
var imageVectorSource = new ol.source.ImageVector({
/** ol.source.ImageVector 
 * An image source whose images are canvas elements 
 * into which vector features read from a vector source 
 * (ol.source.Vector) are drawn. An ol.source.ImageVector 
 * object is to be used as the source of an image layer 
 * (ol.layer.Image). Image layers are rotated, scaled, 
 * and translated, as opposed to being re-rendered, 
 * during animations and interactions. So, like any 
 * other image layer, an image layer configured with 
 * an ol.source.ImageVector will exhibit this behaviour. 
 * This is in contrast to a vector layer, where vector 
 * features are re-drawn during animations and interactions.
 * ベクタソース(ol.source.Vector)から読み込まれたベクタ
 * フィーチャがキャンバスエレメントに描画されたイメージのイ
 * メージソース。ol.source.ImageVectorオブジェクトは、
 * イメージレイヤのソース(ol.layer.Image)として使用さ
 * れます。イメージレイヤは、アニメーションとインターラクショ
 * ンの間に、再レンダリングされるのではなく、回転、拡大縮小、
 * および変換されています。それで、他のイメージレイヤと同様に、
 * ol.source.ImageVector で設定されたイメージレイヤは、
 * この動作を表します。これは、ベクタフィーチャがアニメーショ
 * ンとインターラクションの間に再描画されるベクタレイヤとは
 * 対照的です。(ol3 API[experimental])
 */
 source: vectorSource2
 /** source:
  * The vector source from which the vector features drawn 
  * in canvas elements are read. Required.
  * キャンバス要素に描かれたベクタフィーチャが読み込まれる
  * ベクタソース。 必須。(ol3 API[experimental])
  */
});
var vectorLayer2 = new ol.layer.Image({
/** ol.layer.Image
 * Server-rendered images that are available for arbitrary 
 * extents and resolutions. 
 * 任意の範囲と解像度で利用可能な server-rendered イメージ。
 * (ol3 API)
 */
 source: imageVectorSource
});
var map = new ol.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.OSM()
   /** ol.source.OSM 
    * Layer source for the OpenStreetMap tile server.
    * OpenStreetMap タイルサーバのレイヤソース。(ol3 API)
    */
  }),
  vectorLayer2
 ],
 target: 'map2d',
 controls: ol.control.defaults({
 /** controls
  * Controls initially added to the map. 
  * If not specified, ol.control.defaults() is used.
  * 初期設定で、マップに追加されたコントロール。
  * 設定されていなければ、ol.control.defaults() が使用されます。
  * (ol3 API)
  */
 /** ol.control.defaults()
  * Set of controls included in maps by default. 
  * Unless configured otherwise, this returns a 
  * collection containing an instance of each of the 
  * following controls:
  * ol.control.Zoom, ol.control.Rotate, 
  * ol.control.Attribution
  * デフォルトでは、マップに含まコントロールのセット。
  * 特に設定しない限り、これは、以下の各コントロールの
  * インスタンスを含むコレクションを返します。(ol3 API)
  */
  attributionOptions: /** @type {olx.control.AttributionOptions} */ ({
  /** @type 
   * 値のタイプ(型)の説明 - 式などで表示
   * (@use JSDoc[http://usejsdoc.org/]より)
   */
   collapsible: false // 折りたたみ
  })
 }),
 view: new ol.View({
  center: [0, 0],
  zoom: 2
 })
});
var ol3d = new olcs.OLCesium({map: map/*, target: 'map3d'*/});
/** 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: '//assets.agi.com/stk-terrain/world',
 /** url:
  * The URL of the Cesium terrain server.
  * セシウム地形(Cesium terrain)サーバの URL。
  * (Cesium refdoc)
  */
 requestVertexNormals: false
 /** requestVertexNormals:
  * Flag that indicates if the client should request 
  * additional lighting information from the server, in the 
  * form of per vertex normals if available.
  * クライアントが追加のライティング情報をサーバから入手する
  * 必要がある場合、使用可能なら頂点ごとの法線(vertex 
  * normals)形式にするかどうかを示すフラグ。
  * (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)
 */
var tracking = false;
function toggleTracking() {
 tracking = !tracking;
 ol3d.trackedFeature = tracking ? iconFeature : undefined;
 /** 条件演算子 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])
  */
}
setInterval(function() {
 var old = point.getCoordinates();
 /** getCoordinates()
  * Return the coordinates of the multipoint.
  * マルチポイントの座標を返します。(ol3 API)
  */
 point.setCoordinates([
 /** setCoordinates(coordinates, opt_layout)
  * Set the coordinates of the multipoint.
  * マルチポイントの座標を設定します。(ol3 API)
  */
  old[0] + 1000 * Math.random(),
  old[1] + 1000 * Math.random(),
  old[2]
 ]);
 iconFeature.changed();
}, 100);
 
 

OL3-Cesium1.23 15 - ol3cesium tracking example 1

OL3-Cesium Examples
http://openlayers.org/ol3-cesium/examples/

の例をみていきます。

15 - ol3cesium tracking example
「ol3cesium tracking example (tracking.html)」を参考に地図を表示してみます。

An OpenLayers point moves randomly. It is tracked in 3D.


OpenLayers のポイントが不規則に移動します。それは、3D で追跡されます。


14-1 HTML ファイルの作成
1 NetBeans を起動します。









2 「プロジェクト」ペインでツリーを ol3cesiumproj -> サイト・ルート -> js -> libs -> ol3-cesium-v1.23 -> examples とクリックして展開し tracking.html をダブルクリックして開きます。tracking.js もダブルクリックして開きます。



3 「新規ファイル」ボタンをクリックします。

4 ステップ「1.ファイル・タイプを選択」の「カテゴリ」で「HTML5」、「ファイルタイプ」で「HTMLファイル」を選択して「次>」ボタンをクリックします。






5 「new HTML ファイル」ダイアログで「ファイル名」を「15-ol3cesium123」と入力して「終了」ボタンをクリックします。







保存フォルダを変更するときは、「フォルダ」右の「参照」ボタンをクリックして「フォルダを参照」で「ol3cesiumproj-サイト・ルート」をクリックして選択し「フォルダを選択」ボタンをクリックします。









6 「tracking.html」の内容をコピーして「15-ol3cesium123.html」に貼り付け、修正します。

7 同じように、「新規ファイル」ボタンをクリックし、ステップ「1.ファイル・タイプを選択」の「カテゴリ」で「HTML5」、「ファイルタイプ」で「JavaScriptファイル」をクリックして選択し「次>」ボタンをクリック。「ファイル名」を「15-ol3cesium123」と入力して「終了」ボタンをクリック。「tracking.js」の内容をコピーして貼り付け、修正します。



「index.html」
<html>
 <head>
  <title>TODO supply a title</title>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
 </head>
 <body>
  <div>TODO write content</div>
  <div><a href="./3-ol3cesium17.html">3-ol3cesium17.html</a></div>
  <div><a href="./4-ol3cesium17.html">4-ol3cesium17.html</a></div>
  <div><a href="./5-ol3cesium17.html">5-ol3cesium17.html</a></div>
  <div><a href="./6-ol3cesium17.html">6-ol3cesium17.html</a></div>
  <div><a href="./7-ol3cesium17.html">7-ol3cesium17.html</a></div>
  <div><a href="./8-ol3cesium17.html">8-ol3cesium17.html</a></div>
  <div><a href="./9-ol3cesium17.html">9-ol3cesium17.html</a></div>
  <div><a href="./10-ol3cesium17.html">10-ol3cesium17.html</a></div>
  <div><a href="./11-ol3cesium17.html">11-ol3cesium17.html</a></div>
  <div><a href="./12-ol3cesium17.html">12-ol3cesium17.html</a></div>
  <div><a href="./13-ol3cesium18.html">13-ol3cesium18.html</a></div>
  <div><a href="./14-ol3cesium19.html">14-ol3cesium19.html</a></div>
  <div><a href="./15-ol3cesium123.html">15-ol3cesium123.html</a></div>
 </body>
</html>


「15-ol3cesium123.html」
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE HTML>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <meta name="robots" content="index, all" />
  <title>ol3cesium tracking example</title>
  <!-- ディレクトリ修正
  <link rel="stylesheet" href="../ol.css" type="text/css">
  -->
  <link rel="stylesheet" href="./js/libs/ol3-cesium-v1.23ol.css" type="text/css">
  <style>
   .cesium-credit-textContainer { 
    display: inline-block; 
    font-size: 50%; 
    line-height: 100%;
   }
  </style>
 </head>
 <body>
  <div id="map2d" style="width:600px;height:400px;"></div>
  <div>
   <input type="button" value="Track" onclick="javascript:toggleTracking()" />
  </div>
  <div>
   An OpenLayers point moves randomly. It is tracked in 3D.
  </div>
  <!-- <script src="inject_ol3_cesium.js"></script> -->
  <script src="inject_ol3_cesium123.js"></script>
  <!-- <script src="tracking.js"></script> -->
  <script src="15-ol3cesium123.js"></script>
 </body>
</html>

OL3-Cesium v1.23 がリリースされました

2017.1.4 に OL3-Cesium v1.23 がリリースされました。

Release 1.23 based on OL 3.20.0 and Cesium 1.29. See CHANGES.md

● Changes
○ Port to Cesium 1.29.
○ Port to OpenLayers 3.20.0.


2016.11.17 に OL3-Cesium v1.22 がリリースされました。

Release 1.22 based on OL 3.19.1 and Cesium 1.28. See CHANGES.md

● Changes
○ Port to Cesium 1.28.
○ Add OLCesium.setTargetFrameRate to enforce an fps limit for Cesium.
○ Add OLCesium option time to control the current time passed to Cesium.
OLCesium.setTargetFrameRate を追加して、Cesium の fps 制限を適用します。
Cesium に渡される現在の時間を制御するために、OLCesium option time (オプション時間)を追加します。


2016.11.3 に OL3-Cesium v1.21 がリリースされました。

Release 1.21 based on OL 3.19.1 and Cesium 1.27. See CHANGES.md

● Changes
○ Add olcs.OLCesium.trackedFeature property to make Cesium automatically track an OpenLayers point feature. When active, the Cesium camera will follow changes of the feature position. This requires using stacked view.

olcs.OLCesium.trackedFeatureプロパティを追加すると、Cesium はOpenLayers ポイントのフィーチャを自動的に追跡します。 アクティブになると、Cesium カメラはフィーチャ位置の変化に追従します。 これには、積み上げビューを使用する必要があります。

○ Port to OpenLayers 3.19.1.
○ Port to Cesium 1.27.


OL3-Cesium 2 - 準備
2 - 準備
2-1 ダウンロード

a Ol3-Cesium
http://openlayers.org/ol3-cesium/

の「Release」ボタンをクリックします。

b Release・openlayers/ol3-cesium・GitHub
https://github.com/openlayers/ol3-cesium/releases/

の Latest release(ol3-cesium-v1.23.zip)[2017.1.4 現在]をクリックしてダウンロードします。バージョンはそれぞれ、

OpenLayers3 v3.20.0
Cesium v1.29

です。

c ダウンロードしたファイルを展開します。

user@deb8-vmw:~$ cd ダウンロード
user@deb8-vmw:~/ダウンロード$ ls
---
ol3-cesium-v1.23.zip
---
user@deb8-vmw:~/ダウンロード$ unzip ol3-cesium-v1.23.zip
user@deb8-vmw:~/ダウンロード$ ls
---
ol3-cesium-v1.23
ol3-cesium-v1.23.zip
---

展開したフォルダをサイトルートにコピーします。
user@deb8-vmw:~/ダウンロード$ cp -r ol3-cesium-v1.23 ../public_html/ol3cesiumproj/public_html/js/libs/

ol3cesiumproj/public_html/js/libs/ol3-cesium-v1.23/examples/inject_ol3_cesium.js を ol3Cesiumproj/piblic_html にコピーしてファイル名を inject_ol3_cesium123.js に変更し、内容を次のようにします。
(function() {
 var mode = window.location.href.match(/mode=([a-z0-9\-]+)\&?/i);
 var DIST = true;
 var isDev = mode && mode[1] === 'dev';
 //var cs = isDev ? 'CesiumUnminified/Cesium.js' : 'Cesium/Cesium.js';
 //var ol = (DIST && isDev) ? 'ol3cesium-debug.js' : 'ol3cesium.js';
 var cs = isDev ? './js/libs/ol3-cesium-v1.23/CesiumUnminified/Cesium.js' : './js/libs/ol3-cesium-v1.23/Cesium/Cesium.js';
 var ol = (DIST && isDev) ? './js/libs/ol3-cesium-v1.23/ol3cesium-debug.js' : './js/libs/ol3-cesium-v1.23/ol3cesium.js';
 if (!window.LAZY_CESIUM) {
  //document.write('<scr' + 'ipt type="text/javascript" src="../' + cs + '"></scr' + 'ipt>');
  document.write('<scr' + 'ipt type="text/javascript" src="' + cs + '"></scr' + 'ipt>');
 }
 //document.write('<scr' + 'ipt type="text/javascript" src="../' + ol + '"></scr' + 'ipt>');
 document.write('<scr' + 'ipt type="text/javascript" src="' + ol + '"></scr' + 'ipt>');
 var s;
 window.lazyLoadCesium = function() {
  if (!s) {
   s = document.createElement("script");
   s.type = "text/javascript";
   //s.src = '../' + cs;
   s.src = cs;
   console.log('loading Cesium...');
   document.body.appendChild(s);
  }
  return s;
 };
})();