在PHP中获取用户机器的经度和纬度[重复]
Posted
技术标签:
【中文标题】在PHP中获取用户机器的经度和纬度[重复]【英文标题】:Get the longitude and latitude as user's machine in PHP [duplicate] 【发布时间】:2013-05-05 01:25:59 【问题描述】:如何使用用户机器的php获取经纬度?
如果北是正值,我需要它是经度,如果是南,它是负值/
而就纬度而言,如果是东则为正值,如果为西则为负值。
我该怎么做?
【问题讨论】:
呃,纬度是北/南位置,运动。 @pp19dd 啊,我的经纬度换了吗? 纬度和经度几乎都有给定的格式,如果你想要别的东西,你必须自己弄清楚。 @mario 我没有参加,因为它是重复的。但我会寻求帮助。 @adeneo 我希望它采用这种格式的唯一原因是将它传递给 php 的函数以获取日落和日出。它们要求经度和纬度采用这种形式。 【参考方案1】:在服务器端进行地理定位的唯一方法是使用 IP 地址查找表。有一些服务可以为您提供,所以您可以这样做:
$ip = !empty($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'];
$url = "http://freegeoip.net/json/$ip";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$data = curl_exec($ch);
curl_close($ch);
if ($data)
$location = json_decode($data);
$lat = $location->latitude;
$lon = $location->longitude;
$sun_info = date_sun_info(time(), $lat, $lon);
print_r($sun_info);
但它并不总是非常准确。在 javascript 中,您可以访问 html5 Geolocation API 或 Google Maps,但根据 TOS,使用 Google 进行反向地理编码需要您使用地图。
注意 (2019):示例中使用的服务 FreeGeoIP 已关闭,我将把答案留给后代,因为肯定有其他服务提供相同的服务。
【讨论】:
我不想在服务器端查找位置,我想用PHP在客户端查找位置。 客户端没有PHP,是服务端语言? 是的,所以我不能在客户端使用 PHP 来查找日落和日出。我必须使用客户端语言,对吗? @IrfanMir - 你为什么不先尝试我的答案,看看是否可行? 这样获取用户的位置?除非您在本地计算机上运行,在这种情况下它会获取 127.0.0.1 的位置,这是行不通的。【参考方案2】:请参考 Google Maps API 地理编码器:http://lab.abhinayrathore.com/ipmapper/
这将回答您从 A-Z 提出的所有问题。如果您在使用它时遇到问题,请查看在哪里提出并回答了这个问题:Find Latitude & Longitude of a given IP Address using IPMapper
这将使用 Javascript 而不是 PHP 来完成
【讨论】:
【参考方案3】:因为确切的位置需要用户同意,所以不能用 PHP 完成。尝试使用JS获取用户位置,并使用AJAX发送到服务器。
如果您愿意使用大致位置,您可以按 IP 地址进行映射。网络搜索会为此提供一些选项,例如this one。
【讨论】:
HTML5 geoloaction 只不过是浏览器根据 IP 和其他一些变量向服务发送请求,例如附近的基站、移动设备上的 GPS、近距离无线网络上的网络密钥等,所以它是也不是很准确,有些服务,尤其是微软的,甚至比使用免费服务来查找 IP 还要糟糕。以上是关于在PHP中获取用户机器的经度和纬度[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Android使用GoogleApiClient获取用户位置纬度和经度[重复]