获取纬度,经度多个地址的php代码

时间:2013-09-11 10:58:18

标签: php google-maps google-maps-api-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,所以页面加载时间很长。 我已提到链接How to get longitude latitude of multiple addresses geo-location

但是,不能让这个工作。

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

2 个答案:

答案 0 :(得分:1)

首先使用foreach代替for循环,因为它更快。

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

点击此链接:using file get contents or curl

你可以在这里使用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);

这肯定会缩短执行时间。

答案 1 :(得分:0)

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

为了使其更具可扩展性,您如何看待它可以使用多少个地址,然后分批处理它们。如果它可以正常运行100,那么使用start=100加载它,并在运行结束时让脚本再次使用start=$start+100调用,直到没有剩下。