如何通过来访者IP定位google地图
随着国内各大品牌门户网站纷纷推出地图服务,如搜狗地图,百度地图、网易地图等,地图的应用变得越来越广泛,同时,很多网站管理员都将地图服务加入到自己的网站中,增添不少特色,当然,也给使用的人提供了很多方便。最近本人一时兴起,利用google map api实现了通过来访者的IP定位google地图,同时提供对IP、域名归属地查询服务。国内也有比较多提供地图服务的API,例如:51ditu,mapbar等,选择google map api的原因是其应用的广泛性,而且其最新版本提供了更多更好的功能,不过还处于测试阶段。有兴趣的朋友可以上网搜索一下其相关资料。下面我将如何实现IP定位功能和大家交流一下。
要想使用google map api,首先得获取Google地图API的密钥,获取网址为:http://code.google.com/intl/zh-CN/apis/maps/signup.html,这一过程中,如果没有google帐户的话,还得注册用户。
获取到密钥之后接着下来利用它实现最简单的hello world网页,google提供了很多示例,大家可以访问这个网址:http://code.google.com/intl/zh-CN/apis/maps/documentation/examples/index.html查看其示例,想看怎么实现,只要查看相应页面的源代码就可以了。
经过简单的一些复制,粘贴操作,马上就可以在你的网页上增加地图了,呵呵,是不是很简单呢!拥有自己的地图后我们马上实现通过IP定位google地图。实现这个功能之前,我们得先准备些IP数据,假如你没有这些数据怎么办?没关系,我们可以享受免费大餐,国外著名的maxmind公司提供免费的IP地址库和相应的JAVA实现接口程序,大家可以通过链接http://www.maxmind.com/app/java进行下载,其免费数据准确率大概是70-80%,如果你想要更准确的数据,可以购买其收费数据,可以准确到90%以上,此外,我们还可以下载到国内著名的IP纯真数据库,准确率比maxmind的数据高多了,而且还是不断更新的,不过只限于国内的IP而言。附件中的是20091215的纯真数据库。
上面的都是一些准备的工作,现在是万事具备,只欠编码了,不过编码倒也是小事,按部就班就行了。
第一步,获取来访用户的IP
String ip = request.getHeader("x-forwarded-for");
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
第二步,根据IP,结合IP数据库获取相应的地址信息(纯真数据库)或者是经纬度信息,数据库调用都有相应的JAVA 调用API的,直接拿来用就行了。
第三步,根据获取到的经纬度或者地址信息定位地图,其实google map api只会根据经纬度进行定位,地址也是先转换成坐标信息,再进行定位的,代码片段如下:
function setMapCenter(){
map.setCenter(gll,14);//14是代表比例尺的级别
var marker = new GMarker(gll);
map.addOverlay(marker);
var tip = ipLoc+"\n"+chunZhenCountry+"\n"+chunZhenArea;
GEvent.addListener(marker, "click", function() {
marker.openInfoWindowHtml(tip);
});
marker.openInfoWindowHtml(tip);
}
至此,通过IP实现google地图定位的功能就实现了,具体的效果,大家可以看一下DEMO
截图如下:
纯真数据库的数据:
maxmind数据库的数据: