2015年3月2日月曜日

2 - ol3.2ex 73b -Earthquake Clusters 2

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

「273-ol3ex.js」
var earthquakeFill = new ol.style.Fill({
/** ol.style.Fill 
 * Set fill style for vector features.
 * ベクタフィーチャの塗りつぶしスタイルを設定。(ol3 API)
 */
 color: 'rgba(255, 153, 0, 0.8)'
});
var earthquakeStroke = 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)
 */
 color: 'rgba(255, 204, 0, 0.2)',
 width: 1
});
var textFill = new ol.style.Fill({
 color: '#fff'
});
var textStroke = new ol.style.Stroke({
 color: 'rgba(0, 0, 0, 0.6)',
 width: 3
});
var invisibleFill = new ol.style.Fill({
 color: 'rgba(255, 255, 255, 0.01)'
});
function createEarthquakeStyle(feature) {
/** 2012_Earthquakes_Mag5.kml stores the magnitude 
 * of each earthquake in a standards-violating 
 * <magnitude> tag in each Placemark.  We extract 
 * it from the Placemark's name instead.
 * 2012_Earthquakes_Mag5.kml は、ぞれぞれの Placemark 
 * にある標準規格に違反する  <magnitude> タグのぞれぞれの
 * 地震のマグニチュードを格納しています。代わりに Placemark 
 * の名前からそれを抽出します。
 */
 var name = feature.get('name');
 /** get(key)
  * Gets a value.
  * (ol3 API[説明は Stable Only のチェックを外すと表示])
  */
 var magnitude = parseFloat(name.substr(2));
 /** parseFloat()
  * 引数として与えられた文字列を解析し、浮動小数点数を返します。
  * (MDN[https://developer.mozilla.org/ja/docs/Web/
  * JavaScript/Reference/Global_Objects/parseFloat])
  */
 /** String.prototype.substr()
  * The substr() method returns the characters in a 
  * string beginning at the specified location 
  * through the specified number of characters.
  * substr()メソッドは、文字列内の指定した位置から始まり、
  * 指定した文字数のまでの文字を返します。
  * (MDN[https://developer.mozilla.org/en-US/docs/Web/
  * JavaScript/Reference/Global_Objects/String/substr])
  */
 var radius = 5 + 20 * (magnitude - 5);
 return new ol.style.Style({
 /** ol.style.Style 
  * Base class for vector feature rendering styles.
  * ベクタフィーチャがスタイルを描画するための基本クラス。
  * (ol3 API)
  */
  geometry: feature.getGeometry(),
  /** getGeometry()
   * Returns the Geometry associated with this feature 
   * using the current geometry name property. By default, 
   * this is geometry but it may be changed by calling 
   * setGeometryName.
   * 現在のジオメトリネームプロパティを使用して、このフィーチャに
   * 関連したジオメトリを返します。デフォルトでは、ジオメトリです
   * が、setGeometryName を呼び出すことによって変更することがで
   * きます。(ol3 API)
   */
  image: new ol.style.RegularShape({
  /** ol.style.RegularShape
   * Set regular shape style for vector features. The 
   * resulting shape will be a regular polygon when 
   * radius is provided, or a star when radius1 and 
   * radius2 are provided.
   * ベクタフィーチャの規則的な形状のスタイルを設定します。生じた
   * 形状は、radius が提供されたとき正多角形になり、または、
   * radius1 と radius2 が提供されたとき星形になります。
   * (ol3 API)
   */
   radius1: radius,
   /** radius1:
    * Inner radius of a star.
    *(ol3 API[説明は Stable Only のチェックを外すと表示])
    */
   radius2: 3,
   /** radius2:
    * Outer radius of a star.
    *(ol3 API[説明は Stable Only のチェックを外すと表示])
    */
   points: 5,
   /** points:
    * Number of points for stars and regular polygons. 
    * In case of a polygon, the number of points is 
    * the number of sides.
    * 星形と正多角形の点の数。ポリゴンの場合、点の数は辺の数です。
    * (ol3 API[説明は Stable Only のチェックを外すと表示])
    */
   angle: Math.PI,
   /** angle:
    * Shape's angle in radians. A value of 0 will 
    * have one of the shape's point facing up. 
    * Default value is 0.
    * ラジウス単位の形状の角度。値 0 は、表を上にした一つの
    * 形状の点です。デフォル値は 0 です。
    * (ol3 API[説明は Stable Only のチェックを外すと表示])
    */
   /** Math.PI()
    * 円周率。約 3.14159 です。
    * (MDN[https://developer.mozilla.org/ja/docs/Web
    * /JavaScript/Reference/Global_Objects/Math/PI])
    */
   fill: earthquakeFill, // Fill style.(ol3 API)
   stroke: earthquakeStroke // Stroke style.(ol3 API)
  })
 });
}
var maxFeatureCount;
function calculateClusterInfo(resolution) {
 maxFeatureCount = 0;
 var features = vector.getSource().getFeatures();
 /** getSource()
  * Return: Source(al3 API)
  */
 /** getFeatures()
  * Get all features on the source.
  * ソース上のすべてのフィーチャを取得します。
  * Returns: Features.(al3 API)
  */
 var feature, radius;
 for (var i = features.length - 1; i >= 0; --i) {
  feature = features[i];
  var originalFeatures = feature.get('features');
  var extent = ol.extent.createEmpty();
  /** ol.extent.createEmpty
   * Returns: Empty extent.(al3 API)
   */
  for (var j = 0, jj = originalFeatures.length; j < jj; ++j) {
   ol.extent.extend(extent, originalFeatures[j].getGeometry().getExtent());
   /** ol.extent.extend(extent1, extent2)
    * Returns: Extent.(al3 API)
    */
   /** getExtent()
    * Get the extent of the geometry.
    * ジオメトリの範囲を取得します。(ol3 API)
    */
  }
  maxFeatureCount = Math.max(maxFeatureCount, jj);
  /** Math.max() 
   * 引数として与えた複数の数の中で最大の数を返します。
   * (MDN [https://developer.mozilla.org/ja/docs/Web/
   * JavaScript/Reference/Global_Objects/Math/max])
   */
  radius = 0.25 * (ol.extent.getWidth(extent) + ol.extent.getHeight(extent)) /
  /** ol.extent.getWidth(extent)
   * Return: Width.(ol3 API)
   */
  /** ol.extent.getHeight(extent)
   * Return: Height.(ol3 API)
   */
   resolution;
  feature.set('radius', radius);
  /** set(key, value)
   * Sets a value.
   * (ol3 API[説明は Stable Only のチェックを外すと表示])
   */
 }
}
var currentResolution;
function styleFunction(feature, resolution) {
 if (resolution != currentResolution) {
  calculateClusterInfo(resolution);
  currentResolution = resolution;
 }
 var style;
 var size = feature.get('features').length;
 if (size > 1) {
  style = [new ol.style.Style({
  /** ol.style.Style 
   * Base class for vector feature rendering styles.
   * ベクタフィーチャがスタイルを描画するための基本クラス。
   * (ol3 API)
   */
   image: new ol.style.Circle({
   /** ol.style.Circle
    * Set circle style for vector features.
    * ベクタフィーチャの円のスタイルを設定。(ol3 API)
    */
    radius: feature.get('radius'),
    fill: new ol.style.Fill({
     color: [255, 153, 0, Math.min(0.8, 0.4 + (size / maxFeatureCount))]
     /** Math.min() 
      * 引数として与えた複数の数の中で最小の数を返します。
      * (MDN [https://developer.mozilla.org/ja/docs/Web/
      * JavaScript/Reference/Global_Objects/Math/min])
      */
    })
   }),
   text: new ol.style.Text({
   /** ol.style.Text
    * Set text style for vector features.
    * ベクタフィーチャの文字列のスタイルを設定します。
    * (ol3 API)
    */
    text: size.toString(),
    /** Number.prototype.toString( [ radix ] )
     * 指定された Number オブジェクトを表す 文字列を返します。
     * radix: 数値を表すために使われる基数を指定する、2 から 
     * 36 までの整数。省略したときは 10。
     * MDN([https://developer.mozilla.org/ja/docs/Web/
     * JavaScript/Reference/Global_Objects/Number/toString])
     */
    fill: textFill,
    stroke: textStroke
   })
  })];
 } else {
  var originalFeature = feature.get('features')[0];
  style = [createEarthquakeStyle(originalFeature)];
 }
 return style;
}
function selectStyleFunction(feature, resolution) {
 var styles = [new ol.style.Style({
  image: new ol.style.Circle({
   radius: feature.get('radius'),
   fill: invisibleFill
  })
 })];
 var originalFeatures = feature.get('features');
 var originalFeature;
 for (var i = originalFeatures.length - 1; i >= 0; --i) {
  originalFeature = originalFeatures[i];
  styles.push(createEarthquakeStyle(originalFeature));
 /** push(elem)
  * Insert the provided element at the end of the 
  * collection.
  * コレクションの最後に供給されたエレメントに挿入します。
  * Name: elem, Type: T, Description: Element
  * (ol3 API)
  */
 }
 return styles;
}
var vector = new ol.layer.Vector({
/** ol.layer.Vector
 * Vector data that is rendered client-side.
 * クライアント側で描画されたベクタデータ。(ol3 API)
 */
 source: new ol.source.Cluster({
  distance: 40,
  /** distance
   * Minimum distance in pixels between clusters. 
   * Default is 20.
   * クラスタ間のピクセル単位の最短間隔。デフォルトは 20。
   *(ol3 API[説明は Stable Only のチェックを外すと表示]))
   */
  source: new ol.source.KML({
  /** ol.source.KML 
   * Static vector source in KML format
   * KML フォーマットの静的ベクタソース(0l3 API)
   */
   extractStyles: false,
   /** extractStyles:
    * Extract styles from the KML document. Default 
    * is true.
    * KML ドキュメントからの抽出スタイル。デフォrとは true。
    * (0l3 API)
    */
   projection: 'EPSG:3857',
   // url: 'data/kml/2012_Earthquakes_Mag5.kml'
   url: 'v3.2.1/examples/data/kml/2012_Earthquakes_Mag5.kml'
  })
 }),
 style: styleFunction
});
var raster = 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.Stamen({
 /** ol.source.Stamen
  * Layer source for the Stamen tile server.
  * Steman タイルサーバのレイヤソース。(0l3 API)
  * (「2 - ol3ex 24b - Stamen example 2」
  * も参照してください。
  */
  layer: 'toner'
 })
});
var map = new ol.Map({
 layers: [raster, vector],
 interactions: ol.interaction.defaults().extend([new ol.interaction.Select({
 /** 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 を参照してください。)
  */
 /** ol.interaction.Select 
  * Handles selection of vector data. A 
  * ol.FeatureOverlay is maintained internally to 
  * store the selected feature(s). Which features 
  * are selected is determined by the condition 
  * option, and optionally the toggle or add/remove 
  * options.
  * ベクタデータの選択を処理します。 ol.FeatureOverlay 
  * は、選択したフィーチャを格納するために内部的に維持され
  * ています。選択されているどのフィーチャでも条件オプショ
  * ン、そして部分的にトグルまたは追加/削除オプションによっ
  * て決定されます。(ol3 API)
  */
  condition: function(evt) {
   return evt.originalEvent.type == 'mousemove' ||
    evt.type == 'singleclick';
  },
  style: selectStyleFunction
 })]),
 target: 'map',
 view: new ol.View({
  center: [0, 0],
  zoom: 2
 })
});

0 件のコメント: