You are here

function geofield_field_formatter_view in Geofield 7.2

Same name and namespace in other branches
  1. 7 geofield.formatters.inc \geofield_field_formatter_view()

Implements hook_field_formatter_view().

File

./geofield.formatters.inc, line 215
Drupal field formatter hooks and helper functions.

Code

function geofield_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
  $element = array();

  // First check to see if we have any value and remove any unset deltas
  foreach ($items as $delta => $item) {
    if (empty($item['geom'])) {
      unset($items[$delta]);
    }
  }

  // Transform into centroid or bounding if needed
  if ($display['settings']['data'] != 'full') {
    geophp_load();
    if ($display['settings']['data'] == 'centroid') {
      foreach ($items as $delta => $item) {
        $centroid_wkt = 'POINT(' . $item['lon'] . ' ' . $item['lat'] . ')';
        $centroid = geoPHP::load($centroid_wkt);
        $items[$delta] = geofield_get_values_from_geometry($centroid);
      }
    }
    if ($display['settings']['data'] == 'bounding') {
      foreach ($items as $delta => $item) {
        $envelope_wkt = 'POLYGON ((' . $item['left'] . ' ' . $item['top'] . ', ' . $item['right'] . ' ' . $item['top'] . ', ' . $item['right'] . ' ' . $item['bottom'] . ', ' . $item['left'] . ' ' . $item['bottom'] . ', ' . $item['left'] . ' ' . $item['top'] . '))';
        $envelope = geoPHP::load($envelope_wkt);
        $items[$delta] = geofield_get_values_from_geometry($envelope);
      }
    }
  }

  // If we are a lat, lon, or latlon, and we are using degrees-minutes-seconds (instead of decimal degrees), then do a transformation
  if (isset($display['settings']['format'])) {
    if ($display['settings']['format'] == 'degrees_minutes_seconds') {
      foreach ($items as $delta => $item) {
        $items[$delta]['lat'] = geofield_latlon_DECtoDMS($item['lat'], 'lat');
        $items[$delta]['lon'] = geofield_latlon_DECtoDMS($item['lon'], 'lon');
      }
    }
  }

  // If we are a lat, lon, or latlon, and we are using celestial coordinate system (instead of decimal degrees), then do a transformation
  if (isset($display['settings']['format'])) {
    if ($display['settings']['format'] == 'ccs') {
      foreach ($items as $delta => $item) {
        $items[$delta]['lat'] = geofield_latlon_DECtoCCS($item['lat'], 'lat');
        $items[$delta]['lon'] = geofield_latlon_DECtoCCS($item['lon'], 'lon');
      }
    }
  }
  switch ($display['type']) {
    case 'geofield_wkt':
      geophp_load();
      foreach ($items as $delta => $item) {
        $geometry = geoPHP::load($item['geom']);
        $wkt = $geometry
          ->out('wkt');
        $microdata = _geofield_item_microdata_propertyvalue($entity, $instance, $item);
        $element[$delta] = array(
          '#markup' => $wkt . $microdata,
        );
      }
      return $element;
    case 'geofield_geojson':
      geophp_load();
      foreach ($items as $delta => $item) {
        $geometry = geoPHP::load($item['geom']);
        $json = $geometry
          ->out('json');
        $element[$delta] = array(
          '#markup' => $json,
        );
      }
      return $element;
    case 'geofield_kml':
      geophp_load();
      foreach ($items as $delta => $item) {
        $geometry = geoPHP::load($item['geom']);
        $kml = $geometry
          ->out('kml');
        $element[$delta] = array(
          '#markup' => $kml,
        );
      }
      return $element;
    case 'geofield_gpx':
      geophp_load();
      foreach ($items as $delta => $item) {
        $geometry = geoPHP::load($item['geom']);
        $kml = $geometry
          ->out('gpx');
        $element[$delta] = array(
          '#markup' => $kml,
        );
      }
      return $element;
    case 'geofield_geohash':
      geophp_load();
      foreach ($items as $delta => $item) {
        $geometry = geoPHP::load($item['geom']);
        $geohash = $geometry
          ->out('geohash');
        $element[$delta] = array(
          '#markup' => $geohash,
        );
      }
      return $element;
    case 'geofield_latlon':
      foreach ($items as $delta => $item) {
        $microdata = _geofield_item_microdata_propertyvalue($entity, $instance, $item);
        if ($display['settings']['labels']) {
          $element[$delta] = array(
            '#markup' => t('Latitude: !latitude <br/>Longitude: !longitude' . $microdata, array(
              '!latitude' => $item['lat'],
              '!longitude' => $item['lon'],
            )),
          );
        }
        else {
          $element[$delta] = array(
            '#markup' => $item['lat'] . ', ' . $item['lon'] . $microdata,
          );
        }
      }
      return $element;
    case 'geofield_lat':
      foreach ($items as $delta => $item) {
        $microdata = _geofield_item_microdata_propertyvalue($entity, $instance, $item);
        $element[$delta] = array(
          '#markup' => $item['lat'] . $microdata,
        );
      }
      return $element;
    case 'geofield_lon':
      foreach ($items as $delta => $item) {
        $microdata = _geofield_item_microdata_propertyvalue($entity, $instance, $item);
        $element[$delta] = array(
          '#markup' => $item['lon'] . $microdata,
        );
      }
      return $element;
    case 'geofield_geo_type':
      foreach ($items as $delta => $item) {
        $element[$delta] = array(
          '#markup' => $item['geo_type'],
        );
      }
      return $element;
    case 'geofield_openlayers':
      $map_name = $display['settings']['map_preset'] ? $display['settings']['map_preset'] : 'geofield_formatter_map';
      $element[0] = array(
        '#markup' => _geofield_openlayers_formatter($map_name, $items),
      );
      return $element;
    case 'geofield_def_list':
      foreach ($items as $delta => $item) {
        $element[$delta] = array(
          '#markup' => _geofield_def_list_formatter($item, $display['settings']),
        );
      }
      return $element;
    case 'geofield_description':
      foreach ($items as $delta => $item) {
        $element[$delta] = array(
          '#markup' => _geofield_description_formatter($item, $display['settings']),
        );
      }
      return $element;
  }
  return $element;
}