2015年5月23日土曜日

2 - ol3.5ex 119b - esri ArcGIS REST Feature Service example 2

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

「2119-ol3ex.js」
var serviceUrl = 'http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/' +
 'Petroleum/KSFields/FeatureServer/';
var layer = '0';
var esrijsonFormat = new ol.format.EsriJSON();
/** ol.format.EsriJSON
 * Feature format for reading and writing data in the 
 * EsriJSON format.
 * EsriJSON フォーマットデータの読み込みと書き込みのための
 * フィーチャフォーマット。(ol3 API)
 */
var styleCache = {
 'ABANDONED': [
  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(225, 225, 225, 255)'
   }),
   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: 'rgba(0, 0, 0, 255)',
    width: 0.4
   })
  })
 ],
 'GAS': [
  new ol.style.Style({
   fill: new ol.style.Fill({
    color: 'rgba(255, 0, 0, 255)'
   }),
   stroke: new ol.style.Stroke({
    color: 'rgba(110, 110, 110, 255)',
    width: 0.4
   })
  })
 ],
 'OIL': [
  new ol.style.Style({
   fill: new ol.style.Fill({
    color: 'rgba(56, 168, 0, 255)'
   }),
   stroke: new ol.style.Stroke({
    color: 'rgba(110, 110, 110, 255)',
    width: 0
   })
  })
 ],
 'OILGAS': [
  new ol.style.Style({
   fill: new ol.style.Fill({
    color: 'rgba(168, 112, 0, 255)'
   }),
   stroke: new ol.style.Stroke({
    color: 'rgba(110, 110, 110, 255)',
    width: 0.4
   })
  })
 ]
};
var vectorSource = new ol.source.Vector({
/*: ol.source.Vector 
 * Provides a source of features for vector layers.
 * ベクタレイヤのフィーチャのソースを提供します。(ol3 API)
 */
 loader: function(extent, resolution, projection) {
  var url = serviceUrl + layer + '/query/?f=json&' +
   'returnGeometry=true&spatialRel=esriSpatialRelIntersects&geometry=' +
   encodeURIComponent('{"xmin":' + extent[0] + ',"ymin":' +
   extent[1] + ',"xmax":' + extent[2] + ',"ymax":' + extent[3] +
   ',"spatialReference":{"wkid":102100}}') +
   '&geometryType=esriGeometryEnvelope&inSR=102100&outFields=*' +
   '&outSR=102100';
  $.ajax({url: url, dataType: 'jsonp', success: function(response) {
  /** jQuery.ajax( url [, settings ] )
   * Perform an asynchronous HTTP (Ajax) request.
   * 非同期HTTP(Ajax)要求を実行します。
   * (jQuery[http://api.jquery.com/jQuery.ajax/])
   */
   if (response.error) {
    alert(response.error.message + '\n' +
     response.error.details.join('\n'));
   } else {
    // dataProjection will be read from document
    var features = esrijsonFormat.readFeatures(response, {
    /** readFeatures(source, opt_options)
     * Read all features from a EsriJSON source.
     *  Works with both Feature and FeatureCollection 
     * sources.
     * EsriJSON ソースからすべてのフィーチャを読み取ります。
     * フィーチャとフィーチャコレクションソースの両方で動作し
     * ます。
    * (ol3 API[説明は Stable Only のチェックを外すと表示])
     */
     featureProjection: projection
    });
    if (features.length > 0) {
     vectorSource.addFeatures(features);
     /** addFeatures(features)
      * Add a batch of features to the source.
      * フィーチャのバッチをソースに追加します。(ol3 API)
      */
    }
   }
  }});
 },
 strategy: ol.loadingstrategy.tile(new ol.tilegrid.XYZ({
 /** ol.loadingstrategy.tile(tileGrid)
  * Creates a strategy function for loading features 
  * based on a tile grid.
  * タイルグリッドに基づいて、ローディングフィーチャためのス
  * トラテジ関数を作成します。
  * (ol3 API[説明は Stable Only のチェックを外すと表示])
  */
 /** ol.tilegrid.XYZ
  * Set the grid pattern for sources accessing XYZ 
  * tiled-image servers.
  * XYZタイル画像サーバにアクセスするソースのグリッドパターン
  * を設定します。(ol3 API)
  */
  tileSize: 512
  }))
});
var vector = new ol.layer.Vector({
/** ol.layer.Vector
 * Vector data that is rendered client-side.
 * クライアント側で描画されたベクタデータ。(ol3 API)
 */
 source: vectorSource,
 style: function(feature, resolution) {
  var classify = feature.get('activeprod');
  /** get(key)
   * Gets a value.(ol3 API)
   */
  return styleCache[classify];
 }
});
var attribution = new ol.Attribution({
/** ol.Attribution
 * An attribution for a layer source.
 * レイヤソースの属性(ol3 API)
 */
 html: 'Tiles &copy; <a href="http://services.arcgisonline.com/ArcGIS/' +
  'rest/services/World_Topo_Map/MapServer">ArcGIS</a>'
});
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.XYZ({
 /** ol.source.XYZ
  * Layer source for tile data with URLs in a set XYZ 
  * format.
  * セットXYZ形式のURLを持つタイルデータのレイヤソース。
  * (ol3 API)
  */
  attributions: [attribution],
  url: 'http://server.arcgisonline.com/ArcGIS/rest/services/' +
   'World_Topo_Map/MapServer/tile/{z}/{y}/{x}'
 })
});
var map = new ol.Map({
 layers: [raster, vector],
 target: document.getElementById('map'),
 view: new ol.View({
  center: ol.proj.transform([-97.6114, 38.8403], '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
 })
});
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);
  /** push(elem)
   * Insert the provided element at the end of the 
   * collection.
   * コレクションの最後に供給されたエレメントに挿入します。
   * Name: elem, Type: T, Description: Element
   * (ol3 API)
   */
 });
 if (features.length > 0) {
  var info = [];
  var i, ii;
  for (i = 0, ii = features.length; i < ii; ++i) {
   info.push(features[i].get('field_name'));
   /** Array.push
    * 与えられた要素を追加することによって配列を変異させ、
    * その配列の新しい長さを返します。
    * (MDN [https://developer.mozilla.org/ja/docs/Web/
    * JavaScript/Reference/Global_Objects/Array/push])
    */
  }
  document.getElementById('info').innerHTML = info.join(', ') || '(unknown)';
  /** element.innerHTML
   * innerHTML は、与えられた要素に含まれる全てのマークアップ
   * と内容を設定または取得します。
   * (MDN[https://developer.mozilla.org/ja/docs/Web/
   * API/element.innerHTML])
   */
  /** 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.on('pointermove', function(evt) {
/** on
 * Listen for a certain type of event.
 * あるタイプのイベントをリッスンします。(ol3 API)
 */
/** pointermove
 * Triggered when a pointer is moved. Note that on 
 * touch devices this is triggered when the map is 
 * panned, so is not the same as mousemove.
 * ポインタが移動されたときにトリガされます。タッチデバイス
 * で、マップがパンされるときにこれはトリガーされ、 mousemove 
 * と同じではないことに注意してください。
 * (ol3 API)
 */
 if (evt.dragging) {
  return;
 }
 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) {
 displayFeatureInfo(evt.pixel);
});
 

0 件のコメント: