Je suis a l'intégration de Google Map / Places / Geocode sur mon site. Étant un site bilingue, je voudrais avoir les "traductions" dans le cas ou les règles de toponymie le permet.
Voici 3 exemples :
- Ville de Québec = Quebec City
Baie d'Hudson = Hudson Bay
100, boulevard de Maisonneuve = 100 De Maisonneuve Boulevard
Voici ma function utilisé :
Code : Tout sélectionner
function google_place_lookup($string,$l){
$array = array();
$details_url = "https://maps.googleapis.com/maps/api/geocode/json?language=".$l."&address=".str_replace (" ", "+", urlencode($string))."&key=GOOGLE_KEY";
$ch = curl_init();
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_VERBOSE, TRUE);
curl_setopt($ch, CURLOPT_URL, $details_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
if ($response['status'] != 'OK') { return null; }
$componentsSort = array('street_number' => array("short_name" => "street_number"),
'route' => array("long_name" => "route"),
'neighborhood' => array("long_name" => "neighborhood"),
'sublocality_level_1' => array("long_name" => "sublocality_level_1"),
'sublocality_level_2' => array("long_name" => "sublocality_level_2"),
'sublocality_level_3' => array("long_name" => "sublocality_level_3"),
'sublocality_level_4' => array("long_name" => "sublocality_level_4"),
'sublocality_level_5' => array("long_name" => "sublocality_level_5"),
'locality' => array("long_name" => "locality"),
'administrative_area_level_1' => array("long_name" => "admin_area_level_1_long",
'administrative_area_level_2' => array("short_name" => "admin_area_level_2_short"),
'administrative_area_level_3' => array("short_name" => "admin_area_level_2_short", "short_name" => "admin_area_level_3_short"),
'administrative_area_level_4' => array("short_name" => "admin_area_level_4_short"),
'administrative_area_level_5' => array("short_name" => "admin_area_level_5_short"),
'country' => array('long_name' => 'country_long','short_name' => 'country_short'),
'postal_code' => array("short_name" => "postal_code")
);
$components = $response['results'][0]['address_components'];
foreach($components as $k => $v) {
$types = $components[$k]['types'][0];
if(isset($componentsSort[$types]) && $componentsSort[$types]) {
foreach($componentsSort[$types] as $k2 => $v2) {
$array[$v2] = $components[$k][$k2];
}
}
}
$array['place_id'] = $response['results'][0]['place_id'];
$array['formatted_address'] = $response['results'][0]['formatted_address'];
$array['latitude'] = $response['results'][0]['geometry']['location']['lat'];
$array['longitude'] = $response['results'][0]['geometry']['location']['lng'];
return $array;
}Est-ce que je m'y prends de la mauvaise façon, j'en doute. Est-ce que vous savez si Google limite ces données au canada? J'ai vu, maintenant, qu'il y a des couts pour l'achat de leur BDD complète. Est-ce que je dois considérer cette option (https://developers.google.com/maps/pric ... ans/?hl=fr) ?
J'ai besoin ''rapidement'' d'une solution efficace. Les usagers consulte, ajoute et recherche sur le site dans les 2 langues, je veux évité d'avoir des résultats différents selon la rechercher en français / anglais. Exemple une recherche dans la Ville de Québec, ne sortira pas ceux inscrit sur le nom anglais Quebec City.
Par la suite, j'enregistre dans une table assez simple ( id, fr, en, lat, long ). Mes colonnes ''unique'' pour le fr/en, donc si un de mes usagers entre une ville en français, a l'enregistrement, je voudrais utilisé ma fonction pour récupérer l'équivalent en anglais. Par la suite, les usagers suivant aurons simplement a récuperer le meme id. Dans mes tests les plus récents, souvent, je me retrouve avec un id contenant 2 colonnes en francais et un autre id pour l'anglais.
Merci d'avance!
Référence sur la Toponymie :
http://www.toponymie.gouv.qc.ca/ct/norm ... nymes.html
http://www.btb.termiumplus.gc.ca/tcdnst ... 10.14#zz10