You are here

function geocoder_field_widget_resolve_deltas in Geocoder 7.2

Geocoder Widget - Resolve Deltas

Given a list of geometries, and user configuration on how to handle deltas, we created a list of items to be inserted into the fields.

1 call to geocoder_field_widget_resolve_deltas()
geocoder_field_widget_get_field_value in modules/geocoder_field/geocoder_field.module
Get a field's value based on geocoded data.

File

modules/geocoder_field/geocoder_field.module, line 439

Code

function geocoder_field_widget_resolve_deltas($geometries, $delta_handling = 'default', $target_info) {
  $values = array();

  // Default delta handling: just pass one delta to the next
  if ($delta_handling == 'default') {
    foreach ($geometries as $geometry) {
      $values[] = geocoder_field_widget_values_from_geometry($geometry, $target_info);
    }
  }

  // Single-to-multiple handling - if we can, explode out the component geometries
  if ($delta_handling == 's_to_m' || $delta_handling == 'c_to_m') {
    $type = $geometries[0]
      ->geometryType();
    if (in_array($type, array(
      'MultiPoint',
      'MultiLineString',
      'MultiPolygon',
      'GeometryCollection',
    ))) {
      $components = $geometries[0]
        ->getComponents();
      foreach ($components as $component) {
        $values[] = geocoder_field_widget_values_from_geometry($component, $target_info);
      }
    }
    else {
      $values[] = geocoder_field_widget_values_from_geometry($geometries[0], $target_info);
    }
  }

  // For multiple-to-single handling, run it though geometryReduce
  if ($delta_handling == 'm_to_s' || $delta_handling == 'c_to_s') {
    $reduced_geom = \geoPHP::geometryReduce($geometries);
    $values[] = geocoder_field_widget_values_from_geometry($reduced_geom, $target_info);
  }
  return $values;
}