2014年11月30日日曜日

2 - ol3ex 35b - GPX example 2

GPX は、「GPX(http://ja.wikipedia.org/wiki/GPX)」に次のようにあります。

*****
GPX(ジーピーエックス、GPS eXchange Format)は、GPS装置やGPSソフトウェアなど、アプリケーション間でGPSのデータをやりとりするためのデータフォーマットである。GPXは、XML Schemaベースでデザインされており、ウェイポイントや軌跡、ルートなどを記述する。
*****

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

fells_loop.gpx の内容は、次のようになっています。
「fells_loop.gpx」
<?xml version="1.0"?>
<gpx
 version="1.0"
 creator="ExpertGPS 1.1 - http://www.topografix.com"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns="http://www.topografix.com/GPX/1/0"
 xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd">
<time>2002-02-27T17:18:33Z</time>
<bounds minlat="42.401051" minlon="-71.126602" maxlat="42.468655" maxlon="-71.102973"/>
<wpt lat="42.438878" lon="-71.119277">
 <ele>44.586548</ele>
 <time>2001-11-28T21:05:28Z</time>
 <name>5066</name>
 <desc><![CDATA[5066]]></desc>
 <sym>Crossing</sym>
 <type><![CDATA[Crossing]]></type>
</wpt>
<wpt lat="42.439227" lon="-71.119689">
---

「235-ol3ex.js」
var projection = ol.proj.get('EPSG:3857');
/** ol.proj.get
 * Fetches a Projection object for the code specified.
 * 指定されたコードのプロジェクション·オブジェクトを取得します。
 * (0l3 API)
 */
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.BingMaps({
 /** ol.source.BingMaps
  * Layer source for Bing Maps tile data.
  * Bing Maps タイルデータのレイヤソース。(ol3 API)
  */
  imagerySet: 'Aerial',
  key: 'Ak-dzM...(省略)'
 })
});
var style = {
 'Point': [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)
   */
   fill: new ol.style.Fill({
   /** ol.style.Fill 
    * Set fill style for vector features.
    * ベクタフィーチャの塗りつぶしスタイルを設定。(ol3 API)
    */
    color: 'rgba(255,255,0,0.4)'
   }),
   radius: 5,
   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)
    */
    color: '#ff0',
    width: 1
   })
  })
 })],
 'LineString': [new ol.style.Style({
  stroke: new ol.style.Stroke({
   color: '#f00',
   width: 3
  })
 })],
 'MultiLineString': [new ol.style.Style({
  stroke: new ol.style.Stroke({
   color: '#0f0',
   width: 3
  })
 })]
};
var vector = new ol.layer.Vector({
/** ol.layer.Vector
 * Vector data that is rendered client-side.
 * クライアント側で描画されるベクタデータ。(ol3 API)
 */
 source: new ol.source.GPX({
 /** ol.source.GPX 
  * Static vector source in GPX format.
  * GPX形式の静的ベクトルソース。
  */
  projection: projection,
  // url: 'data/gpx/fells_loop.gpx'
  url: 'v3.0.0/examples/data/gpx/fells_loop.gpx' // 修正
 }),
 style: function(feature, resolution) {
  return style[feature.getGeometry().getType()];
  /** 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)
   */
  /** getType()
   * Get the type of this geometry. 
   * ジオメトリの型を取得。(ol3 API)
   */
  features.push(clone);
  /** push(elem)
   * Insert the provided element at the end of the 
   * collection.
   * コレクションの最後に供給されたエレメントに挿入します。
   * Name: elem, Type: T, Description: Element
   * (ol3 API)
   */
 }); }
});
var map = new ol.Map({
 layers: [raster, vector],
 target: document.getElementById('map'),
 view: new ol.View({
  center: [-7916041.528716288, 5228379.045749711],
  zoom: 12
 })
});
var displayFeatureInfo = function(pixel) {
 var features = [];
 map.forEachFeatureAtPixel(pixel, function(feature, layer) {
 /** forEachFeatureAtPixel
  * Detect features that intersect a pixel on the viewport, 
  * and execute a callback with each intersecting feature. 
  * Layers included in the detection can be configured 
  * through opt_layerFilter. Feature overlays will always 
  * be included in the detection.
  * ビューポート上のピクセルと交差するフィーチャを検出し、
  * 各交差するフィーチャとコールバックを実行します。
  * 検出に含まれるレイヤが opt_layerFilter を通じて
  * 設定することができます。フィーチャーオーバーレイは
  * 常に検出に含まれます。(ol3 API)
  */
  features.push(feature);
 if (features.length > 0) {
  var info = [];
  var i, ii;
  for (i = 0, ii = features.length; i < ii; ++i) {
   info.push(features[i].get('desc'));
   /** get(key)
    * Gets a value.
    * (ol3 API[説明は Stable Only のチェックを外すと表示])
    */
  }
  document.getElementById('info').innerHTML = info.join(', ') || '(unknown)';
  /** Array.join
   * 配列の全ての要素を繋いで文字列にします。
   * (MDN [https://developer.mozilla.org/ja/docs/Web/
   * JavaScript/Reference/Global_Objects/Array/join])
   */
  map.getTarget().style.cursor = 'pointer';
  /** getTarget()
   * Get the target in which this map is rendered. 
   * Note that this returns what is entered as an option or  
   * in setTarget: if that was an element, it returns an 
   * element; if a string, it returns that.
   * レンダリングされたこのマップのターゲットを取得します。
   * これはオプションとして、または setTarget に入力されているも
   * のを返すことに注意してください:それが要素ならば、要素を返し
   * ます。文字列ならば、それを返します。(ol3 API)
   */
 } else {
  document.getElementById('info').innerHTML = '&nbsp;';
  map.getTarget().style.cursor = '';
 }
};
$(map.getViewport()).on('mousemove', function(evt) {
/** getViewport()
 * Return: Viewport (ol3 API)
 */
/** jQuery on イベント */
 var pixel = map.getEventPixel(evt.originalEvent);
 /** getEventPixel
  * Returns the map pixel position for a browser event.
  * ブラウザイベントに対して、マップのピクセル位置を返します。
  * (ol3 API)
  */
  displayFeatureInfo(pixel);
});
map.on('click', function(evt) {
/** on
 * Listen for a certain type of event.
 * あるタイプのイベントをリッスンします。(ol3 API)
 */
 displayFeatureInfo(evt.pixel);
});
var exportGPXElement = document.getElementById('export-gpx');
if ('download' in exportGPXElement) {
 var vectorSource = /** @type {ol.source.Vector} */ (vector.getSource());
 /** @type 
  * 値のタイプ(型)の説明 - 式などで表示
  * ol.source.Vector の型を使用。
  * (@use JSDoc[http://usejsdoc.org/]より)
  */
 /** getSource()
  * Return: Source(al3 API)
  */
 exportGPXElement.addEventListener('click', function(e) {
 /** EventTarget.addEventListener
  * addEventListener は、 1 つのイベントターゲットにイベント 
  * リスナーを1 つ登録します。イベントターゲットは、ドキュメント
  * 上の単一のノード、ドキュメント自身、ウィンドウ、あるいは、
  * XMLHttpRequest です。
  * (MDN[https://developer.mozilla.org/ja/docs/Web/API/
  * EventTarget.addEventListener])
  */
  if (!exportGPXElement.href) {
   var features = [];
    vectorSource.forEachFeature(function(feature) {
    /** forEachFeature
     * forEachFeature(f) [Type: function, 
     * Description: Callback](ol3 API)
     */
     var clone = feature.clone();
     /** clone()
      * Clone this feature. If the original feature has a 
      * geometry it is also cloned. The feature id is not 
      * set in the clone.
      * このフィーチャを複製します。元のフィーチャは、ジオメトリ
      * を有する場合にも複製します。フィーチャ ID は、クローンに
      * 設定されていません。(ol3 API)
      */
     clone.getGeometry().transform(projection, 'EPSG:4326');
     /** 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)
      */
     /** transform(source, destination)
      * Transform each coordinate of the geometry from one 
      * coordinate reference system to another. The 
      * geometry is modified in place. For example, a line 
      * will be transformed to a line and a circle to a 
      * circle. If you do not want the geometry modified in 
      * place, first clone() it and then use this function 
      * on the clone.
      * ある座標参照系から別のものへジオメトリの各座標を変換。ジ
      * オメトリは、所定の位置に修正されます。例えば、ラインはラ
      * インに、円は円に変換されます。ジオメトリを所定の位置に修
      * 正したくない場合、最初にそれを clone() し、それからク
      * ローンでこの関数を使用します。(ol3 API)
      */
     features.push(clone);
    });
    var node = new ol.format.GPX().writeFeatures(features);
    /** ol.format.GPX 
     * Feature format for reading and writing data in the 
     * GPX format.
     * GPX フォーマットでデータを読み書きするためのフィーチャの
     * フォーマット。(ol3 API)
     */
    /** writeFeatures
     * Encode an array of features in the GPX format.
     * GPX フォーマットのフィーチャの配列をエンコードします。
     * (ol3 API)
     */
    var string = new XMLSerializer().serializeToString(
    /** XMLSerializer()
     * DOM サブツリーや DOM 文書をテキストに変換できます。
     * XmlSerializerを権限のないスクリプトで使用できます。
     * serializeToString メソッド
     * 文字列の形にシリアライズされたサブツリーを返します。
     * (MDN [https://developer.mozilla.org/ja/docs/
     * XMLSerializer])
     */
     /** @type {Node} */ (node));
     var base64 = exampleNS.strToBase64(string);
     //'example-behavior.js' により文字列を Base64 へエンコードします。
     exportGPXElement.href =
      'data:gpx+xml;base64,' + base64;
   }
  }, false);
 } else {
  var info = document.getElementById('no-download');
  /**
   * display error message
   */
  info.style.display = '';
}

0 件のコメント: