现在lbs服务比较火,基本上都需要定位用户的地理信息,用户地理信息一般是通过gps来定位实现的,那么假如
用户的gps坏了,或者没有开启,那么怎么获得用户的地理信息的呢?替代的办法就是可以获得手机真实ip信息来大致获取手机用户的
大概位置,虽然不是很精确,但是在精确度不高的情况下可以临时代替一下,本文就是实现如何通过ip来定位用户的。这里主要使用获得pc端模拟手机端原理
使用工具:
地图:谷歌地图Google Maps JavaScript API V3
首先介绍一下谷歌地图定位地理信息的原理:根据经纬度查询出用户的地理信息,====gps可以获得经纬度。
也可以使用谷歌的共享地理位置信息 ,例如火狐的有http://www.mozilla.com/zh-CN/firefox/geolocation/可以体验一下共享地理信息,不过那个技术是基于w3c标准的,目前ie还不是支持。
本文要实现的:根据ip 查询获得ip的地理信息 和在地图中的显示
设计思想:获得ip信息--->查询到ip地理位置(如杭州 北京等,这个有两种方法一种是使用ip数据库,另外一种是门户网站接口)
----->根据获得的地理信息,谷歌把他转化为经纬度---->经纬度定位
本次修改增加了弹出信息窗口和 事件监听方法(监听经纬值)还是 在地图中显示图像功能
1:获得用户ip信息
这里推荐使用腾讯的ip开放接口,地理信息比较全,获得ip信息的更详细介绍
这个带有查询ip功能的方法,手机获得手机端ip信息传到这个方法,获取到地理位置
- //根据腾讯接口查询ip地址
- function getIPLoc($queryIP){
- $url = 'http://ip.qq.com/cgi-bin/searchip?searchip1='.$queryIP;
- $ch = curl_init($url);
- curl_setopt($ch,CURLOPT_ENCODING ,'gb2312');
- curl_setopt($ch, CURLOPT_TIMEOUT, 10);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ; // 获取数据返回
- $result = curl_exec($ch);
- $result = mb_convert_encoding($result, "utf-8", "gb2312"); // 编码转换,否则乱码
- curl_close($ch);
- preg_match("@<span>(.*)</span></p>@iU",$result,$ipArray);
- $loc = $ipArray[1];
- return $loc;
- }
- //方法2 直接获得客户端ip地址
- function getIpPlace(){
- $ip=file_get_contents("http://fw.qq.com/ipaddress");
- $ip=str_replace('"',' ',$ip);
- $ip2=explode("(",$ip);
- $a=substr($ip2[1],0,-2);
- $b=explode(",",$a);
- return $b;
- }
- <script type="text/javascript" src="http://ditu.google.com/maps/api/js?sensor=true"></script>
设置谷歌地图的参数
zoom是地图显示的缩放级数,center是地图的中心位置,maptypeid是地图的类型,address主要获取查询到的地理信息,
gecode主要是谷歌地图吧地理信息转化为经度纬度值,title主要是点击时候的名称,icon主要是锚点的背景图像,没有的话就是是默认值
- <script language="javascript">
- var geocoder;
- var map;
- function initialize() {
- geocoder = new google.maps.Geocoder();
- var latlng = new google.maps.LatLng(39.9493, 116.3975);
- var myOptions = {
- zoom: 15,
- center: latlng,
- mapTypeId: google.maps.MapTypeId.ROADMAP
- }
- var address = document.getElementById("address").value;
- var img='http://avatar.csdn.net/B/9/A/1_youacai.jpg';
- if (geocoder) {
- geocoder.geocode( { 'address': address}, function(results, status) {
- if (status == google.maps.GeocoderStatus.OK) {
- map.setCenter(results[0].geometry.location);
- var marker = new google.maps.Marker({
- map: map,
- position: results[0].geometry.location,
- title:'位置',
- icon:img
- });
- }
- });
- }
- map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
- }
弹出信息窗口
content是提示信息,它支持自定义的DOM样式,监听事件了有演示
open是打开窗口,相应的close是关闭窗口
- /*弹出信息窗口*/
- function getInfor(map,marker,address,ln){
- var infowindow = new google.maps.InfoWindow({
- content: address+"\n"+ln
- });
- infowindow.open(map,marker);
- }
监听事件
主要是监听鼠标对地图的操作,跟js很相似
本文演示的是点击的事件,
pixeloffset是指窗口相对应焦点的位置偏移量
google.maps.event.addListener(marker, 'click', function(event)监听点击事件,焦点是marker也就是背景图像的地方,
alert弹出对应焦点的经纬信息
- /*监听事件 经纬值*/
- function addListener(marker){
- var infowindow = new google.maps.InfoWindow({
- content:'<div style="color:#F00"><a href="http://blog.csdn.net/youacai">php淮北<img src="http://avatar.csdn.net/B/9/A/1_youacai.jpg" width="30" height="30" alt="tt"></a> 点点试试哦</div>',
- pixelOffset:({width:50, height:120})
- });
- google.maps.event.addListener(marker, 'click', function(event) {
- alert("你选择的经度是:"+event.latLng.lat()+" 纬度是:"+event.latLng.lat());
- infowindow.open(map,marker);
- });
- }
放置谷歌地图的容器
- <div id="map_canvas" style="width: 320px; height: 480px;"></div>
3:附带一个查询天气的接口
- /*获得天气预报信息*/
- <br/>
- <iframe src="http://weather.265.com/weather.htm" width="168" height="54" frameborder="no" border="0" marginwidth="0&quoat; marginheight="0" scrolling="no"></iframe>
- <pre name="code" class="php"><?php
- //根据腾讯接口查询ip地址
- function getIPLoc($queryIP){
- $url = 'http://ip.qq.com/cgi-bin/searchip?searchip1='.$queryIP;
- $ch = curl_init($url);
- curl_setopt($ch,CURLOPT_ENCODING ,'gb2312');
- curl_setopt($ch, CURLOPT_TIMEOUT, 10);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ; // 获取数据返回
- $result = curl_exec($ch);
- $result = mb_convert_encoding($result, "utf-8", "gb2312"); // 编码转换,否则乱码
- curl_close($ch);
- preg_match("@<span>(.*)</span></p>@iU",$result,$ipArray);
- $loc = $ipArray[1];
- return $loc;
- }
- //方法2 直接获得客户端ip地址
- function getIpPlace(){
- $ip=file_get_contents("http://fw.qq.com/ipaddress");
- $ip=str_replace('"',' ',$ip);
- $ip2=explode("(",$ip);
- $a=substr($ip2[1],0,-2);
- $b=explode(",",$a);
- return $b;
- }
- $ip=getIpPlace();
- $address =!empty($ip['3'])? iconv('gbk','utf-8',$ip['3']):'';
- //获得提交的ip信息
- if($_POST){
- $ip = trim($_POST['ip']);
- $loc = trim(getIPLoc($ip));
- $locip = trim($_POST['ip']);
- }else{
- $ip=getIpPlace();
- $loc =!empty($ip['3'])? iconv('gbk','utf-8',$ip['3']):'';
- $locip = iconv('gbk','utf-8',$ip['0']);
- }
- ?>
- <!--调用谷歌地图js,zoom缩放倍数,center中心,mapTypeId地图类型-->
- <script type="text/javascript" src="http://ditu.google.com/maps/api/js?sensor=true"></script>
- <script language="javascript">
- var geocoder;
- var map;
- function initialize() {
- geocoder = new google.maps.Geocoder();
- var latlng = new google.maps.LatLng(39.9493, 116.3975);
- var myOptions = {
- zoom: 15,
- center: latlng,
- mapTypeId: google.maps.MapTypeId.ROADMAP
- }
- var address = document.getElementById("address").value;
- <span style="white-space:pre"> </span>var img='http://avatar.csdn.net/B/9/A/1_youacai.jpg';
- <span style="white-space:pre"> </span>
- if (geocoder) {
- geocoder.geocode( { 'address': address}, function(results, status) {
- if (status == google.maps.GeocoderStatus.OK) {
- map.setCenter(results[0].geometry.location);
- var marker = new google.maps.Marker({
- map: map,
- position: results[0].geometry.location,
- <span style="white-space:pre"> </span> title:'位置',
- <span style="white-space:pre"> </span> icon:img
- });
- <span style="white-space:pre"> </span> getInfor(map,marker,address,results[0].geometry.location);
- <span style="white-space:pre"> </span> addListener(marker)
- }
- });
- }
- map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
- }
- /*弹出信息窗口*/
- function getInfor(map,marker,address,ln){
- <span style="white-space:pre"> </span>var infowindow = new google.maps.InfoWindow({
- <span style="white-space:pre"> </span>content: address+"\n"+ln
- <span style="white-space:pre"> </span> });
- <span style="white-space:pre"> </span>infowindow.open(map,marker);
- <span style="white-space:pre"> </span>
- }
- /*监听事件 经纬值*/
- function addListener(marker){
- <span style="white-space:pre"> </span> var infowindow = new google.maps.InfoWindow({
- <span style="white-space:pre"> </span>content:'<div style="color:#F00"><a href="http://blog.csdn.net/youacai">php淮北<img src="http://avatar.csdn.net/B/9/A/1_youacai.jpg" width="30" height="30" alt="tt"></a> 点点试试哦</div>',
- <span style="white-space:pre"> </span>pixelOffset:({width:50, height:120})
- <span style="white-space:pre"> </span> });
- <span style="white-space:pre"> </span> <span style="white-space:pre"> </span>google.maps.event.addListener(marker, 'click', function(event) {
- alert("你选择的经度是:"+event.latLng.lat()+" 纬度是:"+event.latLng.lat());
- <span style="white-space:pre"> </span> <span style="white-space:pre"> </span>infowindow.open(map,marker);
- <span style="white-space:pre"> </span>});
- <span style="white-space:pre"> </span> }
- </script> </pre><pre name="code" class="php"><body onload="initialize()">
- <div id="map_canvas" style="width: 320px; height: 480px;"></div>
- <div>
- <form method="post" action="">
- 输出ip地址:<input type="text" name="ip" value=<?php echo $locip;?>>
- <input type="submit" value="提交">
- </form>
- 位置: <input type="text" id="address" size="40" value=<?php echo $loc;?> >
- </div>
- /*获得天气预报信息*/
- <br/>
- <iframe src="http://weather.265.com/weather.htm" width="168" height="54" frameborder="no" border="0" marginwidth="0&quoat; marginheight="0" scrolling="no"></iframe>
- </body></pre><br>
- <br>
- <pre></pre>
- <p><img src="http://hi.csdn.net/attachment/201107/26/0_1311670654lAwz.gif" alt=""><img src="http://hi.csdn.net/attachment/201107/26/0_1311671145nMMo.gif" alt=""></p>
- <p></p>
- <p></p>
- <p></p>
- <p>上面是查询前后的截图 </p>
- <pre></pre>
- <pre></pre>
- <pre></pre>
- <pre></pre>
相关推荐
介绍了IP定位技术的基本概念和相关应用,研讨了现有的IP地理定位技术,并提出了一种基于网络路径测量的IP地理定位方法,该方法通过测量测量观测点到目标IP的路径和时延,变换测量数据包的大小推断路径距离,结合路径之间...
获取IP地址的地理位置通常有两种方式:一是使用IP库,二是通过第三方地理定位服务。IP库包含了大量的IP地址段及其对应的国家、城市等信息,开发者可以通过匹配IP地址找到相应的位置。另一种方式是调用如Google Maps ...
### IP地理位置获取技术详解:基于淘宝IP接口的PHP实现 #### 概述 在互联网应用中,IP地理位置的获取是一项非常实用且广泛的功能。通过对用户IP地址的解析,可以快速定位用户所在地理位置,这对于广告定向投放、...
IP地理位置查询系统是一种技术,它允许用户通过输入一个IP地址来获取与该IP相关的地理位置信息。这个系统在互联网上有着广泛的应用,包括但不限于网络安全、数据分析、广告定向、内容过滤、欺诈检测以及用户行为分析...
腾讯的IP地理位置接口是基于HTTP协议的RESTful API,可以通过发送GET请求来调用。调用这个接口时,你需要提供待查询的IP地址作为参数,腾讯服务器会返回一个JSON格式的响应,包含该IP对应的地理位置信息,如国家、...
在处理IP到地理位置的转换时,类库会查找这个数据文件来获取对应的位置信息。 2. **IpLocation.class.php**: 这是核心类文件,实现了获取和解析访客IP地址及地理位置信息的功能。该类可能包含了以下方法: - `...
"根据IP识别地理位置"这一技术,正是基于IP地址与地理位置之间的关联,为用户提供关于网络连接设备所在位置的信息。本文将深入探讨这一主题,包括IP地址的基础知识、IP与地理位置的关系以及如何通过IP来获取地理位置...
2. **数据库匹配**:通过查询预先下载或在线访问的IP地理定位数据库,找到与IP地址相对应的地理位置信息。 3. **数据解析**:将查询结果解析成人类可读的格式,如国家名、城市名等。 4. **应用集成**:将解析后的...
在"易语言显ip地理位置"这个主题中,我们主要探讨的是如何利用易语言来获取并显示一个IP地址所对应的地理位置信息。 IP地址是互联网上设备的唯一标识,它由四部分数字组成,每部分之间用点号分隔。地理位置信息则是...
但需要注意的是,由于IP地址的动态分配和隐私保护,这种基于IP的定位方法可能存在一定的误差,可能无法提供精确到街道级别的位置信息。 在实际应用中,纯真数据库通常被用于网络监控、网站访问统计、网络安全分析等...
基于地标性校准的IP地理位置...该研究为网络管理、安全监测、位置服务和其他基于IP地理位置的应用提供了新的技术手段,对于互联网资源的管理、内容分发网络(CDN)的优化、网络测量和故障排除等方面都有重要的应用价值。
Bilibili的IP地理位置解析库基于IP数据库,该数据库包含全球范围内的IP地址段及其对应的地理位置信息。当接收到一个IPv4地址时,库会通过二分查找算法快速定位到相应的IP范围,从而获取到对应的国家、地区、城市等...
这些API通常基于IP地址返回JSON数据,类库需要解析这些数据并以友好的形式返回。 3. `parseIpData($ip)`: 这可能是用来解析从API获取的IP数据的辅助方法,它将IP数据结构化为便于使用的数组或对象。 4. `validate...
“查询好友的位置”是基于IP地址进行的。每个IP地址都对应一个地理位置,通常是ISP的数据中心或用户的物理位置。通过IP查询服务,如公开的IP库或API(如MaxMind、IPInfoDB等),可以获取到与IP相关的国家、地区、...
- **过去**:早期地理定位技术受限于硬件和技术条件,如基于天文学的定位方法。 - **20世纪**:随着GPS技术的出现和发展,地理定位变得更加准确可靠。 - **当前**:HTML5 Geolocation API的出现极大地简化了地理定位...
Go-freegeoip是一个基于Go语言实现的IP地理位置查询Web服务器,它能够为用户提供快速、轻量级的解决方案,帮助开发者获取客户端IP地址对应的位置信息。这个项目源自fiorix/freegeoip,其源代码版本为989e6d4。在本文...
通过以上步骤,你可以在laravel项目中成功实现基于GeoIP2的IP地理位置查询功能。记住,确保PHP版本大于7.2,以充分利用其性能优势。这不仅有助于提升应用的响应速度,也有助于提高代码的可维护性和安全性。
腾讯的IP地理位置API可能涉及到以下技术点: 1. **HTTP请求**:通常获取IP信息需要发送HTTP或HTTPS请求到腾讯的服务器,使用GET或POST方法,携带必要的参数,如API密钥等。 2. **JSON解析**:腾讯的API通常会返回...
对于性能优化,可以使用缓存机制,将近期或常用的IP地理位置信息存储起来,减少不必要的网络请求。 6. **示例代码**: ```java import org.json.JSONObject; public class IpLocationFinder { private static ...
本项目基于Java编程语言,利用QQWry.Dat数据库文件实现了IP到地理位置的映射,使得开发者可以轻松地在自己的应用中集成这一功能。QQWry.Dat是一个包含全球IP地址和对应地理位置信息的数据库,它被广泛用于快速查询IP...