我在使用地理编码器和返回正确的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
。但如果我不这样做,谷歌返回ZERO_RESULT
。
谁能帮助我与正确的代码为获取的lat/lang地址的街道名称与国际字符?
如果你的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
是ROOFTOP
地址:
Støperiveien 5, 2010,挪威Strømmen
尽管,正如你在地图上看到的,谷歌完全意识到一个名为"Strømmen Storsenter"的位置在那个特定的地址!
这看起来不像一个字符集问题,但奇怪的是谷歌如何解析带有地名的请求。