【问题标题】:Google map geocoder is not returning correct geo location谷歌地图地理编码器没有返回正确的地理位置
【发布时间】:2012-01-06 06:26:17
【问题描述】:

我在使用地理编码器和返回正确的纬度/经度坐标时遇到问题。

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

谁能帮我提供正确的代码来获取带有国际字符的街道名称的纬度/语言地址?

【问题讨论】:

  • 1.摆脱所有htmlentities() 的东西。 2.你的PHP文件是什么字符编码的?如果是 UTF-8,它应该可以工作 - 我会先尝试
  • 1.完毕。没有变化。我还删除了html_entity_decode - 仍然没有变化。 2. UTF-8。但是“现实生活中”的地址是从 DB 中检索到的,并且表在 DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci 中。

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


【解决方案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ømmen Storsenter, Støperiveien 5, 2010 Strømmen, 挪威

但是ROOFTOP 当我只使用街道地址时:

Støperiveien 5,2010 年 Strømmen,挪威

尽管如您在地图上所见,Google 完全知道在该特定地址存在一个名为“Strømmen Storsenter”的位置!

这看起来毕竟不是字符集问题,而是 Google 解析带有地名的请求的方式很奇怪。

【讨论】:

  • 是的。那时我将不得不进一步调查。谢谢。
  • @Steven 是的,没问题。但如果你没有看到,请查看我的更新
  • 只有一个“捕获”。我将所有æ,ø,å 字符(如&amp;oslash;)存储在数据库中。我这样做是因为字符编码在 a*** 中很痛苦。所以urlencode("Str&amp;oslash;mmen... 不起作用。我想我必须反向解码&amp;oslash;
  • @Steven 是的,你必须解码这些。或者根本不进行 HTML 编码并修复编码问题 - 我知道这很麻烦,但那将是理想的方式:)
  • 这将是第二阶段。不要修复它,如果它没有损坏:p
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-17
  • 2012-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多