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