Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正在尝试使用PHP获取Google coords。。超时?_Php_Geocoding - Fatal编程技术网

正在尝试使用PHP获取Google coords。。超时?

正在尝试使用PHP获取Google coords。。超时?,php,geocoding,Php,Geocoding,我正在尝试从用户输入的地址获取Google lat和long。我想在插入数据库之前这样做,但也许有更好的方法 当我独立运行这个函数时,它工作并返回坐标 $addressString = "21 Albert St Montreal H2W2H1"; function get_google($addressString){ if (!is_string($addressString))die("All Addresses must be passed as a string");

我正在尝试从用户输入的地址获取Google lat和long。我想在插入数据库之前这样做,但也许有更好的方法

当我独立运行这个函数时,它工作并返回坐标

$addressString = "21 Albert St Montreal H2W2H1";
function get_google($addressString){
        if (!is_string($addressString))die("All Addresses must be passed as a string");
        $_url = sprintf('http://maps.google.com/maps?output=js&q=%s',rawurlencode($addressString));
        $_result = false;
        if($_result = file_get_contents($_url)) {
            if(strpos($_result,'errortips') > 1 || strpos($_result,'Did you mean:') !== false) return false;
            preg_match('!center:\s*{lat:\s*(-?\d+\.\d+),lng:\s*(-?\d+\.\d+)}!U', $_result, $_match);
            $_coords['lat'] = $_match[1];
            $_coords['long'] = $_match[2];
        }
        echo $_coords['lat'] . " " . $coords['long']; // echoes correctly
    }
。。但是当我在我的代码中尝试这一点时,它似乎只为那些值返回NULL。(我正在使用Codeigniter)

。。所以当我尝试时,我没有得到谷歌坐标。。只有空值


有人能告诉我我搞砸了什么,或者有更好的方法吗?这是因为某些时间问题还是其他原因?

将带有echo的行更改为

return array($_coords['lat'],$coords['long'])

你没有从get_google()返回任何东西,那么,你期待什么呢?@MarkBaker。。很抱歉当我将echo语句演示为一个用于测试的“独立”函数时,我已经将它放在了一起。在我的代码中,我确实使用了RETURN语句。还有其他想法吗?我在想,为什么不直接使用API呢@珍妮啊。我正在学习一个php教程,它就是这样呈现的。但问题是:在DB插入之前/期间进行地理编码是正常的(需要延迟),还是以编程方式插入然后以某种方式获取Google co ords是正常的?您可能应该只在数据库中保存LatLng,并且只在需要时获取地址#1它不必等待结果#谷歌地图中的街道名称可能会改变。如果确实需要获取地址,那么应该在单独的进程中进行,这样就不会干扰主线程。将LatLng插入表后,您可以启动后台进程以获取地址,甚至可以定期更新以确保地址是最新的。
return array($_coords['lat'],$coords['long'])