我有一个如下所示的脚本,用于获取存储在 $address
变量中的地址的 lat 和 lng 值。
if(my condition here){
$prepAddr = urlencode($address);
$geocode = file_get_contents('https://maps.google.com/maps/api/geocode/json?address='.$prepAddr.'&sensor=false&key=myapikey');
$output= json_decode($geocode);
$address_lat = $output->results[0]->geometry->location->lat;
$address_lng = $output->results[0]->geometry->location->lng;
}
脚本运行得很好。但问题是我有超过 1000 个地址,我必须循环遍历并根据数据创建 csv 结果。当我这样做时,需要花费很长时间,并且在生成大约 200 个结果后总是失败。项目。
那么如何以更快的方式在 php 脚本中获取 lat lng 值?
我确实测试了延迟是否是由于 csv 生成造成的,但不是,如果我用 lat 和 lng 的静态值替换上面的 lat lng 生成代码,那么 csv 会更快生成(在 < 10 秒左右)。但使用 file_get_contents
大约需要 6 到 10 分钟
。
所以可以肯定问题出在我获取纬度和经度值的方式上。我想可能有人可以让我知道一种更快的方法来使用 PHP 脚本内的完整地址获取 lat lng 值。
可能有一种方法可以将 javascript 代码包含在 PHP 脚本中?但我不知道该怎么做?如果那会很快?
最佳答案
实现这一目标的最佳方法是创建一个函数,一次获取一个地址并从 google API
检索其 lat, lng
并将其存储在该地址中表(在地址表中添加两列用于 lat、lng
的列,并再添加一列以维护获取 lat、lng
的地址的状态)
每隔几秒或任何适合您的时间将此功能放在 CRON 上。现在,当您需要 CSV 时,从表中获取记录并从中生成 csv。
注意:Google API 有每秒和每天的点击限制,如果您使用 for 循环,则在某些循环后,该限制将达到几秒。
关于javascript - 使用 php 脚本以更快的方式获取 lat lng 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42870699/