2015年10月18日日曜日

OL3-Cesium 7 - ol3cesium vectors example 2

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

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

「7-ol3cesium18.js」
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: new ol.geom.Point([700000, 200000, 100000]),
 /** ol.geom.Point
  * Point geometry.(ol3 API)
  */
});
var cervinFeature = new ol.Feature({
 geometry: new ol.geom.Point([852541, 5776649])
});
cervinFeature.getGeometry().set('altitudeMode', 'clampToGround');
/** 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)
 */
/** set(key, value)
 * Sets a value.(ol3 API)
 */
var iconStyle = new ol.style.Style({
/** ol.style.Style 
 * Base class for vector feature rendering styles.
 * ベクタフィーチャがスタイルを描画するための基本クラス。
 * (ol3 API[説明は Stable Only のチェックを外すと表示])
 */
 image: new ol.style.Icon(/** @type {olx.style.IconOptions} */ ({
 /** ol.style.Icon 
  * Set icon style for vector features.
  * ベクタフィーチャのアイコンスタイルを設定します。
  * (ol3 API[説明は Stable Only のチェックを外すと表示])
  */
 /** @type 
  * 値のタイプ(型)の説明 - 式などで表示
  * (@use JSDoc[http://usejsdoc.org/]より)
  */
  anchor: [0.5, 46],
  anchorXUnits: 'fraction',
  anchorYUnits: 'pixels',
  opacity: 0.75,
  // src: 'data/icon.png'
  src: './js/libs/ol3-cesium-v1.8/examples/data/icon.png'
 })),
 text: new ol.style.Text({
 /** ol.style.Text
  * Set text style for vector features.
  * ベクタフィーチャの文字列のスタイルを設定します。
  * (ol3 API[説明は Stable Only のチェックを外すと表示])
  */
  text: 'Some text',
  textAlign: 'center',
  textBaseline: 'middle',
  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 のチェックを外すと表示])
   */
   color: 'magenta',
   width: 3
  }),
  fill: new ol.style.Fill({
  /** ol.style.Fill 
   * Set fill style for vector features.
   * ベクタフィーチャの塗りつぶしスタイルを設定。(ol3 API)
   */
   color: 'rgba(0, 0, 155, 0.3)'
  })
 })
});
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)
 */
cervinFeature.setStyle(iconStyle);
var image = new ol.style.Circle({
/** ol.style.Circle
 * Set circle style for vector features.
 * ベクタフィーチャの円のスタイルを設定。(ol3 API)
 */
 radius: 5,
 fill: null,
 stroke: new ol.style.Stroke({color: 'red', width: 1})
});
var styles = {
 'Point': [new ol.style.Style({
  image: image
 })],
 'LineString': [new ol.style.Style({
  stroke: new ol.style.Stroke({
   color: 'green',
   lineDash: [4],
   width: 1
  })
 })],
 'MultiLineString': [new ol.style.Style({
  stroke: new ol.style.Stroke({
   color: 'green',
   width: 1
  })
 })],
 'MultiPoint': [new ol.style.Style({
  image: image,
  text: new ol.style.Text({
   text: 'MP',
   stroke: new ol.style.Stroke({
    color: 'purple'
   })
  })
 })],
 'MultiPolygon': [new ol.style.Style({
  stroke: new ol.style.Stroke({
   color: 'yellow',
   width: 1
  }),
  fill: new ol.style.Fill({
   color: 'rgba(255, 255, 0, 0.1)'
  })
 })],
 'Polygon': [new ol.style.Style({
  stroke: new ol.style.Stroke({
   color: 'blue',
   lineDash: [4],
   width: 3
  }),
  fill: new ol.style.Fill({
   color: 'rgba(0, 0, 255, 0.1)'
  })
 })],
 'GeometryCollection': [new ol.style.Style({
  stroke: new ol.style.Stroke({
   color: 'magenta',
   width: 2
  }),
  fill: new ol.style.Fill({
   color: 'magenta'
  }),
  image: new ol.style.Circle({
   radius: 10, // pixels
   fill: null,
   stroke: new ol.style.Stroke({
    color: 'magenta'
   })
  })
 })],
 'Circle': [new ol.style.Style({
  stroke: new ol.style.Stroke({
   color: 'red',
   width: 2
  }),
  fill: new ol.style.Fill({
   color: 'rgba(255,0,0,0.2)'
  })
 })]
};
var styleFunction = function(feature, resolution) {
 var geo = feature.getGeometry();
 // always assign a style to prevent feature skipping
 // 常にフィーチャ・スキップを防止するためのスタイルを割り当てま
 // す。
 return geo ? styles[geo.getType()] : styles['Point'];
 /** 条件演算子 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])
  */
 /** getType()
  * Get the type of this geometry. 
  * ジオメトリの型を取得。(ol3 API)
  */
};
var vectorSource = new ol.source.Vector({
/** ol.source.Vector 
 * Provides a source of features for vector layers.
 * ベクタレイヤのフィーチャのソースを提供します。(ol3 API)
 */
 format: new ol.format.GeoJSON(),
 /** ol.format.GeoJSON 
  * Feature format for reading and writing data 
  * in the GeoJSON format.
  * GeoJSON フォーマットのデータを読み書きするための
  * フィーチャフォーマット。(ol3 API)
  */
 // url: 'data/geojson/vector_data.geojson'
 url: './js/libs/ol3-cesium-v1.8/examples/data/geojson/vector_data.geojson'
});
var theCircle = new ol.Feature(new ol.geom.Circle([5e6, 7e6, 5e5], 1e6));
/** ol.geom.Circle 
 * Circle geometry. 円のジオメトリ。(ol3 API)
 */
var vectorLayer = new ol.layer.Vector({
/** ol.layer.Vector
 * Vector data that is rendered client-side.
 * クライアント側で描画されたベクタデータ。(ol3 API)
 */
 source: vectorSource,
 style: styleFunction
});
var vectorSource2 = new ol.source.Vector({
 features: [iconFeature, cervinFeature]
});

var vectorLayer2 = new ol.layer.Vector({
 source: vectorSource2
});
var dragAndDropInteraction = new ol.interaction.DragAndDrop({
/** ol.interaction.DragAndDrop 
 * Handles input of vector data by drag and drop.
 * ドラッグアンドドロップによってベクタデータの入力を取り扱いま
 * す。(ol3 API)
 */
 formatConstructors: [
  ol.format.GPX,
  /** ol.format.GPX 
   * Feature format for reading and writing data 
   * in the GPX format.
   * GPX フォーマットでデータを読み書きするためのフィー
   * チャのフォーマット。(ol3 API)
   */
  ol.format.GeoJSON,
  ol.format.IGC,
  /** ol.format.IGC 
   * Feature format for *.igc flight recording 
   * files.
   * *.igc フライト記録ファイル用のフィーチャフォーマット。
   * (ol3 API)
   */
  ol.format.KML,
  /** ol.format.KML 
   * Feature format for reading and writing data 
   * in the KML format.
   * KML フォーマットでデータを読み書きするためのフィー
   * チャのフォーマット。(ol3 API)
   */
  ol.format.TopoJSON
  /** ol.format.TopoJSON 
   * Feature format for reading and writing data 
   * in the TopoJSON format.
   * TopoJSON フォーマットでデータを読み書きするためのフィー
   * チャのフォーマット。(ol3 API)
   */
 ]
});
var map = new ol.Map({
 interactions: ol.interaction.defaults().extend([dragAndDropInteraction]),
 /** ol.interaction.defaults
  * Set of interactions included in maps by default. 
  * Specific interactions can be excluded by setting 
  * the appropriate option to false in the constructor 
  * options, but the order of the interactions is fixed. 
  * If you want to specify a different order for 
  * interactions, you will need to create your own 
  * ol.interaction.Interaction instances and insert 
  * them into a ol.Collection in the order you want 
  * before creating your ol.Map instance.
  * デフォルトでマップに含まれるインターラクションのセット。
  * 具体的なインターラクションは、コンストラクタのオプションで適切
  * なオプションをfalseに設定することで除外することができますが、
  * インターラクションの順番は固定されています。インターラクション
  * に対して別の順番を指定したい場合は、独自の 
  * ol.interaction.Interaction インスタンスを作成し、ol.Map イ
  * ンスタンスを作成する前に、望む順番で ol.Collection にそれ
  * らを挿入する必要があります。(ol3 API)
  *  (訳注:インターラクションの順番は、API を参照してください。)
  */
 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)
    */
    key: 'Ak-dzM...(省略)',
    imagerySet: 'Aerial'
   })
  }),
  vectorLayer,
  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()
  * デフォルトでは、マップに含まコントロールのセット。
  * 特に設定しない限り、これは、以下の各コントロールの
  * インスタンスを含むコレクションを返します。(ol3 API)
  * ol.control.Zoom, ol.control.Rotate, ol.control.Attribution
  */
  attributionOptions: /** @type {olx.control.AttributionOptions} */ ({
  /** @type 
   * 値のタイプ(型)の説明 - 式などで表示
   * (@use JSDoc[http://usejsdoc.org/]より)
   */
   collapsible: false // 折りたたみ
  })
 }),
 view: new ol.View({
  center: [0, 0],
  zoom: 2
 })
});
dragAndDropInteraction.on('addfeatures', function(event) {
/** on()
 * Listen for a certain type of event.
 * あるタイプのイベントをリッスンします。
 * Returns: Unique key for the listener.(ol3 API)
 */
 var vectorSource = new ol.source.Vector({
  features: event.features,
  projection: event.projection
 });
 map.getLayers().push(new ol.layer.Vector({
 /** getLayers()
  * Get the collection of layers associated with 
  * this map.
  * このマップと関連するレイヤのコレクションを取得します。
  * (ol3 API)
  */
 /** push(elem)
  * Insert the provided element at the end of the 
  * collection.
  * コレクションの最後に供給されたエレメントに挿入します。
  * Name: elem, Type: T, Description: Element
  * (ol3 API)
  */
  source: vectorSource,
  style: styleFunction
 }));
 var view = map.getView();
 /** 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)
  */
 // view.fitExtent(
 view.fit(
 /** fit(geometry, size, opt_options) <- fitExtent()
  * Fit the given geometry or extent based on the given map 
  * size and border. The size is pixel dimensions of the box 
  * to fit the extent into. In most cases you will want to 
  * use the map size, that is map.getSize(). Takes care of 
  * the map angle.
  * 指定されたマップのサイズと境界線に基づいて、指定されたジオメ
  * トリまたは範囲を合わせます。サイズは範囲に合わせてピクセル寸
  * 法のボックスです。ほとんどの場合、マップのサイズを使用します
  * が、それは map.getSize()。マップアングルに注意してくださ
  * い。(ol3 API[説明は Stable Only のチェックを外すと表示])
  */
  vectorSource.getExtent(), /** @type {ol.Size} */ (map.getSize()));
  /** getExtent()
   * Get the extent of the features currently in the source.
   * This method is not available when the source is 
   * configured with useSpatialIndex set to false.
   * ソースにおける現在のフィーチャの範囲を取得します。ソースが
   * false に 設定されている useSpatialIndex で構成されている場
   * 合、このメソッドは使用できません。(ol3 API)
   */
  /** getSize()
   * Get the size of this map.
   * Returns: The size in pixels of the map in the DOM.
   * マップのサイズを取得。(ol3 API)
   */
});
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 : '//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)
 */
