Google地图地理编码器未返回正确的地理位置

时间:2011-11-25 10:50:47

标签: php google-maps-api-3 geocoding

我在使用地理编码器时遇到问题并返回正确的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 个答案:

答案 0 :(得分:1)

如果你的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ømmenStorsenter,Støperiveien5,2010Strømmen,Norway

,但只使用街道地址时为ROOFTOP

  

Støperiveien5,2010Strømmen,Norway

即使如你在地图上看到的那样,谷歌也完全知道名为“StrømmenStorsenter”的位置会在该特定地址退出!

毕竟这看起来不像是一个字符集问题,但Google解析使用地名的请求的方式却很奇怪。