You are here

class openlayers_layer_type_geojson in Openlayers 7.2

OpenLayers GeoJSON Layer Type class

Hierarchy

Expanded class hierarchy of openlayers_layer_type_geojson

3 string references to 'openlayers_layer_type_geojson'
openlayers_layer_type_geojson::options_init in plugins/layer_types/openlayers_layer_type_geojson.inc
Provide initial values for options.
_openlayers_openlayers_layers in includes/openlayers.layers.inc
Internal callback Helper function to return default layers.
_openlayers_test_openlayers_layers in tests/includes/openlayers_test.layers.inc
@file

File

plugins/layer_types/openlayers_layer_type_geojson.inc, line 10
GeoJSON Layer Type

View source
class openlayers_layer_type_geojson extends openlayers_layer_type {

  /**
   * Provide initial values for options.
   */
  function options_init() {
    return array(
      'layer_type' => 'openlayers_layer_type_geojson',
      'layer_handler' => 'geojson',
      'projection' => array(
        'EPSG:4326',
      ),
      'serverResolutions' => openlayers_get_resolutions('EPSG:4326'),
      'isBaseLayer' => FALSE,
      'vector' => TRUE,
      'geojson_data' => '',
      'useBBOX' => FALSE,
    ) + parent::options_init();
  }

  /**
   * Options form which generates layers
   */
  function options_form($defaults = array()) {
    return array(
      'url' => array(
        '#type' => 'textfield',
        '#title' => t('URL'),
        '#description' => t('The URL of the GeoJSON file.  This can be a Drupal path as well, as it will get run through the Drupal <a href="!url">url()</a> function.', array(
          '!url' => 'http://api.drupal.org/api/drupal/includes--common.inc/function/url',
        )),
        '#maxlength' => 1024,
        '#default_value' => isset($this->data['url']) ? $this->data['url'] : '',
      ),
      'useBBOX' => array(
        '#type' => 'checkbox',
        '#title' => t('Use Bounding Box Strategy'),
        '#description' => t('Bounding Box strategy will add a query string onto the GeoJSON URL, which means that only data in the viewport of the map will be loaded.  This can be helpful if you have lots of data coming from the feed.'),
        '#default_value' => isset($this->data['useBBOX']) ? $this->data['useBBOX'] : FALSE,
      ),
      //see http://dev.openlayers.org/docs/files/OpenLayers/Strategy/BBOX-js.html#OpenLayers.Strategy.BBOX.resFactor
      'resFactor' => array(
        '#type' => 'textfield',
        '#title' => t('Bounding Box resFactor'),
        '#description' => t('Used to determine when previously requested features are invalid (set to 1 if unsure).
          The resFactor will be compared to the resolution of the previous request to the current map resolution.<br />
          If resFactor > (old / new) and 1/resFactor < (old / new).
          <ul>
          <li>If you set a resFactor of 1, data will be requested every time the resolution changes.</li>
          <li>If you set a resFactor of 3, data will be requested if the old resolution is 3 times the new, or if the new is 3 times the old.</li>
          <li>If the old bounds do not contain the new bounds new data will always be requested (with or without considering resFactor).</li>
          </ul>
          '),
        '#default_value' => isset($this->data['resFactor']) ? $this->data['resFactor'] : 1,
      ),
      //see http://dev.openlayers.org/docs/files/OpenLayers/Strategy/BBOX-js.html#OpenLayers.Strategy.BBOX.ratio
      'ratio' => array(
        '#type' => 'textfield',
        '#title' => t('Bounding Box ratio'),
        '#description' => t('The ratio of the data bounds to the viewport bounds (in each dimension).  Default is 3.'),
        '#default_value' => isset($this->data['ratio']) ? $this->data['ratio'] : 3,
      ),
      'preload' => array(
        '#type' => 'checkbox',
        '#title' => t('Preload layer'),
        '#description' => t('Load data before layer is made visible. Useful when you want to avoid having to wait for an Ajax call to load the data'),
        '#default_value' => isset($this->data['preload']) ? $this->data['preload'] : FALSE,
      ),
      'useScript' => array(
        '#type' => 'checkbox',
        '#title' => t('Use Script Method'),
        '#description' => t('Avoid 405 error and XSS issues load data from another server with ajax'),
        '#default_value' => isset($this->data['useScript']) ? $this->data['useScript'] : FALSE,
      ),
      'callbackKey' => array(
        '#type' => 'textfield',
        '#title' => t('Script Callback Key'),
        '#description' => t('Key returned by callback along with geoJSON'),
        '#default_value' => isset($this->data['callbackKey']) ? $this->data['callbackKey'] : NULL,
      ),
      'geojson_data' => array(
        '#type' => 'textarea',
        '#title' => t('GeoJSON Data'),
        '#description' => t('Paste raw GeoJSON data here.  It is better to use a URL.  This is provided for very simple use cases like one or two features.  If there is data here, it will override the URL above.'),
        '#default_value' => isset($this->data['geojson_data']) ? $this->data['geojson_data'] : '',
      ),
    );
  }

  /**
   * Render.
   */
  function render(&$map) {
    if (isset($map['views_arguments'])) {
      foreach ((array) $map['views_arguments'] as $name => $value) {
        $this->data['url'] = str_replace("[{$name}]", $value, $this->data['url']);
      }
    }
    if (module_exists('facetapi') && isset($_GET['f'])) {
      $this->data['url'] = !empty($this->data['url']) ? url($this->data['url'], array(
        'query' => array(
          'f' => $_GET['f'],
        ),
        'absolute' => TRUE,
      )) : '';
    }
    else {
      $this->data['url'] = !empty($this->data['url']) ? file_create_url($this->data['url']) : '';
    }
    drupal_add_js(drupal_get_path('module', 'openlayers') . '/plugins/layer_types/openlayers_layer_type_geojson.js');
  }

}

Members

Namesort descending Modifiers Type Description Overrides
openlayers_layer_type::$data public property Stores the options for this layer.
openlayers_layer_type::$map public property Stores the current map.
openlayers_layer_type::getProjections public function
openlayers_layer_type::options_form_submit function Submit the options_form(). 6
openlayers_layer_type::options_form_validate function Validate the options_form(). 11
openlayers_layer_type::settings_form function Options form to configure layer-type-wide options. 3
openlayers_layer_type::__construct function Set configuration and store map.
openlayers_layer_type_geojson::options_form function Options form which generates layers Overrides openlayers_layer_type::options_form
openlayers_layer_type_geojson::options_init function Provide initial values for options. Overrides openlayers_layer_type::options_init
openlayers_layer_type_geojson::render function Render. Overrides openlayers_layer_type::render