您的位置:首页 > 编程语言 > Go语言

结合Google Maps API和GeoIP/新浪/搜狐接口的IP地理信息可视化查询

2013-07-21 18:15 555 查看
网络上有很多提供IP地址查询的网站,输入IP地址,得到IP所在地的结果。本文实现一种更具特色的查询,将IP所在地直接标注在Google Maps上。

本文主要利用Google Maps JavaScript API 和第三方网站提供的IP查询接口实现。

主要设计思路:IP地址经第三方网站查询得到地理位置———>通过Google Maps API 提供的Geocoder.geocode()方法将地理位置转化为地理坐标(经纬度)——>再将地理坐标在地图上标记。

一、IP地址查询接口

通过IP地址查询地理位置的方法有两种:

1)使用数据库,可参考纯真IP数据库。

2)调用第三方网站的IP查询接口[1][2]

1.新浪IP地址查询接口:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=IP地址
可通过jquery调用,下同:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
<script type="text/javascript">
$.getScript('http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip='+ip.value, function(_result){
if (remote_ip_info.ret == '1'){
alert(remote_ip_info.city + remote_ip_info.country + remote_ip_info.province + remote_ip_info.isp);
}
});
}
</script>


2.搜狐IP地址查询接口:http://pv.sohu.com/cityjson
$.getScript('http://pv.sohu.com/cityjson', function(_result){
alert(returnCitySN.cip + ""+returnCitySN.cname);
});


3.GeoIP接口:
有多个API接口提供,包括所在地的经纬度,但免费用户只能查询本机IP:

geoip_country_code(){国家代码},geoip_country_ name(){国家名称},geoip_city() {城市名称},geoip_region(){地区代码},geoip_region_name(){地区名称}geoip_latitude(){经度},geoip_longitude(){纬度}。 

<script type="text/javascript" src="http://j.maxmind.com/app/geoip.js"></script>
<script type="text/javascript">
alert(geoip_country_name() + geoip_region_name() + geoip_city());
</script>


通过IP地址获取地理位置:

var geoAddress = "";
var ipAddress = document.getElementById("id").value;
$.getScript('http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=' + ipAddress, function(_result){
if (remote_ip_info.ret == 1) {
geoAddress = remote_ip_info.country + remote_ip_info.province + remote_ip_info.city;
}
});


二、构建Google Maps

详情参考Google Maps JavaScript API

var myLatlng = new google.maps.LatLng(23.1167,113.25);
var mapOptions = {
zoom:8,
center:myLatlng,
mapTypeId:google.maps.MapTypeId.ROADMAP
}
map = new google.maps.Map(document.getElementById('map-canvas'),mapOptions);


三、地理编码

地理编码是将地址(如“1600 Amphitheatre Parkway, Mountain View, CA”)转换为地理坐标(如纬度 37.423021 和经度 -122.083739)的过程,您可以根据该地理坐标放置标记或定位地图。

调用Geocoder.geocode() 方法向地理编码服务发起请求,在地理坐标位置上添加Marker与InfoWindow:

geoCoder.geocode({'address':geoAddress},function(result,status){
if(status == google.maps.GeocoderStatus.OK){
map.setCenter(result[0].geometry.location);
var marker = new google.maps.Marker({
map:map,
position:result[0].geometry.location
})

var contentString = "<h5>IP ADDRESS:" + ipAddress + "</h5>" +
"<p>country:" + remote_ip_info.country + "</br>" +
"province:" + remote_ip_info.province + "</br>" +
"city:" + remote_ip_info.city + "</br>" +
"isp:" + remote_ip_info.isp + "</p>";

var infoWindow = new google.maps.InfoWindow({
content:contentString
});
google.maps.event.addListener(marker,'click',function(){
infoWindow.open(map,marker);
});
setZoomLevel();
}
else{
alert("Geocode was not successful for the following reason: " + status);
}
});


四、为详细程度不一的地址设置不同的地图缩放级别

通过第三方网站查询的地理地址的详细程度不一样,例如有的地址为:中国广东广州,有的为:中国台湾,有的仅为:斯洛文尼亚。为此,设置不同的地图缩放级别能获得更佳的体验效果。

function setZoomLevel(){
if(remote_ip_info.city){
map.setZoom(8);
}
else if(remote_ip_info.province){
map.setZoom(5);
}
else{
map.setZoom(4);
}
}

五、成果展示

1、初始化,显示本机IP及位置:



2、查询IP:119.14.55.33 ,台湾



3、查询IP:109.123.56.2,斯洛文尼亚

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