var csLabels = new Cesium.LabelCollection();
/** new LabelCollection(options)
 * A renderable collection of labels. Labels are 
 * viewport-aligned text positioned in the 3D scene. 
 * Each label can have a different font, color, scale, etc. 
 * Labels are added and removed from the collection using 
 * LabelCollection#add and LabelCollection#remove. 
 * ラベルのレンダリング可能なコレクション。ラベルは、3D シーン内
 * にビューポート整列テキスト配置されています。各ラベルは異なる
 * フォント、色、スケールなどを持っています。
 * ラベルは、LabelCollection#add と LabelCollection#remove 
 * を使用してコレクションから追加および削除されます。
 * (Cesium refdoc)
 */
csLabels.add({
 position: Cesium.Cartesian3.fromRadians(20, 20, 0),
 /** new Cartesian3(x, y, z)    
  * A 3D Cartesian point. (Cesium refdoc)
  */
 /** Cartesian3.fromRadians(longitude, latitude, height, 
  * ellipsoid, result)
  * Returns a Cartesian3 position from longitude and 
  * latitude values given in radians. 
  * ラジアンで指定された経度と緯度の値から Cartesian3 位置を返し
  * ます。(Cesium refdoc)
  */
 text: 'Pre-existing primitive'
});
scene.primitives.add(csLabels);
/** primitives
 * Gets the collection of primitives. 
 * 基本要素(図形を構成する点や線)[?]のコレクションを取得しま
 * す。(Cesium refdoc)
 */
