PHP地址经纬度

PHP地址经纬度,php,geolocation,location,latitude-longitude,Php,Geolocation,Location,Latitude Longitude,我在我的网站上有一个表单,用户在其中输入一个地方的地址。当他们提交表单时,我将此位置转换为纬度/经度,并将其存储在MySQL数据库中。我正在使用谷歌的地理编码服务进行转换。问题是,我找不到一个类或一个服务来将纬度/经度转换回一个地址,就我所知,谷歌的地理编码服务是单向转换。我意识到我可以将物理地址存储在数据库中,但随着时间的推移,当它可以以更简单的格式存储时,这会浪费空间。是否有人知道某个类/服务可以从纬度/经度转换为地址,或者如果我错了,我可以使用谷歌的地理编码系统?在过去的几天里,我一直在寻

我在我的网站上有一个表单,用户在其中输入一个地方的地址。当他们提交表单时,我将此位置转换为纬度/经度,并将其存储在MySQL数据库中。我正在使用谷歌的地理编码服务进行转换。问题是,我找不到一个类或一个服务来将纬度/经度转换回一个地址,就我所知,谷歌的地理编码服务是单向转换。我意识到我可以将物理地址存储在数据库中,但随着时间的推移,当它可以以更简单的格式存储时,这会浪费空间。是否有人知道某个类/服务可以从纬度/经度转换为地址,或者如果我错了,我可以使用谷歌的地理编码系统?在过去的几天里,我一直在寻找答案,但什么也找不到。谢谢你的帮助

您正在寻找谷歌(或其他任何人的)。

将地理坐标转换为地址称为反向地理编码。在这个脚本中,我们使用GoogleMapAPI,因为它免费、快速,并且不需要API密钥

Google reveres地理编码的速率限制为每天每IP 2500个API调用

用于Reveres地理编码的PHP函数

<?php
  $lat= 26.754347; //latitude
  $lng= 81.001640; //longitude
  $address= getaddress($lat,$lng);
  if($address)
  {
    echo $address;
  }
  else
  {
    echo "Not found";
  }
?>

在getaddress()函数中传递纬度和经度。它将在成功时返回地址字符串,否则返回布尔值false

示例

/**
 * find address using lat long
 */
public static function geolocationaddress($lat, $long)
{
    $geocode = "https://maps.googleapis.com/maps/api/geocode/json?latlng=$lat,$long&sensor=false&key=AIzaSyCJyDp4TLGUigRfo4YN46dXcWOPRqLD0gQ";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $geocode);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_PROXYPORT, 3128);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    $response = curl_exec($ch);
    curl_close($ch);
    $output = json_decode($response);
    $dataarray = get_object_vars($output);
    if ($dataarray['status'] != 'ZERO_RESULTS' && $dataarray['status'] != 'INVALID_REQUEST') {
        if (isset($dataarray['results'][0]->formatted_address)) {

            $address = $dataarray['results'][0]->formatted_address;

        } else {
            $address = 'Not Found';

        }
    } else {
        $address = 'Not Found';
    }

    return $address;
}

地理位置PHP将经纬度转换为地址。 首先,您需要获取使用以下链接找到的google map api的api密钥:

之后,将下面的函数放入helper类中,并在任何需要简单传递lat和long的地方调用该函数。在传递lat long之后,它们返回关于lat long值的地址。整个过程称为反向地理编码

有关更多详细信息,请查看以下链接:

好的,太棒了,这台机器非常好用。这几天我一直在找这个,谢谢!请注意谷歌TOS(注意:地理编码API只能与谷歌地图一起使用;禁止在地图上显示地理编码结果。)我在PHP中使用上述代码,通常效果很好-但是有时从谷歌地图获取地址($lat,$lon)会为$Address返回null。你见过这个问题和任何建议吗?这是非常间歇性的,但确实会发生。lat,lon是有效的,之前返回了一个有效地址,但在第二次调用、第三次调用或同一lat的第n次调用时,lon将为地址返回null?有什么想法吗?URL应该是https。谷歌现在要求对该API的请求必须通过SSL。否则会出现“请求被拒绝”错误。URL应为https。谷歌现在要求对该API的请求必须通过SSL。否则会出现“请求被拒绝”错误。
<?php
  $lat= 26.754347; //latitude
  $lng= 81.001640; //longitude
  $address= getaddress($lat,$lng);
  if($address)
  {
    echo $address;
  }
  else
  {
    echo "Not found";
  }
?>
/**
 * find address using lat long
 */
public static function geolocationaddress($lat, $long)
{
    $geocode = "https://maps.googleapis.com/maps/api/geocode/json?latlng=$lat,$long&sensor=false&key=AIzaSyCJyDp4TLGUigRfo4YN46dXcWOPRqLD0gQ";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $geocode);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_PROXYPORT, 3128);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    $response = curl_exec($ch);
    curl_close($ch);
    $output = json_decode($response);
    $dataarray = get_object_vars($output);
    if ($dataarray['status'] != 'ZERO_RESULTS' && $dataarray['status'] != 'INVALID_REQUEST') {
        if (isset($dataarray['results'][0]->formatted_address)) {

            $address = $dataarray['results'][0]->formatted_address;

        } else {
            $address = 'Not Found';

        }
    } else {
        $address = 'Not Found';
    }

    return $address;
}