Геокодер карты Google не возвращает правильное географическое местоположение - PullRequest
0 голосов
/ 25 ноября 2011

У меня проблемы с использованием геокодера и возвращением правильных координат lat / lang.

Адрес controller возвращает правильное географическое местоположение, но когда я использую символ ø в адресе,Я получаю некоторые странные координаты.

Вот мой код:

$controller = "Skovveien+7+0257+oslo+norway";
// base = Strømmen Storsenter, Støperiveien 5, 2010 Strømmen, Norway
$t1 = htmlentities("Strømmen+Storsenter+2010+strømmen+norway", ENT_QUOTES, 'UTF-8');
$t2 = htmlentities("Støperiveien+5+2010+strømmen+norway", ENT_QUOTES, 'UTF-8');


$adr = htmlentities($controller, ENT_QUOTES, 'UTF-8');
$res = getGeoLocation($adr);
echo '<p>Controll<br/> Lat: '.$res['lat'].' Lng: '.$res['lng']. '<p/>';

$adr = htmlentities($t1, ENT_QUOTES, 'UTF-8');
$res = getGeoLocation($adr);
echo '<p>Shopping mall<br/> Lat: '.$res['lat'].' Lng: '.$res['lng']. '<p/>';

$adr = htmlentities($t2, ENT_QUOTES, 'UTF-8');
$res = getGeoLocation($adr);
echo '<p>Adresse + post code<br/> Lat: '.$res['lat'].' Lng: '.$res['lng']. '<p/>';



public function getGeoLocation($adr) {  
  // Decode special chars
  $adr = html_entity_decode($adr, ENT_QUOTES, 'UTF-8');

  $url = "http://maps.google.com/maps/api/geocode/json?address=$adr&sensor=false";

  $jsonData   = file_get_contents($url);
  $geocode    = json_decode($jsonData);

  if($geocode->status == 'OK') {
    $geocode    = $geocode->results[0];
    $res['lat'] = $geocode->geometry->location->lat;
    $res['lng'] = $geocode->geometry->location->lng;
    return $res;
  } else {
    return false;
  }
} 

Я знаю, что сначала кажется немного бессмысленным использование htmlentities, затем использование html_entity_decode в функции.Но если нет, Google возвращает ZERO_RESULT.

Может кто-нибудь помочь мне с правильным кодом для получения адреса lat / lang для названий улиц с международными символами?

1 Ответ

1 голос
/ 25 ноября 2011

Если ваш PHP-файл имеет кодировку UTF-8, этот сокращенный пример должен работать:

$adr = urlencode("Strømmen Storsenter, Støperiveien 5, 2010 Strømmen, Norway");
$url = "http://maps.google.com/maps/api/geocode/json?address=$adr&sensor=false";
$jsonData   = file_get_contents($url);

Редактировать: Странно, я получаю адрес APPROXIMATE при использовании

Strømmen Storsenter, Støperiveien 5, 2010 Strømmen, Norway

, но ROOFTOP один, когда я использую только адрес улицы:

Støperiveien5, 2010 Стрёммен, Норвегия

Несмотря на то, что, как вы можете видеть на карте, Google прекрасно знает, что местоположение с именем «Стрёммен Сторсентер» выходит по этому конкретному адресу!

В конце концов, это не похоже на проблему с набором символов, но странно в том, как Google анализирует запросы с использованием названий мест.

...