diff -u b/geocoder.admin.inc b/geocoder.admin.inc --- b/geocoder.admin.inc +++ b/geocoder.admin.inc @@ -25,14 +25,6 @@ '#default_value' => empty($geocoder_settings['geocoder_apikey_yandex']) ? '' : $geocoder_settings['geocoder_apikey_yandex'], '#required' => FALSE, ); - - $form['geocoder_region_google'] = array( - '#type' => 'textfield', - '#title' => t('Google region code'), - '#description' => t('This regional context helps Google choose the right location. See ') . 'https://developers.google.com/maps/documentation/geocoding/#RegionCodes', - '#default_value' => empty($geocoder_settings['geocoder_region_google']) ? '' : $geocoder_settings['geocoder_region_google'], - '#required' => FALSE, - ); $form['#submit'][] = 'geocoder_admin_settings_submit'; return system_settings_form($form); @@ -43,11 +35,18 @@ ); + $form['geocoder_region_google'] = array( + '#type' => 'textfield', + '#title' => t('Google region code'), + '#description' => t('This regional context helps Google choose the right location. See ') . 'https://developers.google.com/maps/documentation/geocoding/#RegionCodes', + '#default_value' => empty($geocoder_settings['geocoder_region_google']) ? '' : $geocoder_settings['geocoder_region_google'], + '#required' => FALSE, + ); + $form['geocoder_google_delay'] = array( '#type' => 'textfield', '#title' => t('Delay between Google geocoding requests (in milliseconds)'), $geocoder_settings= variable_get("geocoder_settings", array()); $geocoder_settings['geocoder_apikey_yahoo'] = trim($form_state['values']['geocoder_apikey_yahoo']); $geocoder_settings['geocoder_apikey_yandex'] = trim($form_state['values']['geocoder_apikey_yandex']); - $geocoder_settings['geocoder_region_google'] = trim($form_state['values']['geocoder_region_google']); variable_set("geocoder_settings", $geocoder_settings); } @@ -67,4 +66,5 @@ $geocoder_settings['geocoder_apikey_yandex'] = trim($form_state['values']['geocoder_apikey_yandex']); $geocoder_settings['geocoder_apikey_bing'] = trim($form_state['values']['geocoder_apikey_bing']); + $geocoder_settings['geocoder_region_google'] = trim($form_state['values']['geocoder_region_google']); variable_set("geocoder_settings", $geocoder_settings); } diff -u b/plugins/geocoder_handler/google.inc b/plugins/geocoder_handler/google.inc --- b/plugins/geocoder_handler/google.inc +++ b/plugins/geocoder_handler/google.inc @@ -32,18 +32,6 @@ 'sensor' => 'false', ); - if (!empty($components)) { - foreach ($components as $key => $value) { - $components[$key] = $key . ':' . $value; - } - $query['components'] = implode('|', $components); - } - - $geocoder_settings= variable_get("geocoder_settings", array()); - if (isset($geocoder_settings['geocoder_region_google']) && isset($geocoder_settings['geocoder_region_google'])) { - $query['region'] = $geocoder_settings['geocoder_region_google']; - } - $url = url("http://maps.googleapis.com/maps/api/geocode/json", array('query' => $query)); $result = drupal_http_request($url); @@ -64,6 +52,18 @@ $query['components'] = $options['biasing']['components']; } + if (!empty($components)) { + foreach ($components as $key => $value) { + $components[$key] = $key . ':' . $value; + } + $query['components'] = implode('|', $components); + } + + $geocoder_settings = variable_get("geocoder_settings", array()); + if (isset($geocoder_settings['geocoder_region_google']) && isset($geocoder_settings['geocoder_region_google'])) { + $query['region'] = $geocoder_settings['geocoder_region_google']; + } + $url = url("http://maps.googleapis.com/maps/api/geocode/json", array('query' => $query)); $result = drupal_http_request($url); $delay_trigger = TRUE; @@ -139,8 +139,7 @@ } if ($field['type'] == 'addressfield') { $address = geocoder_widget_parse_addressfield($field_item); - $components = geocoder_google_parse_addressfield($field_item); - return geocoder_google($address, $options, $components); + return geocoder_google($address, $options); } if ($field['type'] == 'location') { $address = geocoder_widget_parse_locationfield($field_item); @@ -161,7 +160,8 @@ } if ($field['type'] == 'addressfield' && module_exists('addressfield') && !addressfield_field_is_empty($field_item, $field)) { $address = geocoder_widget_parse_addressfield($field_item); - return geocoder_google($address, $options); + $components = geocoder_google_parse_addressfield($field_item); + return geocoder_google($address, $options, $components); } if ($field['type'] == 'location') { $address = geocoder_widget_parse_locationfield($field_item); @@ -241,10 +241,16 @@ function geocoder_google_parse_addressfield($field_item) { $components = array(); - - if (!empty($field_item['locality'])) $components['locality'] = $field_item['locality']; - if (!empty($field_item['sub_administrative_area'])) $components['administrative_area'] = $field_item['sub_administrative_area']; - elseif (!empty($field_item['administrative_area'])) $components['administrative_area'] = $field_item['administrative_area']; - if (!empty($field_item['country'])) $components['country'] = $field_item['country']; - + if (!empty($field_item['locality'])) { + $components['locality'] = $field_item['locality']; + } + if (!empty($field_item['sub_administrative_area'])) { + $components['administrative_area'] = $field_item['sub_administrative_area']; + } + elseif (!empty($field_item['administrative_area'])) { + $components['administrative_area'] = $field_item['administrative_area']; + } + if (!empty($field_item['country'])) { + $components['country'] = $field_item['country']; + } return $components; } diff -u b/plugins/geocoder_handler/mapquest_nominatim.inc b/plugins/geocoder_handler/mapquest_nominatim.inc --- b/plugins/geocoder_handler/mapquest_nominatim.inc +++ b/plugins/geocoder_handler/mapquest_nominatim.inc @@ -44,10 +44,8 @@ $params['q'] = str_replace(' ', '+', $address); } $request = drupal_http_request($api_url . '?' . drupal_http_build_query($params)); - $data = json_decode($request->data); - } - while (empty($data) && !empty($components)); + } while (empty($data) && !empty($components)); return _geocoder_mapquest_nominatim_geometry($data); } @@ -82,14 +80,24 @@ function geocoder_mapquest_nominatim_parse_addressfield($field_item) { $components = array(); - // Params order matters. The more precise params first. // See geocoder_mapquest_nominatim(). - if (!empty($field_item['thoroughfare'])) $components['street'] = $field_item['thoroughfare']; - if (!empty($field_item['postal_code'])) $components['postalcode'] = $field_item['postal_code']; - if (!empty($field_item['locality'])) $components['city'] = $field_item['locality']; - if (!empty($field_item['sub_administrative_area'])) $components['county'] = $field_item['sub_administrative_area']; - if (!empty($field_item['administrative_area'])) $components['state'] = $field_item['administrative_area']; - if (!empty($field_item['country'])) $components['country'] = $field_item['country']; - + if (!empty($field_item['thoroughfare'])) { + $components['street'] = $field_item['thoroughfare']; + } + if (!empty($field_item['postal_code'])) { + $components['postalcode'] = $field_item['postal_code']; + } + if (!empty($field_item['locality'])) { + $components['city'] = $field_item['locality']; + } + if (!empty($field_item['sub_administrative_area'])) { + $components['county'] = $field_item['sub_administrative_area']; + } + if (!empty($field_item['administrative_area'])) { + $components['state'] = $field_item['administrative_area']; + } + if (!empty($field_item['country'])) { + $components['country'] = $field_item['country']; + } return $components; }