「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 件のコメント:
コメントを投稿