在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获取用户位置纬度和经度[重复]

地理位置:通过距离获取纬度和经度[重复]

在不使用地图Android的情况下获取用户(纬度,经度)位置[重复]

怎么用机器学习算法预测经度和纬度?

如何使用纬度和经度在Android中获取位置名称[重复]