6

如何使用用户机器的 PHP 获取经度和纬度?

如果北是正值,如果南是负值,我需要它是经度/

就纬度而言,如果是东则为正值,如果为西则为负值。

我怎样才能做到这一点?

4

3 回答 3

17

在服务器端进行地理定位的唯一方法是使用 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 已关闭,我将把答案留给后代,因为肯定有其他服务提供相同的服务。

于 2013-05-05T01:30:34.050 回答
0

因为确切的位置需要用户同意,所以不能用 PHP 完成。尝试使用 JS 获取用户的位置并使用 AJAX 将其发送到服务器。

如果您愿意使用大致位置,则可以按 IP 地址进行映射。网络搜索会为此提供一些选项,例如这个

于 2013-05-05T01:30:34.197 回答
0

请参考 Google Maps API 地理编码器:http: //lab.abhinayrathore.com/ipmapper/

这将回答您来自 AZ 的所有问题。如果您在使用它时遇到问题,请查看在哪里提出并回答了这个问题:Finditude & Longitude of a given IP Address using IPMapper

这将使用 Javascript 而不是 PHP 来完成

于 2013-05-05T01:30:17.610 回答