php的 ip 定位,经纬度至少精确到镇,附上源码和详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php的 ip 定位,经纬度至少精确到镇,附上源码和详解相关的知识,希望对你有一定的参考价值。

参考技术A ip定位一般对于电脑来说的,精确到镇有点难,淘宝的ip api服务,只能精确到区,或者市

手机的话,你需要获取位置,位置会因为手机质量的好坏,偏差很大,苹果和诺基亚手机定位很准,安卓各种机型,各种偏差,使用手机定位的是,html5有获取定位的方法,然后得到经纬度,发到百度地图 api,获取更精确的地址,

ip定位想要那么精确,有点难,你得找个好点的ip库服务,达到你要的精读就行
参考技术B

九~~州ip ,连上就可以改ip了,然后点自己网站,

浏览五个页面以上,每个页面停留一分钟左右。

国内动态IP随便换

多IP地区

如何通过IP地址或精确定位获取用户的经纬度

【中文标题】如何通过IP地址或精确定位获取用户的经纬度【英文标题】:How to obtain latitude and longitude of a user by IP address or pinpoint location 【发布时间】:2013-12-25 04:29:55 【问题描述】:

我想通过 php 脚本获取计算机用户的地理位置(纬度和经度)。我用的是这个

<?php

// Get lat and long by address      
        $address = $dlocation; // Google HQ
        $prepAddr = str_replace(' ','+',$address);
        $geocode=file_get_contents('http://maps.google.com/maps/api/geocode/json?address='.$prepAddr.'&sensor=false');
        $output= json_decode($geocode);
        $latitude = $output->results[0]->geometry->location->lat;
        $longitude = $output->results[0]->geometry->location->lng;

?>

但问题是这使用了真实地址,我只想让用户登录,询问他是否允许跟踪他(允许位置),如果他接受获取所需的值(经度和纬度)。可以通过 IP 地址 或其他方式来确定他的位置,但问题是我希望这种方法实际上 在代理和假货。关于我如何做到这一点的任何想法?非常感谢!

【问题讨论】:

您可以使用用户密码获取经度和纬度吗? @Mrcoder 如果它恰好是“最准确的”,如“合理”,是的。有时您登录一个网站,系统会询问我们是否要提供有关我们位置的信息(通常这是由浏览器本身发出的请求)。这就是我试图搜索的内容...... 我一个月前回答了一个类似的问题,这可能对***.com/questions/19764303/…有帮助 @Mrcoder ty,但正如我所说,我不希望用户提供任何东西,除了分享他的位置的权限:p 就像这样support.google.com/chrome/answer/142065?hl=en 如果我让它在 chrome 上工作我'将尝试修复其他浏览器中的类似问题。有什么想法吗? 发布了一个答案,如果你对 html5 开放,那么这是你能得到的最好的,通过我分享的源代码。 【参考方案1】:

我想这就是你想要的。简单易用。感谢 HTML5 see source here

<html>
<body>
<p id="demo">Click the button to get your coordinates:</p>
<button onclick="getLocation()">Try It</button>
<script>
var x=document.getElementById("demo");
function getLocation()
  
  if (navigator.geolocation)
    
    navigator.geolocation.getCurrentPosition(showPosition);
    
  elsex.innerHTML="Geolocation is not supported by this browser.";
  
function showPosition(position)
  
  x.innerHTML="Latitude: " + position.coords.latitude + 
  "<br>Longitude: " + position.coords.longitude;    
  
</script>
</body>
</html>

【讨论】:

所以我明白了!就是这样,有一个小缺陷:p javascript 很容易被破坏,所以保存在网络服务器上的位置可能有缺陷......有没有办法隐藏它或用 php 做这个确切的事情? 基本上在这里我们从用户浏览器获取信息,所以我认为 php 不会有太大帮助,除非你手动向 php 提供一些东西,它将在服务器中执行,就像我与你分享的早期链接中一样. 如何在服务器中保存地址由您决定。 我明白了... 求您的帮助,我会尝试看看是否可以解决其他问题:b【参考方案2】:

下载 geoip.inc - http://www.maxmind.com/download/geoip/api/php-20120410/geoip.inc, geoipcity.inc - http://www.maxmind.com/download/geoip/api/php-20120410/geoipcity.inc, geoipregionvars.php - http://www.maxmind.com/download/geoip/api/php-20120410/geoipregionvars.php,

GeoLiteCity.dat - http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz 请将 GeoLiteCity.dat.gz 转换为 GeoLiteCity.dat 和 放入geoip命名文件夹

    include("application/libraries/geoip/geoipcity.inc");
    include("application/libraries/geoip/geoipregionvars.php");

    $giCity = geoip_open("application/libraries/geoip/GeoLiteCity.dat", GEOIP_STANDARD);

    $ip =$_SERVER['REMOTE_ADDR'];
    $record = geoip_record_by_addr($giCity, $ip);

    echo "Getting Country and City detail by IP Address <br /><br />";
    echo "IP: " . $ip . "<br /><br />";

    echo "Country Code: " . $record->country_code .  "<br />" .
    "Country Code3: " . $record->country_code . "<br />" .
    "Country Name: " . $record->country_name . "<br />" .
    "Region Code: " . $record->region . "<br />" .
    "Region Name: " . $GEOIP_REGION_NAME[$record->country_code][$record->region] . "<br />" .
    "City: " . $record->city . "<br />" .
    "Postal Code: " . $record->postal_code . "<br />" .
    "Latitude: " . $record->latitude . "<`enter code here`br />" .
    "Longitude: " . $record->longitude . "<br />" .
    "Metro Code: " . $record->metro_code . "<br />" .
    "Area Code: " . $record->area_code . "<br />" ; 

【讨论】:

小伙伴们现在更新链接,请关注更新后的链接

以上是关于php的 ip 定位,经纬度至少精确到镇,附上源码和详解的主要内容,如果未能解决你的问题,请参考以下文章

前端页面获取访问者的IP地址经纬度和地理位置

前端页面获取访问者的IP地址经纬度和地理位置

全球定位IP位置 2018(离线版)

百度定位+精确定位+模糊城市定位

php怎么实现定位?除了ip

百度地图js版得到定位位置的经纬度之后怎么在地图上加那个闪烁的小圆点