// Adding a feature after the layer has been synchronized.
// レイヤが同期された後、フィーチャを追加。
vectorSource.addFeature(theCircle);
/** 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)
 */
var hasTheVectorLayer = true;
function addOrRemoveOneVectorLayer() {
 if (hasTheVectorLayer) {
  map.getLayers().remove(vectorLayer);
  /** remove(elem)
   * Remove the first occurrence of an element from the 
   * collection.
   * コレクションから最初に出現する要素(elemnet)を削除します。
   * (ol3 API)
   */
 } else {
  map.getLayers().insertAt(1, vectorLayer);
  /** insertAt(index, elem)
   * Insert an element at the provided index.
   * 準備された索引(index)で要素(element)を挿入します。
   * (ol3 API)
   */
 }
 hasTheVectorLayer = !hasTheVectorLayer;
}
function addOrRemoveOneFeature() {
 var found = vectorSource2.getFeatures().indexOf(iconFeature);
 /** getFeatures()
  * Get all features on the source.
  * ソースのすべてのフィーチャを取得します。
  * Return: Features(ol3 API)
  */
 /** Array.prototype.indexOf()
  * The indexOf() method returns the first index at which 
  * a given element can be found in the array, or -1 if it 
  * is not present.
  * indexOf()メソッドは、配列中に存在する指定された要素の最初
  * のインデックスを、または、それがしない場合は -1 を返します。
  * (MDN[https://developer.mozilla.org/en-US/docs/Web/
  * JavaScript/Reference/Global_Objects/Array/indexOf])
  */
 if (found === -1) {
  vectorSource2.addFeature(iconFeature);
 } else {
  vectorSource2.removeFeature(iconFeature);
  /** removeFeature(feature)
   * Remove a single feature from the source. If you want 
   * to remove all features at once, use the source.clear() 
   * method instead.
   * 単一フィーチャをソースから削除します。もし即座にすべての
   * フィーチャを削除したいなら、替りに source.clear() を使用
   * します。(ol3 API)
   */
 }
}
var oldStyle = new ol.style.Style({
 stroke: new ol.style.Stroke({
  color: 'blue',
  width: 2
 }),
 fill: new ol.style.Fill({
  color: 'green'
 })
});
function toggleStyle() {
 var swap = theCircle.getStyle();
 /** getStyle()
  * Get the style for features. This returns whatever was 
  * passed to the style option at construction or to the 
  * setStyle method.
  * フィーチャのスタイルを取得します。これは、確立時スタイルオプ
  * ションにまたは setStyle メソッドのどちらかに渡されるものを
  * 返します。(ol3 API)
  */
 theCircle.setStyle(oldStyle);
 oldStyle = swap;
}
Chromium では表示できないので、Iceweasel(Firefox)のアドレスバーに

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

と入力して表示します。


0 件のコメント: