public function getGeocodedAddress(array $address) {
$address = $this->prepareAddress($address);
- $textAddress = $address['text'];
+ $textAddress = $this->getTextToGeocode($address);
// Try to geocode the full address.
if (($geocodedData = $this->getPlacemarkForAddress($textAddress))) {
$address['accuracy'] = 0;
return $address;
}
-
+
// Updates the address with the geocoded information from Google Maps. Also
// cleans up the final informations.
private function getUpdatedAddress(array $address, array $geocodedData, $extraLines) {
// We can now format the address.
$this->formatAddress($address, $extraLines);
- // Some entities in ISO 3166 are not countries, thus they have to be replaced
- // by the country they belong to.
- // TODO: fixCountry($address);
-
return $address;
}
return $postalText;
}
+ // Trims the name of the real country if it contains an ISO 3166-1 non-country
+ // item. For that purpose, we compare the last but one line of the address with
+ // all non-country items of ISO 3166-1.
+ private function getTextToGeocode($address)
+ {
+ $res = XDB::iterator('SELECT country, countryFR
+ FROM geoloc_countries
+ WHERE belongsTo IS NOT NULL');
+ $countries = array();
+ foreach ($res as $item) {
+ $countries[] = $item[0];
+ $countries[] = $item[1];
+ }
+ $textLines = explode("\n", $address['text']);
+ $countLines = count($textLines);
+ $needle = strtoupper(trim($textLines[$countLines - 2]));
+ $isPseudoCountry = false;
+ foreach ($countries as $country) {
+ if (strtoupper($country) == $needle) {
+ $isPseudoCountry = true;
+ break;
+ }
+ }
+
+ if ($isPseudoCountry) {
+ return $address['text'];
+ }
+ return implode("\n", array_slice($textLines, 0, -1));
+ }
+
// Search for the lign from the given address that is the closest to the geocoded thoroughfareName
// and replaces the corresponding lign in the geocoded text by it.
static protected function fixStreetNumber(&$address)
$success = false;
}
}
- if (isset($address['geoloc_choice'])) {
- if ($address['geoloc_choice'] == 0) {
- $mailer = new PlMailer('geoloc/geoloc.mail.tpl');
- $mailer->assign('text', $address['text']);
- $mailer->assign('geoloc', $address['geoloc']);
- $mailer->send();
- }
+ if (isset($address['geoloc_choice']) && ($address['geoloc_choice'] == 0)) {
+ $mailer = new PlMailer('geoloc/geoloc.mail.tpl');
+ $mailer->assign('text', $address['text']);
+ $mailer->assign('geoloc', $address['geoloc']);
+ $mailer->send();
$gmapsGeocoder = new GMapsGeocoder();
$address = $gmapsGeocoder->stripGeocodingFromAddress($address);
}
{**************************************************************************}
{if $address.geoloc}
-<div class="erreur {$prefid}_geoloc">
- La geolocalisation n'a pas donné un résultat certain, valide la nouvelle adresse
- ou modifie l'ancienne pour que ton adresse puisse être prise en compte.
+<div class="erreur center {$prefid}_geoloc">
+ Le géocodage n'a pas donné un résultat certain ! Tu as le choix entre :
+</div>
+<div class="{$prefid}_geoloc">
+ <ul>
+ <li><a href="javascript:validGeoloc('{$id}', 0)" style="color: red">ton adresse (à gauche)</a> ;</li>
+ <li><a href="javascript:validGeoloc('{$id}', 1)" style="color: green">notre suggestion (à droite)</a> ;</li>
+ <li><a href="javascript:validGeoloc('{$id}', 2)"
+ title="Garder le texte de l'adresse que tu as renseignée tout en utilisant les informations trouvées par le géocodage pour te localiser sur le planisphère et dans lors d'une recherche dans l'annuaire.">
+ le texte de ton adresse localisé à l'endroit que nous te suggérons</a>.</li>
+ </ul>
</div>
{/if}
{if $address.geoloc}
<textarea cols="30" rows="4" class="valid {$prefid}_geoloc"
name="{$prefname}[geoloc]">{$address.geoloc}</textarea>
-</div>
-<div class="center {$prefid}_geoloc">
- <a href="javascript:validGeoloc('{$id}', 0)">Valider ta version</a>
- •
- <a href="javascript:validGeoloc('{$id}', 1)">Valider la version géolocalisée</a>
{/if}
</div>
{if $address.geoloc}