2014年9月30日火曜日

2 - ol3ex 11b - Scale line example 2

「scale-line-layer.js(211-ol3ex.js)」は、地図を表示するのに必要な javascript です。最初は、座標系が EPSG:4326 のコードです。

「211-ol3ex.js」
var scaleLineControl = new ol.control.ScaleLine();
/** ol.control.ScaleLine
 * A control displaying rough x-axis distances, calculated 
 * for the center of the viewport. No scale line will be 
 * shown when the x-axis distance cannot be calculated in 
 * the view projection (e.g. at or beyond the poles in 
 * EPSG:4326). By default the scale line will show in the 
 * bottom left portion of the map, but this can be changed 
 * by using the css selector .ol-scale-line.
 * 粗いx軸の距離を表示するコントロール、ビューポートの中心に
 * 対して計算します。 x軸距離がビュー投影(例えば、
 * EPSG:4326 の極で、または、超えて)で計算することができ
 * ないときにスケールラインは表示されません。デフォルトでは、
 * スケールラインがマップの左下部分に表示されますが、これは 
 * CSSセレクタ .ol-scale-line を使用して変更することが
 * できます。(ol3 API)
 */
var map = new ol.Map({
 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 // 折りたたみ
  })
 }).extend([
  scaleLineControl
 ]),
 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()
 * }),
 */
  new ol.layer.Tile({
   source: new ol.source.TileWMS(({
  /** ol.source.TileWMS
   * Layer source for tile data from WMS servers.
   * WMS サーバからのタイルデータのためのソース。(ol3 API)
   */
    url: 'http://localhost:8080/geoserver/wms?',
    attributions: [new ol.Attribution({
   /** ol.Attribution
    * An attribution for a layer source.
    * レイヤソースの属性(ol3 API)
    */
     html: '国土交通省 国土数値情報'
    })],
    params: {'LAYERS': 'npn:tokyo_kuiki', 'TILED': true},
    serverType: 'geoserver'
   }))
  })
 ],
  renderer: exampleNS.getRendererFromQueryString(),
 //'example-behavior.js' により URL にある renderer を返します
  target: 'map',
  view: new ol.View({
   projection: 'EPSG:4326', // 追加
// center: [0, 0],
   center: [139.42, 35.68],
// zoom: 2
   zoom: 10
  })
});
var unitsSelect = new ol.dom.Input(document.getElementById('units'));
/** ol.dom.Input
 * Helper class for binding HTML input to an ol.Object.
 * ol.Object に HTML input要素を接続するためのヘルパークラス。
 * (ol3 API)
 */
unitsSelect.bindTo('value', scaleLineControl, 'units');
/** bindTo()
 * The bindTo method allows you to set up a two-way 
 * binding between a `source` and `target` object. 
 * The method returns an object with a `transform` 
 * method that you can use to provide `from` and 
 * `to` functions to transform values on the way 
 * from the source to the target and on the way back.
 * bindTo メソッドは、`source` と ` target` オブジェク
 * ト間の結合を双方向に設定することができます。メソッド
 * は、ソースからターゲットに、および、その逆方向に値を
 * 変換する、 `from` と ` to` ファンクションを提供する
 * ために使用することがでる `transform` メソッドをとも
 * なった、オブジェクトを返します。
 * (ol3 API[説明は Stable Only のチェックを外すと表示])
 */


次は、座標系が EPSG:2451 のコードです。
「211-ol3ex.js」
var scaleLineControl = new ol.control.ScaleLine();
// スケールラインコントロール
// EPSG:2451
var projection = ol.proj.get('EPSG:2451');
/** ol.proj.get(projectionLike)
 * Fetches a Projection object for the code specified.
 * 指定されたコードのプロジェクション·オブジェクトを取得
 * (ol3 API)
 */
projection.setExtent([-85044.6807, -406697.3730, 96656.4509, -8388.7498]);
/** setExtent(extent)
 * Set the validity extent for this projection.
 * この投影の有効範囲を設定します。(ol3 API)
 */
var extent = [-63100, -34500, -45400, -24200];
var map = new ol.Map({
 controls: ol.control.defaults({
  attributionOptions: /** @type {olx.control.AttributionOptions} */ ({
   collapsible: false
  })
 }).extend([
  scaleLineControl
 ]),
 layers: [
/*
 * new ol.layer.Tile({
 *  source: new ol.source.OSM()
 * }),
 */
  new ol.layer.Tile({
   source: new ol.source.TileWMS(({
    url: 'http://localhost:8080/geoserver/wms?',
    attributions: [new ol.Attribution({
     html: '<a href="http://portal.cyberjapan.jp/help/termsofuse.html" target="_blank">' + // EPSG:2451
      '国土地理院</a>' // EPSG:2451
    })],
    params: {'LAYERS': 'npn:akiruno_kukaku', 'TILED': true, 'VERSION': '1.1.1'}, // EPSG:2451
    extent: extent, // EPSG:2451
    serverType: 'geoserver'
   }))
  })
 ],
  renderer: exampleNS.getRendererFromQueryString(),
  target: 'map',
  view: new ol.View({
   projection: projection, // EPSG:2451
   extent: extent, // EPSG:2451
// center: [0, 0],
   center: [-54250, -29350], // EPSG:2451
// zoom: 2
   zoom: 6 // EPSG:2451
  })
});
var unitsSelect = new ol.dom.Input(document.getElementById('units'));
unitsSelect.bindTo('value', scaleLineControl, 'units');


2 - ol3ex 11a - Scale line example 1

「Scale line example(scale-line.html)」を参考に地図を表示してみます。「EPSG:4326 example(epsg-4326.html)」と ブログ「2 - ol3ex 3a - Single image WMS with Proj4js projection example 1 (http://nobmob.blogspot.jp/2014/09/2-ol3ex-3a-single-image-wms-with.html)」を参考に、座標系が EPSG:4326 と EPSG:2451 について試しました。

HTML ファイルの作成
a Eclipse のメニューの「ファイル」->「ファイルを開く」をクリックします。





b 「ファイルを開く」ウィンドウで、「user」->「mapsite」->「ol3proj」->「v3.0.0」->「examples」->「scale-line.html」をクリックして選択し、「OK」ボタンをクリックします。
同じように「scale-line.js」を開きます。





c メニューの「ファイル」->「新規」 -> 「ファイル」をクリックします。



d 「ファイル」ウィンドウで「ol3proj」をクリックして選択し、「ファイル名」を「211-ol3ex.html」と入力し、「次へ」ボタンをクリックします。








e 「File Template」ウィンドウで「HTML 5 Template」をクリックして選択し、「OK」ボタンをクリックします。











f 「scale-line.html」の内容をコピーして「211-ol3ex.html」に貼り付け、修正します。
g 同じように、新規に「211-ol3ex.js」ファイルを作成し、「File Template」ウィンドウで「JavaScript Template」をクリックして選択し、「完了」ボタンをクリックして、「scale-line.js」の内容をコピーして貼り付け、修正します。「scale-line-require.js」も「211-ol3ex-require.js」に貼り付けます。


「211-ol3ex.html」
<!doctype html>
<html lang="en">
 <head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="chrome=1">
  <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
<!--
  <link rel="stylesheet" href="../css/ol.css" type="text/css">
  <link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css" type="text/css">
  <link rel="stylesheet" href="../resources/layout.css" type="text/css">
  <link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
-->
  <!-- ディレクトリ修正 -->
  <link rel="stylesheet" href="v3.0.0/css/ol.css" type="text/css">
  <link rel="stylesheet" href="v3.0.0/resources/bootstrap/css/bootstrap.min.css" type="text/css">
  <link rel="stylesheet" href="v3.0.0/resources/layout.css" type="text/css">
  <link rel="stylesheet" href="v3.0.0/resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
  <title>Scale line example</title>
 </head>
 <body>

  <div class="navbar navbar-inverse navbar-fixed-top">
   <div class="navbar-inner">
    <div class="container">
<!--
     <a class="brand" href="./"><img src="../resources/logo.png"> OpenLayers 3 Examples</a>
-->
      <!-- ディレクトリ修正 -->
     <a class="brand" href="v3.0.0/examples/"><img src="v3.0.0/resources/logo.png"> OpenLayers 3 Examples</a>
    </div>
   </div>
  </div>
  <div class="container-fluid">
   <div class="row-fluid">
    <div class="span12">
     <div id="map" class="map"></div>
     <select id="units">
      <option value="degrees">degrees</option>
      <option value="imperial">imperial</option>
      <option value="us">s inch</option>
      <option value="nautical">inautical mile</option>
      <option value="metric">metric</option>
     </select>
    </div>
   </div>
   <div class="row-fluid">
    <div class="span12">
     <h4 id="title">Scale line example</h4>
     <p id="shortdesc">Example of a scale line.</p>
     <div id="docs">
<!--
      <p>See the <a href="scale-line.js" target="_blank">scale-line.js source</a> to see how this is done.</p>
-->
       <!-- ファイル修正 -->
      <p>See the <a href="211-ol3ex.js" target="_blank">211-ol3ex.js source</a> to see how this is done.</p>
     </div>
     <div id="tags">scale-line, openstreetmap</div>
    </div>
   </div>
  </div>
  <!-- 追加 -->
  <script src="proj4js-2.2.2/dist/proj4.js" type="text/javascript"></script>
  <script src="proj4js-2.2.2/dist/EPSG2451.js" type="text/javascript"></script>
<!--
  <script src="jquery.min.js" type="text/javascript"></script>
  <script src="../resources/example-behaviour.js" type="text/javascript"></script>
-->
  <!-- ディレクトリ修正 -->
  <script src="v3.0.0/examples/jquery.min.js" type="text/javascript"></script>
  <script src="v3.0.0/resources/example-behaviour.js" type="text/javascript"></script>
<!--
  <script src="loader.js?id=scale-line" type="text/javascript"></script>
-->
  <!-- ファイル修正 -->  <!-- ディレクトリ修正 -->
  <script src="loader.js?id=211-ol3ex" type="text/javascript"></script>

 </body>
</html>

2 - ol3ex 10b - Image vector example 2

「image-vector-layer.js(210-ol3ex.js)」は、地図を表示するのに必要な javascript です。

「210-ol3ex.js」
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.MapQuest({layer: 'sat'})
   /** ol.source.MapQuest
    * Layer source for the MapQuest tile server.
    * MapQuest タイルサーバのレイヤソース。(ol3 API
    * 2 - ol3ex 23b - MapQuest example 2 参照)
    */
  }),
  new ol.layer.Image({
 /** ol.layer.Image
  * Server-rendered images that are available for arbitrary 
  * extents and resolutions. 
  * 任意の範囲と解像度で利用可能な server-rendered イメージ。
  * (ol3 API)
  */
   source: 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)
   */
    source: new ol.source.GeoJSON({
   /** ol.format.GeoJSON 
    * Feature format for reading and writing data 
    * in the GeoJSON format.
    * GeoJSON フォーマットのデータを読み書きするための
    * フィーチャフォーマット。(ol3 API)
    */
     projection: 'EPSG:3857',
  // url: 'data/geojson/countries.geojson',
     url: 'v3.0.0/examples/data/geojson/countries.geojson',
    }),
    style: new ol.style.Style({
   /** ol.style.Style 
    * Base class for vector feature rendering styles.
    * ベクタフィーチャがスタイルを描画するための基本クラス。
    * (ol3 API)
    */
     fill: new ol.style.Fill({
    /** ol.style.Fill 
     * Set fill style for vector features.
     * ベクタフィーチャの塗りつぶしスタイルを設定。(ol3 API)
     */
      color: 'rgba(255, 255, 255, 0.6)'
     }),
     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: '#319FD3',
      width: 1
     })
    })
   })
  })
 ],
 target: 'map',
 view: new ol.View({
  center: [0, 0],
  zoom: 1
 })
});
var featureOverlay = new ol.FeatureOverlay({
/** ol.FeatureOverlay
 * A mechanism for changing the style of a small number of 
 * features on a temporary basis, for example highlighting. 
 * This is necessary with the Canvas renderer, where, unlike
 * in SVG, features cannot be individually referenced.
 * ハイライトのように、一時的に少数のフィーチャがスタイルの変更す
 * るためのメカニズム。これは Canvas レンダラが必要で、SVGとは異
 * なり、フィーチャを個別に参照することはできません。(ol3 API)
 */
 map: map,
 style: new ol.style.Style({
  stroke: new ol.style.Stroke({
   color: '#f00',
   width: 1
  }),
  fill: new ol.style.Fill({
   color: 'rgba(255,0,0,0.1)'
  })
 })
});
var highlight;
var displayFeatureInfo = function(pixel) {
 var feature = 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)
  */
  return feature;
 });
 // 国名(name)の表示 
 var info = document.getElementById('info');
 if (feature) {
  info.innerHTML = feature.getId() + ': ' + feature.get('name');
  /** getId()
   * Return: id(ol3 API)
   */
 } else {
  info.innerHTML = '&nbsp;';
 }
 // フィーチャのハイライトのオンオフ
 if (feature !== highlight) {
  if (highlight) {
   featureOverlay.removeFeature(highlight);
   /** removeFeature(feature)
    * Name: feature, Type: ol.Feature, 
    * Description: Feature (ol3 API)
    */
  }
  if (feature) {
   featureOverlay.addFeature(feature);
   /** addFeature(feature)
    * Name: feature, Type: ol.Feature, 
    * Description: Feature (ol3 API)
    */
  }
  highlight = feature;
 }

};
/*
 * マウス(ポインタ)が動いた時、ビューポートのピクセル位置を
 * 取得して displayFeatureInfo を実行。
 */
$(map.getViewport()).on('mousemove', function(evt) {
/** getViewport()
 * Return: Viewport (ol3 API)
 */
/** jQuery on イベント */
 var pixel = map.getEventPixel(evt.originalEvent);
 displayFeatureInfo(pixel);
});
// マウスクリック時?
map.on('click', function(evt) {
/** on
 * Listen for a certain type of event.
 * あるタイプのイベントをリッスンします。(ol3 API)
 */
 displayFeatureInfo(evt.pixel);
});


originalEvent
「ol.MapBrowserEvent」
(Events emitted as map browser events are instances of this type. See ol.Map for which events trigger a map browser event.
マップブラウザイベントとして発するイベントは、このタイプのインスタンスです。イベントがマップブラウザイベントをトリガする ol.Map を参照してください。)
のメンバ。

ol/ol/mapbrowserevent.js 32行目
 * @param {goog.events.BrowserEvent} browserEvent Browser event.
ol/ol/mapbrowserevent.js 52行目
 this.originalEvent = browserEvent.getBrowserEvent();

goog.events.BrowserEvent
「events.BrowserEvent - Extends goog.events.Event」
(http://docs.closure-library.googlecode.com/git/class_goog_events_BrowserEvent.html)
Accepts a browser event object and creates a patched, cross browser event object. The content of this object will not be initialized if no event object is provided. If this is the case, init() needs to be invoked separately.
events.BrowserEvent。goog.events.Eventを拡張します。
ブラウザイベントオブジェクトを受け入れ、パッチを適用した、クロスブラウザイベントオブジェクトを作成します。イベントオブジェクトが提供されない場合は、このオブジェクトの内容は初期化されません。この場合は、init()は別々に呼び出す必要があります。

「Instance Methods」
getBrowserEvent() ⇒ Event
No description.
Returns: Event  The underlying browser event object.

2 - ol3ex 10a - Image vector example 1

「Image vector example(image-vector-layer.html)」を参考に地図を表示してみます。
HTML ファイルの作成
a Eclipse のメニューの「ファイル」->「ファイルを開く」をクリックします。





b 「ファイルを開く」ウィンドウで、「user」->「mapsite」->「ol3proj」->「v3.0.0」->「examples」->「image-vector-layer.html」をクリックして選択し、「OK」ボタンをクリックします。
同じように「image-vector-layer.js」を開きます。




c メニューの「ファイル」->「新規」 -> 「ファイル」をクリックします。



d 「ファイル」ウィンドウで「ol3proj」をクリックして選択し、「ファイル名」を「210-ol3ex.html」と入力し、「次へ」ボタンをクリックします。








e 「File Template」ウィンドウで「HTML 5 Template」をクリックして選択し、「OK」ボタンをクリックします。











f 「image-vector-layer.html」の内容をコピーして「211-ol3ex.html」に貼り付け、修正します。
g 同じように、新規に「210-ol3ex.js」ファイルを作成し、「File Template」ウィンドウで「JavaScript Template」をクリックして選択し、「完了」ボタンをクリックして、「image-vector-layer.js」の内容をコピーして貼り付け、修正します。「image-vector-layer-require.js」も「210-ol3ex-require.js」に貼り付けます。

「210-ol3ex.html」
<!doctype html>
<html lang="en">
 <head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="chrome=1">
  <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
<!--
  <link rel="stylesheet" href="../css/ol.css" type="text/css">
  <link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css" type="text/css">
  <link rel="stylesheet" href="../resources/layout.css" type="text/css">
  <link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
-->
  <!-- ディレクトリ修正 -->
  <link rel="stylesheet" href="v3.0.0/css/ol.css" type="text/css">
  <link rel="stylesheet" href="v3.0.0/resources/bootstrap/css/bootstrap.min.css" type="text/css">
  <link rel="stylesheet" href="v3.0.0/resources/layout.css" type="text/css">
  <link rel="stylesheet" href="v3.0.0/resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
  <title>Image vector layer example</title>
 </head>
 <body>

  <div class="navbar navbar-inverse navbar-fixed-top">
   <div class="navbar-inner">
    <div class="container">
<!--
     <a class="brand" href="./"><img src="../resources/logo.png"> OpenLayers 3 Examples</a>
-->
      <!-- ディレクトリ修正 -->
     <a class="brand" href="v3.0.0/examples/"><img src="v3.0.0/resources/logo.png"> OpenLayers 3 Examples</a>
    </div>
   </div>
  </div>
  <div class="container-fluid">
   <div class="row-fluid">
    <div class="span12">
     <div id="map" class="map"></div>
    </div>
   </div>
   <div class="row-fluid">
    <div class="span8">
     <h4 id="title">Image vector example</h4>
     <p id="shortdesc">Example of an image vector layer.</p>
     <div id="docs">
      <p>This example uses a <code>ol.source.ImageVector</code> source. That source gets vector features from the
      <code>ol.source.Vector</code> it's configured with, and draw these features to an HTML5 canvas element that
      is then used as the image of an image layer.</p>
<!--
      <p>See the <a href="image-vector-layer.js" target="_blank">image-vector-layer.js source</a> to see how this is done.</p>
-->
       <!-- ファイル修正 -->
      <p>See the <a href="210-ol3ex.js" target="_blank">210-ol3ex.js source</a> to see how this is done.</p>
     </div>
     <div id="tags">vector, image</div>
    </div>
    <div class="span4">
     <div id="info" class="alert alert-success">
       
     </div>
    </div>
   </div>
  </div>
<!--
  <script src="jquery.min.js" type="text/javascript"></script>
  <script src="../resources/example-behaviour.js" type="text/javascript"></script>
-->
  <!-- ディレクトリ修正 -->
  <script src="v3.0.0/examples/jquery.min.js" type="text/javascript"></script>
  <script src="v3.0.0/resources/example-behaviour.js" type="text/javascript"></script>
<!--
  <script src="loader.js?id=vector-layer" type="text/javascript"></script>
-->
  <!-- ファイル修正 -->  <!-- ディレクトリ修正 -->
  <script src="loader.js?id=210-ol3ex" type="text/javascript"></script>
  </body>
</html>

2014年9月29日月曜日

2 - ol3ex 9b - Vector layer example 2

「vector-layer.js(209-ol3ex.js)」は、地図を表示するのに必要な javascript です。
「countries.geojson」データの内容は次のようになっていました。
「countries.geojson」
{"type":"FeatureCollection",
 "features":[{
  "type":"Feature",
  "id":"AFG",
  "properties":{"name":"Afghanistan"},
  "geometry":{
   "type":"Polygon",
   "coordinates":[[[61.210817,35.650072],...

「210-ol3ex.js」
var styleCache = {};
var vectorLayer = new ol.layer.Vector({
/** ol.layer.Vector 
 * Vector data that is rendered client-side. Note that any 
 * property set in the options is set as a ol.Object property
 * on the layer object; for example, setting title: 'My 
 * Title' in the options means that title is observable, and 
 * has get/set accessors.
 * クライアント側で描画されたベクタデータ。オプションで設定した任
 * 意のプロパティは、レイヤオブジェクトで ol.Object プロパティ
 * として設定されていることに注意してください。たとえば、オプショ
 * ンで、title:'My Title' を設定することは、タイトルは 
 * observable で、アクセサを取得/設定することを意味します。
 * (ol3 API)
 */
 source: new ol.source.GeoJSON({
 /** ol.source.GeoJSON 
  * Static vector source in GeoJSON format
  * GeoJSON フォーマットの静的ベクタソース。(ol3 API)
  */
  projection: 'EPSG:3857',
//url: 'data/geojson/countries.geojson',
  url: 'v3.0.0/examples/data/geojson/countries.geojson',
 }),
 style: function(feature, resolution) {
  var text = resolution < 5000 ? feature.get('name') : '';
 /** 条件演算子 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])
   */
  // 解像度が 5000 以下なら ラベル(name 国名)非表示
  if (!styleCache[text]) {
  // 'styleCache[text]={}' なので 'if(true)'
   styleCache[text] = [new ol.style.Style({
   /** ol.style.Style 
    * Base class for vector feature rendering styles.
    * ベクタフィーチャがスタイルを描画するための基本クラス。
    * (ol3 API)
    */
    fill: new ol.style.Fill({
    /** ol.style.Fill 
     * Set fill style for vector features.
     * ベクタフィーチャの塗りつぶしスタイルを設定。(ol3 API)
     */
     color: 'rgba(255, 255, 255, 0.6)'
    }),
    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: '#319FD3',
     width: 1
    }),
    text: new ol.style.Text({
    /** ol.style.Text
     * Set text style for vector features.
     * ベクタフィーチャの文字列のスタイルを設定します。
     * (ol3 API)
     */
     font: '12px Calibri,sans-serif',
     text: text,
     fill: new ol.style.Fill({
      color: '#000'
     }),
     stroke: new ol.style.Stroke({
      color: '#fff',
      width: 3
     })
    })
   })];
  }
  return styleCache[text];
 }
});
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.MapQuest({layer: 'sat'})
   /** ol.source.MapQuest
    * Layer source for the MapQuest tile server.
    * MapQuest タイルサーバのレイヤソース。(ol3 API
    * 2 - ol3ex 23b - MapQuest example 2 参照)
    */
  }),
  vectorLayer
 ],
 target: 'map',
 view: new ol.View({
  center: [0, 0],
  zoom: 1
 })
});
var highlightStyleCache = {};
var featureOverlay = new ol.FeatureOverlay({
/** ol.FeatureOverlay
 * A mechanism for changing the style of a small number of 
 * features on a temporary basis, for example highlighting. 
 * This is necessary with the Canvas renderer, where, unlike
 * in SVG, features cannot be individually referenced.
 * ハイライトのように、一時的に少数のフィーチャがスタイルの変更す
 * るためのメカニズム。これは Canvas レンダラが必要で、SVGとは異
 * なり、フィーチャを個別に参照することはできません。(ol3 API)
 */
 map: map,
 style: function(feature, resolution) {
  var text = resolution < 5000 ? feature.get('name') : '';
  if (!highlightStyleCache[text]) {
   highlightStyleCache[text] = [new ol.style.Style({
    stroke: new ol.style.Stroke({
     color: '#f00',
     width: 1
    }),
    fill: new ol.style.Fill({
     color: 'rgba(255,0,0,0.1)'
    }),
    text: new ol.style.Text({
     font: '12px Calibri,sans-serif',
     text: text,
     fill: new ol.style.Fill({
      color: '#000'
     }),
     stroke: new ol.style.Stroke({
      color: '#f00',
      width: 3
     })
    })
   })];
  }
  return highlightStyleCache[text];
 }
});
var hightlight;
var displayFeatureInfo = function(pixel) {
 var feature = 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)
  */
  return feature;
 });
 // 国名(name)の表示 
 var info = document.getElementById('info');
 if (feature) {
  info.innerHTML = feature.getId() + ': ' + feature.get('name');
  /** getId()
   * Return: id(ol3 API)
   */
 } else {
  info.innerHTML = '&nbsp;';
 }
 // フィーチャのハイライトのオンオフ
 if (feature !== highlight) {
  if (highlight) {
   featureOverlay.removeFeature(highlight);
   /** removeFeature(feature)
    * Name: feature, Type: ol.Feature, 
    * Description: Feature (ol3 API)
    */
  }
  if (feature) {
   featureOverlay.addFeature(feature);
   /** addFeature(feature)
    * Name: feature, Type: ol.Feature, 
    * Description: Feature (ol3 API)
    */
  }
   highlight = feature;
 }
};
/** マウス(ポインタ)が動いた時、ビューポートのピクセル位置を
 * 取得して displayFeatureInfo を実行。
 */
