获得数百个地址的lat lng

时间:2015-12-11 17:47:56

标签: php mysql google-api

我有一个包含地址的记录的mysql数据库。我想迭代这些地址并为每个地址获取地理编码lat和lng并将它们放入数据库中。我正在使用PHP。但是当我运行这段代码时,我收到的错误是" FastCGI进程超出了配置的请求超时"。有没有人建议如何使这个程序更好,或者如果没有,是否另一种方法会更好?

include_once ('constants_test.php'); 
// connect to database
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); //open db conn
if (mysqli_connect_errno()) {
        printf("Connect failed: %s", mysqli_connect_error());
        exit();
}


function lookup($string){
    ini_set('max_execution_time', 300);
   $string = str_replace (" ", "+", urlencode($string));
   $details_url = "http://maps.googleapis.com/maps/api/geocode/json?address=".$string."&sensor=false";

   $ch = curl_init();
   curl_setopt($ch, CURLOPT_URL, $details_url);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
   $response = json_decode(curl_exec($ch), true);

   // If Status Code is ZERO_RESULTS, OVER_QUERY_LIMIT, REQUEST_DENIED or INVALID_REQUEST
   if ($response['status'] != 'OK') {
    return null;
   }

   //print_r($response);
   $geometry = $response['results'][0]['geometry'];
    $longitude = $geometry['location']['lat'];
    $latitude = $geometry['location']['lng'];

    $array = array(
        'latitude' => $geometry['location']['lng'],
        'longitude' => $geometry['location']['lat'],

    );

    return $array;

}

$q = "SELECT ShotLocation FROM shotsfired";
 $result = $mysqli->query($q);
 $count = 0;

 while($row = $result->fetch_array(MYSQLI_ASSOC)) {
     if ($count < 3) {
         $location = $row["ShotLocation"];
         $location .= ", Pittsburgh, PA";
         $array = lookup($location);
         print_r($array);
         print_r ("<br/><br/>");
     }
    $count = $count++;
 }

1 个答案:

答案 0 :(得分:0)

您的请求很可能需要的时间超过运行进程的最长允许时间。要解决此问题,请将FragmentManager fm = getActivity().getSupportFragmentManager(); // and then depending on your case fm.findFragmentById(R.id.yourId); // or fm.findFragmentByTag("YOUR_TAG"); // or fm.getFragments(); // and then search the right one 的限制提高到更高的值。

要修改IIS网络服务器中的requestTimeout,您可以使用 IIS管理器。转到服务器 - &gt; IIS-&gt; FastCGI设置/编辑。

或者,做到这一点。将以下内容添加到您的网络配置中。

requestTimeout

(600秒= 10分钟)