3

我将多个地址保存到我的数据库中。我想获取多个地址的经度和纬度。我正在使用代码:

foreach($address as $addr)
{
      $prepAddr = str_replace(' ','+',$addr);
      $geocode=file_get_contents('http://maps.google.com/maps/api/geocode/json?address='.$prepAddr.'&sensor=false');
      $output= json_decode($geocode);
      echo   $latitude = $output->results[0]->geometry->location->lat;
      echo   $longitude = $output->results[0]->geometry->location->lng;
}

$address 是返回所有地址的数组。

问题是地址在 500 以上,所以页面需要很长时间才能加载。我已经参考了链接如何获取多个地址地理位置的经纬度

但是,不能让它工作。

请你帮帮我。非常感谢任何帮助。

4

2 回答 2

1

首先使用 foreach 而不是 for 循环,因为它更快。

第二件事是使用CURL而不是file_get_content因为 curl 比我在 SO 的讨论中看到的更快。

检查此链接:使用文件获取内容或卷曲

你可以使用 curl 这里是 curl 的示例代码:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt($ch, CURLOPT_POST, true );
curl_setopt($ch, CURLOPT_POSTFIELDS, trim($request)); 
$result = curl_exec($ch);
curl_close($ch);

这肯定会减少执行时间。

于 2013-09-11T11:12:10.860 回答
0

我建议延迟更多地与连接到 api 并取回数据所需的时间有关,而不是与循环本身的速度有关。

为了使其更具可扩展性,您如何查看它可以处理多少个地址,然后分批处理它们。如果它在 100 好的情况下工作,然后用 加载它start=100,并在运行结束时,让脚本再次调用自身,start=$start+100直到没有剩余。

于 2013-09-11T11:07:46.453 回答