$(map.getViewport()).on('mousemove', function(evt) {
/** getViewport()
 * Return: Viewport (ol3 API)
 */
/** jQuery on イベント */
 var pixel = map.getEventPixel(evt.originalEvent);
 displayFeatureInfo(pixel);
 /** getEventPixel()
  * Returns the map pixel position for a browser event.
  * ブラウザイベントに対して、マップのピクセル位置を返します。
  * (ol3 API)
  */
});
// マウスクリック時?
map.on('click', function(evt) {
/** on
 * Listen for a certain type of event.
 * あるタイプのイベントをリッスンします。(ol3 API)
 */
 displayFeatureInfo(evt.pixel);
});


originalEvent
「ol.MapBrowserEvent」
(Events emitted as map browser events are instances of this type. See ol.Map for which events trigger a map browser event.
マップブラウザイベントとして発するイベントは、このタイプのインスタンスです。イベントがマップブラウザイベントをトリガする ol.Map を参照してください。)
のメンバ。

ol/ol/mapbrowserevent.js 32行目
 * @param {goog.events.BrowserEvent} browserEvent Browser event.
ol/ol/mapbrowserevent.js 52行目
 this.originalEvent = browserEvent.getBrowserEvent();

goog.events.BrowserEvent
「events.BrowserEvent - Extends goog.events.Event」
(http://docs.closure-library.googlecode.com/git/class_goog_events_BrowserEvent.html)
Accepts a browser event object and creates a patched, cross browser event object. The content of this object will not be initialized if no event object is provided. If this is the case, init() needs to be invoked separately.
events.BrowserEvent。goog.events.Eventを拡張します。
ブラウザイベントオブジェクトを受け入れ、パッチを適用した、クロスブラウザイベントオブジェクトを作成します。イベントオブジェクトが提供されない場合は、このオブジェクトの内容は初期化されません。この場合は、init()は別々に呼び出す必要があります。

「Instance Methods」
getBrowserEvent() ⇒ Event
No description.
Returns: Event  The underlying browser event object.

2 - ol3ex 9a - Vector layer example 1

「Vector layer example(vector-layer.html)」を参考に地図を表示してみます。HTML ファイルの作成
a Eclipse のメニューの「ファイル」->「ファイルを開く」をクリックします。





b 「ファイルを開く」ウィンドウで、「user」->「mapsite」->「ol3proj」->「v3.0.0」->「examples」->「vector-layer.html」をクリックして選択し、「OK」ボタンをクリックします。
同じように「vector-layer.js」を開きます。





c メニューの「ファイル」->「新規」 -> 「ファイル」をクリックします。



d 「ファイル」ウィンドウで「ol3proj」をクリックして選択し、「ファイル名」を「209-ol3ex.html」と入力し、「次へ」ボタンをクリックします。








e 「File Template」ウィンドウで「HTML 5 Template」をクリックして選択し、「OK」ボタンをクリックします。











f 「vector-layer.html」の内容をコピーして「210-ol3ex.html」に貼り付け、修正します。
g 同じように、新規に「209-ol3ex.js」ファイルを作成し、「File Template」ウィンドウで「JavaScript Template」をクリックして選択し、「完了」ボタンをクリックして、「vector-layer.js」の内容をコピーして貼り付け、修正します。「vector-layer-require.js」も「209-ol3ex-require.js」に貼り付けます。


「209-ol3ex.html」
<!doctype html>
<html lang="en">
 <head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="chrome=1">
  <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
<!--
  <link rel="stylesheet" href="../css/ol.css" type="text/css">
  <link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css" type="text/css">
  <link rel="stylesheet" href="../resources/layout.css" type="text/css">
  <link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
-->
  <!-- ディレクトリ修正 -->
  <link rel="stylesheet" href="v3.0.0/css/ol.css" type="text/css">
  <link rel="stylesheet" href="v3.0.0/resources/bootstrap/css/bootstrap.min.css" type="text/css">
  <link rel="stylesheet" href="v3.0.0/resources/layout.css" type="text/css">
  <link rel="stylesheet" href="v3.0.0/resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
  <title>Vector layer example</title>
 </head>
 <body>

  <div class="navbar navbar-inverse navbar-fixed-top">
   <div class="navbar-inner">
    <div class="container">
<!--
     <a class="brand" href="./"><img src="../resources/logo.png"> OpenLayers 3 Examples</a>
-->
      <!-- ディレクトリ修正 -->
     <a class="brand" href="v3.0.0/examples/"><img src="v3.0.0/resources/logo.png"> OpenLayers 3 Examples</a>
    </div>
   </div>
  </div>
  <div class="container-fluid">
   <div class="row-fluid">
    <div class="span12">
     <div id="map" class="map"></div>
    </div>
   </div>
   <div class="row-fluid">
    <div class="span4">
     <h4 id="title">Vector layer example</h4>
     <p id="shortdesc">Example of a countries vector layer with country information on hover and country labels at higher zoom levels.</p>
     <div id="docs">
<!--
      <p>See the <a href="vector-layer.js" target="_blank">vector-layer.js source</a> to see how this is done.</p>
-->
       <!-- ファイル修正 -->
      <p>See the <a href="209-ol3ex.js" target="_blank">209-ol3ex.js source</a> to see on how this is done.</p>
     </div>
     <div id="tags">vector, geojson, style, feature overlay</div>
    </div>
    <div class="span4 offset4">
     <div id="info" class="alert alert-success">
       
     </div>
    </div>
   </div>
  </div>
<!--
  <script src="jquery.min.js" type="text/javascript"></script>
  <script src="../resources/example-behaviour.js" type="text/javascript"></script>
-->
  <!-- ディレクトリ修正 -->
  <script src="v3.0.0/examples/jquery.min.js" type="text/javascript"></script>
  <script src="v3.0.0/resources/example-behaviour.js" type="text/javascript"></script>
<!--
  <script src="loader.js?id=vector-layer" type="text/javascript"></script>
-->
  <!-- ファイル修正 -->  <!-- ディレクトリ修正 -->
  <script src="loader.js?id=209-ol3ex" type="text/javascript"></script>
 </body>
</html>

2 - ol3ex 8b - Google Maps integration example 2

「google-map.js(208-ol3ex.js)」は、地図を表示するのに必要な javascript です。
「208-ol3ex.js」
var gmap = new google.maps.Map(document.getElementById('gmap'), {
// Google Map オブジェクト 以下、オプション
 disableDefaultUI: true, // デフォルトのUI(ユーザインターフェイス)の無効化
 keyboardShortcuts: false,
 draggable: false,
 disableDoubleClickZoom: true,
 scrollwheel: false,
 streetViewControl: false // ストリートビュー ペッグマン コントロール
});
var view = new ol.View({
 // make sure the view doesn't go beyond the 22 zoom levels of Google Maps
 maxZoom: 21
});
view.on('change:center', function() {
// '.on()[jQuery]' 地図の中心が移動したとき関数が実行(中心座標を Google Map に設定)
 var center = ol.proj.transform(view.getCenter(), 'EPSG:3857', 'EPSG:4326');
 gmap.setCenter(new google.maps.LatLng(center[1], center[0]));
});
view.on('change:resolution', function() {
// '.on()[jQuery]' 解像度が変わったとき関数が実行(ズームを Google Map に設定)
 gmap.setZoom(view.getZoom());
});
var vector = new ol.layer.Vector({
 source: new ol.source.GeoJSON({
//  url: 'data/geojson/countries.geojson',
  url: 'v3.0.0/examples/data/geojson/countries.geojson',
  projection: 'EPSG:3857'
 }),
 style: new ol.style.Style({
  fill: new ol.style.Fill({
   color: 'rgba(255, 255, 255, 0.6)'
  }),
  stroke: new ol.style.Stroke({
   color: '#319FD3',
   width: 1
  })
 })
});
var olMapDiv = document.getElementById('olmap');
var map = new ol.Map({
 layers: [vector],
 interactions: ol.interaction.defaults({
 // OpenLayers の interaction を制御
  altShiftDragRotate: false,
  dragPan: false,
  rotate: false
 }).extend([new ol.interaction.DragPan({kinetic: null})]),
 target: olMapDiv,
 view: view
});
view.setCenter([0, 0]);
view.setZoom(1);
olMapDiv.parentNode.removeChild(olMapDiv); // 要素の全ての子ノードを削除
gmap.controls[google.maps.ControlPosition.TOP_LEFT].push(olMapDiv);



2 - ol3ex 8a - Google Maps integration example 1

「Google Maps integration example(google-map.html)」を参考に地図を表示してみます。
HTML ファイルの作成
a Eclipse のメニューの「ファイル」->「ファイルを開く」をクリックします。





b 「ファイルを開く」ウィンドウで、「user」->「mapsite」->「ol3proj」->「v3.0.0」->「examples」->「google-map.html」をクリックして選択し、「OK」ボタンをクリックします。
同じように「google-map.js」を開きます。





c メニューの「ファイル」->「新規」 -> 「ファイル」をクリックします。



d 「ファイル」ウィンドウで「ol3proj」をクリックして選択し、「ファイル名」を「208-ol3ex.html」と入力し、「次へ」ボタンをクリックします。








e 「File Template」ウィンドウで「HTML 5 Template」をクリックして選択し、「OK」ボタンをクリックします。











f 「bing-maps.html」の内容をコピーして「208-ol3ex.html」に貼り付け、修正します。
g 同じように、新規に「209-ol3ex.js」ファイルを作成し、「File Template」ウィンドウで「JavaScript Template」をクリックして選択し、「完了」ボタンをクリックして、「bing-maps.js」の内容をコピーして貼り付け、修正します。「bing-maps-require.js」も「208-ol3ex-require.js」に貼り付けます。


「208-ol3ex.html」
<!doctype html>
<html lang="en">
 <head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="chrome=1">
  <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
<!--
  <link rel="stylesheet" href="../css/ol.css" type="text/css">
  <link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css" type="text/css">
  <link rel="stylesheet" href="../resources/layout.css" type="text/css">
  <link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
-->
  <!-- ディレクトリ修正 -->
  <link rel="stylesheet" href="v3.0.0/css/ol.css" type="text/css">
  <link rel="stylesheet" href="v3.0.0/resources/bootstrap/css/bootstrap.min.css" type="text/css">
  <link rel="stylesheet" href="v3.0.0/resources/layout.css" type="text/css">
  <link rel="stylesheet" href="v3.0.0/resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
  <style type="text/css">
   div.fill {
    width: 100%;
    height: 100%;
   }
  </style>
  <script src="http://maps.google.com/maps/api/js?v=3&sensor=false"></script>
  <title>Google Maps integration example</title>
 </head>
 <body>

  <div class="navbar navbar-inverse navbar-fixed-top">
   <div class="navbar-inner">
    <div class="container">
<!--
     <a class="brand" href="./"><img src="../resources/logo.png"> OpenLayers 3 Examples</a>
-->
      <!-- ディレクトリ修正 -->
     <a class="brand" href="v3.0.0/examples/"><img src="v3.0.0/resources/logo.png"> OpenLayers 3 Examples</a>
    </div>
   </div>
  </div>
  <div class="container-fluid">
   <div class="row-fluid">
    <div class="span12">
     <div id="map" class="map">
      <div id="gmap" class="fill"></div>
      <div id="olmap" class="fill"></div>
     </div>
    </div>
   </div>
   <div class="row-fluid">
    <div class="span4">
     <h4 id="title">Google Maps integration example</h4>
     <p id="shortdesc">Example of a GMaps map with an ol3 map as control, to give users a Google base map with ol3 content on top.</p>
     <div id="docs">
<!--
      <p>See the <a href="google-map.js" target="_blank">google-map.js source</a> to see how this is done.</p>
-->
       <!-- ファイル修正 -->
      <p>See the <a href="208-ol3ex.js" target="_blank">208-ol3ex.js source</a> for details on how this is done.</p>
     </div>
     <div id="tags">google</div>
    </div>
   </div>
  </div>
<!--
  <script src="jquery.min.js" type="text/javascript"></script>
  <script src="../resources/example-behaviour.js" type="text/javascript"></script>
-->
  <!-- ディレクトリ修正 -->
  <script src="v3.0.0/examples/jquery.min.js" type="text/javascript"></script>
  <script src="v3.0.0/resources/example-behaviour.js" type="text/javascript"></script>
<!--
  <script src="loader.js?id=google-map" type="text/javascript"></script>
-->
  <!-- ファイル修正 -->  <!-- ディレクトリ修正 -->
  <script src="loader.js?id=208-ol3ex" type="text/javascript"></script>
 </body>
</html>

2014年9月26日金曜日

2 - ol3ex 7b - Bing Maps example 2

「bing-maps.js(207-ol3ex.js)」は、地図を表示するのに必要な javascript です。
「207-ol3ex.js」
// Bing Maps で用意されている地図スタイル
var styles = [
 'Road',
 'Aerial',
 'AerialWithLabels',
 'collinsBart',
 'ordnanceSurvey'
];
var layers = [];
var i, ii;
for (i = 0, ii = styles.length; i < ii; ++i) {
 layers.push(new ol.layer.Tile({
 /** push(elem)
  * Insert the provided element at the end of the 
  * collection.
  * コレクションの最後に供給されたエレメントに挿入します。
  * Name: elem, Type: T, Description: Element
  * (ol3 API)
  */
 /** 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)
  */
  visible: false, // 表示・非表示
  preload: Infinity, // 事前読込
  source: new ol.source.BingMaps({
   key: 'Ak-dzM4w...', // 省略してあります
   imagerySet: styles[i] // 画像タイプ
  })
 }));
}
var map = new ol.Map({
 layers: layers,
 renderer: exampleNS.getRendererFromQueryString(),
 //'example-behavior.js' により URL にある renderer を返します
 target: 'map',
 view: new ol.View({
// center: [-6655.5402445057125, 6709968.258934638],
  center: [15520720, 4257706],
// zoom: 13
  zoom: 10
 })
});
$('#layer-select').change(function() {
/** .change(handler)
 * Bind an event handler to the "change" JavaScript event, or 
 * trigger that event on an element.
 * 「change」JavaScript イベントにイベントハンドラをバインド、ま
 * たは、要素についてそのイベントをトリガします。
 * (jQuery[https://api.jquery.com/change/])
 */
 // 選択されたスタイルを検索し属性を返します
 // (初期値は 'Aerial with labels')
 var style = $(this).find(':selected').val();
 /** .find(selector)
  * Get the descendants of each element in the current set of 
  * matched elements, filtered by a selector, jQuery object, 
  * or element.
  * セレクタによるフィルタリングで、マッチした要素、または、
  * jQueryオブジェクト、要素の現在のセット中の各要素の子孫要素
  * を取得します。(jQuery[https://api.jquery.com/find/])
  */
 /** .val()
  * Get the current value of the first element in the set of 
  * matched elements or set the value of every matched 
  * element.
  * マッチした要素のセットの最初の要素の現在の値を取得、または、
  * すべての一致した要素の値を設定します。
  * (jQuery[https://api.jquery.com/val/])
  */
 var i, ii;
 for (i = 0, ii = layers.length; i < ii; ++i) {
  layers[i].setVisible(styles[i] == style);
  /** setVisible(visible)
   * Name: visible, Type: boolean, 
   * Description: The visibility of the layer.
   */
 }
});
$('#layer-select').trigger('change');
/**.trigger(eventType [,extraParameters]
 * Execute all handlers and behaviors attached to the 
 * matched elements for the given event type.
 * 指定されたイベントタイプにマッチした要素に接続されているすべ
 * てのハンドラや動作を実行します。
 * (jQuery[https://api.jquery.com/trigger/])
 */


日本付近は、「Collins Bart」と「Ordnance Survey」のデータがないので表示されません。

2 - ol3ex 7a - Bing Maps example 1

「Bing Maps example(bing-maps.html)」を参考に地図を表示してみます。
HTML ファイルの作成
a Eclipse のメニューの「ファイル」->「ファイルを開く」をクリックします。





b 「ファイルを開く」ウィンドウで、「user」->「mapsite」->「ol3proj」->「v3.0.0」->「examples」->「bing-maps.html」をクリックして選択し、「OK」ボタンをクリックします。
同じように「bing-maps.js」を開きます。





c メニューの「ファイル」->「新規」 -> 「ファイル」をクリックします。



d 「ファイル」ウィンドウで「ol3proj」をクリックして選択し、「ファイル名」を「207-ol3ex.html」と入力し、「次へ」ボタンをクリックします。








e 「File Template」ウィンドウで「HTML 5 Template」をクリックして選択し、「OK」ボタンをクリックします。











f 「bing-maps.html」の内容をコピーして「207-ol3ex.html」に貼り付け、修正します。
g 同じように、新規に「207-ol3ex.js」ファイルを作成し、「File Template」ウィンドウで「JavaScript Template」をクリックして選択し、「完了」ボタンをクリックして、「bing-maps.js」の内容をコピーして貼り付け、修正します。「bing-maps-require.js」も「207-ol3ex-require.js」に貼り付けます。

「207-ol3ex.html」
<html>
 <head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="chrome=1">
  <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
<!--
  <link rel="stylesheet" href="../css/ol.css" type="text/css">
  <link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css" type="text/css">
  <link rel="stylesheet" href="../resources/layout.css" type="text/css">
  <link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
-->
  <!-- ディレクトリ修正 -->
  <link rel="stylesheet" href="v3.0.0/css/ol.css" type="text/css">
  <link rel="stylesheet" href="v3.0.0/resources/bootstrap/css/bootstrap.min.css" type="text/css">
  <link rel="stylesheet" href="v3.0.0/resources/layout.css" type="text/css">
  <link rel="stylesheet" href="v3.0.0/resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
  <title>Bing Maps example</title>
 </head>
 <body>

  <div class="navbar navbar-inverse navbar-fixed-top">
   <div class="navbar-inner">
    <div class="container">
<!--
     <a class="brand" href="./"><img src="../resources/logo.png"> OpenLayers 3 Examples</a>
-->
      <!-- ディレクトリ修正 -->
     <a class="brand" href="v3.0.0/examples/"><img src="v3.0.0/resources/logo.png"> OpenLayers 3 Examples</a>
    </div>
   </div>
  </div>
  <div class="container-fluid">
   <div class="row-fluid">
    <div class="span12">
     <div id="map" class="map"></div>
     <select id="layer-select">
      <option value="Aerial">Aerial</option>
      <option value="AerialWithLabels" selected>Aerial with labels</option>
      <option value="Road">Road</option>
      <option value="collinsBart">Collins Bart</option>
      <option value="ordnanceSurvey">Ordnance Survey</option>
     </select>
    </div>
   </div>
   <div class="row-fluid">
    <div class="span12">
     <h4 id="title">Bing Maps example</h4>
     <p id="shortdesc">Example of a Bing Maps layer.</p>
     <div id="docs">
<!--
      <p>See the <a href="bing-maps.js" target="_blank">bing-maps.js source</a> to see how this is done.</p>
-->
       <!-- ファイル修正 -->
      <p>See the <a href="207-ol3ex.js" target="_blank">207-ol3ex.js source</a> for details on how this is done.</p>
     </div>
     <div id="tags">bing, bing-maps</div>
    </div>
   </div>
  </div>
<!--
  <script src="jquery.min.js" type="text/javascript"></script>
  <script src="../resources/example-behaviour.js" type="text/javascript"></script>
-->
  <!-- ディレクトリ修正 -->
  <script src="v3.0.0/examples/jquery.min.js" type="text/javascript"></script>
  <script src="v3.0.0/resources/example-behaviour.js" type="text/javascript"></script>
<!--
  <script src="loader.js?id=xyz-esri" type="text/javascript"></script>
-->
  <!-- ファイル修正 -->  <!-- ディレクトリ修正 -->
  <script src="loader.js?id=207-ol3ex" type="text/javascript"></script>
  </body>
</html>

2014年9月25日木曜日

2 - ol3ex 6b - XYZ Esri example 2

「xyz-esri.js(206-ol3ex.js)」は、地図を表示するのに必要な javascript です。「206-ol3ex.js」
var attribution = new ol.Attribution({
 html: 'Tiles © <a href="http://services.arcgisonline.com/ArcGIS/' +
     'rest/services/World_Topo_Map/MapServer">ArcGIS</a>'
});
var map = new ol.Map({
 target: 'map',
 layers: [
  new ol.layer.Tile({
   source: new ol.source.XYZ({
   attributions: [attribution],
   url: 'http://server.arcgisonline.com/ArcGIS/rest/services/' +
      'World_Topo_Map/MapServer/tile/{z}/{y}/{x}'
   })
  })
 ],
 view: new ol.View2D({
//center: ol.proj.transform([-121.1, 47.5], 'EPSG:4326', 'EPSG:3857'),
  center: ol.proj.transform([139.42, 35.68], 'EPSG:4326', 'EPSG:3857'),
  /** ol.proj.transform(coordinate, source, destination)
   * Transforms a coordinate from source projection to 
   * destination projection. This returns a new coordinate 
   * (and does not modify the original).
   * ソース投影から変換先投影に座標変換します。これは、新しい座標
   * を返します(オリジナルを変更しません)。(ol3 API)
   */
//zoom: 7
  zoom: 10
 })
});

2 - ol3ex 6a - XYZ Esri example 1

「XYZ Esri example(xyz-esri.html)」を参考に地図を表示してみます。「ArcGIS」のマップサービス(http://www.arcgis.com/features/index.html)を使用しています。地図上の「ArcGIS」のリンク「World_Topo_Map(http://services.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer)」に地図の説明があります。

HTML ファイルの作成
a Eclipse のメニューの「ファイル」->「ファイルを開く」をクリックします。





b 「ファイルを開く」ウィンドウで、「user」->「mapsite」->「ol3proj」->「v3.0.0」->「examples」->「xyz-esri.html」をクリックして選択し、「OK」ボタンをクリックします。
同じように「xyz-esri.js」を開きます。




c メニューの「ファイル」->「新規」 -> 「ファイル」をクリックします。



d 「ファイル」ウィンドウで「ol3proj」をクリックして選択し、「ファイル名」を「206-ol3ex.html」と入力し、「次へ」ボタンをクリックします。








e 「File Template」ウィンドウで「HTML 5 Template」をクリックして選択し、「OK」ボタンをクリックします。











f 「xyz-esri.html」の内容をコピーして「206-ol3ex.html」に貼り付け、修正します。
g 同じように、新規に「206-ol3ex.js」ファイルを作成し、「File Template」ウィンドウで「JavaScript Template」をクリックして選択し、「完了」ボタンをクリックして、「xyz-esri.js」の内容をコピーして貼り付け、修正します。「xyz-esri-require.js」も「206-ol3ex-require.js」に貼り付けます。


「206-ol3ex.html」
<!doctype html>
<html lang="en">
 <head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="chrome=1">
  <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
<!--
  <link rel="stylesheet" href="../css/ol.css" type="text/css">
  <link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css" type="text/css">
  <link rel="stylesheet" href="../resources/layout.css" type="text/css">
  <link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
-->
  <!-- ディレクトリ修正 -->
  <link rel="stylesheet" href="v3.0.0/css/ol.css" type="text/css">
  <link rel="stylesheet" href="v3.0.0/resources/bootstrap/css/bootstrap.min.css" type="text/css">
  <link rel="stylesheet" href="v3.0.0/resources/layout.css" type="text/css">
  <link rel="stylesheet" href="v3.0.0/resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
  <title>XYZ Esri example</title>
 </head>
 <body>

  <div class="navbar navbar-inverse navbar-fixed-top">
   <div class="navbar-inner">
    <div class="container">
<!--
     <a class="brand" href="./"><img src="../resources/logo.png"> OpenLayers 3 Examples</a>
-->
      <!-- ディレクトリ修正 -->
     <a class="brand" href="v3.0.0/examples/"><img src="v3.0.0/resources/logo.png"> OpenLayers 3 Examples</a>
    </div>
   </div>
  </div>
  <div class="container-fluid">
   <div class="row-fluid">
    <div class="span12">
     <div id="map" class="map"></div>
    </div>
   </div>
   <div class="row-fluid">
    <div class="span12">
     <h4 id="title">XYZ Esri example</h4>
     <p id="shortdesc">Example of a XYZ source using Esri tiles.</p>
     <div id="docs">
<!--
      <p>See the <a href="xyz-esri.js" target="_blank">xyz-esri.js source</a> for details on how this is done.</p>
-->
       <!-- ファイル修正 -->
      <p>See the <a href="206-ol3ex.js" target="_blank">206-ol3ex.js source</a> for details on how this is done.</p>
     </div>
     <div id="tags">xyz, esri</div>
    </div>
   </div>
  </div>
<!--
  <script src="jquery.min.js" type="text/javascript"></script>
  <script src="../resources/example-behaviour.js" type="text/javascript"></script>
-->
  <!-- ディレクトリ修正 -->
  <script src="v3.0.0/examples/jquery.min.js" type="text/javascript"></script>
  <script src="v3.0.0/resources/example-behaviour.js" type="text/javascript"></script>
<!--
  <script src="loader.js?id=xyz-esri" type="text/javascript"></script>
-->
  <!-- ファイル修正 -->  <!-- ディレクトリ修正 -->
  <script src="loader.js?id=206-ol3ex" type="text/javascript"></script>
 </body>
</html>

2014年9月24日水曜日

2 - ol3ex 5b - XYZ example 2

「xyz.js(205-ol3ex.js)」は、地図を表示するのに必要な javascript です。
「205-ol3ex.js」
var attribution = new ol.Attribution({
/** ol.Attribution
 * An attribution for a layer source.
 * レイヤソースの属性(ol3 API)
 */
/**
 * html: 'Tiles &copy; <a href="http://maps.nls.uk/townplans/glasgow_1.html">' +
 *     'National Library of Scotland</a>'
 */
 html: "Tiles &copy; <a href='http://portal.cyberjapan.jp/help/termsofuse.html' target='_blank'>" +
      "国土地理院</a>"
});
var map = new ol.Map({
 target: 'map',
 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
  })
 }),
 layers: [
/**
 *new ol.layer.Tile({
 * source: new ol.source.OSM({
 *  attributions: [
 *   new ol.Attribution({
 *    html: 'Tiles &copy; <a href="http://www.opencyclemap.org/">' +
 *        'OpenCycleMap</a>'
 *   }),
 *   ol.source.OSM.DATA_ATTRIBUTION // OpenStreetMap の DATA Attribution を取得
 *  ],
 *  url: 'http://{a-c}.tile.opencyclemap.org/cycle/{z}/{x}/{y}.png'
 * })
 *}),
 */
  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.XYZ({
   /** ol.source.XYZ
    * Layer source for tile data with URLs in a set XYZ 
    * format.
    * XYZ フォーマットの URL をともなったタイルデータのレイヤ
    * ソース。(ol3 API)
    */
    attributions: [attribution],
//  url: 'http://geo.nls.uk/maps/towns/glasgow1857/{z}/{x}/{-y}.png'
    url: 'http://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png'
   })  })
 ],
 view: new ol.View({
// center: [-472202, 7530279],
   center: [15520720, 4257706], // EPSG:3857 の値
// zoom: 12
   zoom: 10
 })
});


属性(attribution)が途中までしか表示されませんでした。
v3.0.0/css/ol.css の 「.ol-attribution ul」 のスタイルを次のように修正しました。
(全て、1行で記述されていますが、見やすいように直してあります。)
---
.ol-attribution ul{
 margin:0;
 padding:0 .5em;
 /* font-size:.7rem; */
 font-size:.7em;
 line-height:1.375em;
 color:#000;
 text-shadow:0 0 2px #fff;
 /* max-width:calc(100% - 3.6em); */
 max-width:calc(100%)
}
---