如何把IP转换成经纬度(Java版)
经常有这种需求,拥有用户的IP地址,想要在地图上显示用户的访问量。这个时候就需要用到经纬度...应为一般的地图插件都是基于经纬度的。
那么问题来了,如何把IP转换成经纬度?
百度API
最国产的方式,就是使用百度API了,百度提供了两种服务:
普通的IP服务:http://lbsyun.baidu.com/index.php?title=webapi/ip-api
https://api.map.baidu.com/location/ip?ak=请输入您的AK&coor=bd09ll
返回值:
{
address: "CN|吉林|长春|None|CERNET|1|None",
content:
{
address: "吉林省长春市",
address_detail:
{
city: "长春市",
city_code: 53,
district: "",
province: "吉林省",
street: "",
street_number: ""
},
point:
{
x: "125.31364243",
y: "43.89833761"
}
},
status: 0
}
精准的服务:http://lbsyun.baidu.com/index.php?title=webapi/high-acc-ip
https://api.map.baidu.com/highacciploc/v1?qcip=220.181.38.113&qterm=pc&ak=请输入您的AK&coord=bd09ll
返回值:
{
content: {
location: {
lat: 40.047726,#纬度
lng: 116.313304 #经度
},
locid: "8b1bf81d208bc2ce657fb6e6c270de66",#定位结果唯一ID
radius: 30, #定位结果半径
confidence: 1 #定位结果可信度
},
result: {
error: 161,#定位结果状态码
loc_time: "2016-08-23 15:14:12"#定位时间
}
}
这个API也不是随便问的,首先就需要注册;每个时间段的访问量还有限...因此不适合做数据分析使用。因为数据分析往往是大批量的数据同时去进行经纬度的转换。
Logstash进行转换
Logstash本身提供了IP地址转换成经纬度的功能:
input{
file{
path => "D:\access.json"
start_position => "beginning"
}
}
filter{
json{
source => "message"
}
date{
match => ["time","yyyy-MM-dd HH:mm:ss"]
timezone => "Asia/Shanghai"
}
geoip {
source => "ip"
target => "geoip"
}
}
output{
stdout{
codec => rubydebug
}
}
MaxMind提供的GeoIp服务
这个公司提供了GeoIp的转换服务,当然如果想要精确的匹配也是收费的。
这里有一个体验的网址:https://www.maxmind.com/en/geoip-demo
东拼西凑山寨方案
这个山寨的方案灵感来源于Logstash,Logstash本身提供了IP转换经纬度的功能。原理就是它自己有一个IP数据库,可以通过它执行查询。其实这个数据库时老版的MaxMind提供的数据文件,凑合用吧!新的需要花钱呀!
废话不多说,在Java中想要使用这个数据文件需要下载相应的Jar包和dat文件:
把dat文件放在自己的本地目录,然后项目中导入geoip.jar即可:
import com.maxmind.geoip.Location;
import com.maxmind.geoip.LookupService;
import java.io.IOException;
public class TestMain {
public static void main(String[] args) {
try {
LookupService cl = new LookupService("D:/lib/geoip/GeoLiteCity-2013-01-18.dat", LookupService.GEOIP_MEMORY_CACHE);
Location l2 = cl.getLocation("144.0.9.29");
System.out.println(
"countryCode: " + l2.countryCode +"\n"+
"countryName: " + l2.countryName +"\n"+
"region: " + l2.region +"\n"+
"city: " + l2.city +"\n"+
"latitude: " + l2.latitude +"\n"+
"longitude: " + l2.longitude);
} catch (IOException e) {
e.printStackTrace();
}
}
}
输出内容:
countryCode: CN
countryName: China
region: 25
city: Jinan
latitude: 36.668304
longitude: 116.99719
最后晒一个图,兴奋一下

参考
1 国外Geoip服务 MaxMind:https://www.maxmind.com/en/geoip-demo
2 国内Geoip服务 百度开放API: http://lbsyun.baidu.com/index.php?title=webapi/ip-api
如何把IP转换成经纬度(Java版)的更多相关文章
- IP转换成域名
DNS就是域名解析系统,它可以将IP转换成域名,也可以将域名转换成IP 1. 安装DNS服务 开始—〉设置—〉控制面板—〉添加/删除程序—〉添加/删除Windows组件—〉“网络服务”—〉选择“域名服 ...
- IP转换成LONG 的 问题
如何将四个字段以点分开的IP网络址协议地址转换成整数呢?PHP里有这么一个函数ip2long.比如 <?php echo ip2long("10.2.1.3"); ?> ...
- Segment(技巧 相乘转换成相加 + java)
Segment Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Sta ...
- 十六进制转换十进制(JAVA版)
解题思路路大概为:现将十六进制数转换为二进制数,再讲二进制数转换为八进制数.在进行十六进制转换为八进制时可以利用JAVA中的‘&’运算符号,一个十六进制数可以表示为四个二进制数,利用‘& ...
- 百度地图API地址转换成经纬度
public class LngAndLatUtil { public static Map<String,Double> getLngAndLat(String address){ Ma ...
- [转]字符型IP地址转换成数字IP的SQL函数
使用SQL函数可以实现许多的功能,下面为您介绍的是字符型IP地址转换成数字IP的SQL函数示例,供您参考,希望对您学习SQL函数能够有所帮助. /**//*--调用示例 sele ...
- Java-Runoob-高级教程-实例-时间处理:04. Java 实例 - 时间戳转换成时间
ylbtech-Java-Runoob-高级教程-实例-时间处理:04. Java 实例 - 时间戳转换成时间 1.返回顶部 1. Java 实例 - 时间戳转换成时间 Java 实例 以下实例演示 ...
- mysql IP转换函数
1.将字符串类型的实际IP转换成十进制数值型的 SELECT INET_ATON('209.207.224.40'); 执行结果:
- php的IP转换成整型函数ip2long()易出现负数
php中将IP转换成整型的函数ip2long()容易出现问题,在IP比较大的情况下,会变成负数.如下<?php$ip = "192.168.1.2";$ip_n = ip2l ...
随机推荐
- 简单的dp
有趣的数:(动态规划,状态转移) #include<stdio.h> ][]; int main() { int n,i; ; i<; i++) dp[i][]=; while(~s ...
- css怎样让HTML中超出的内容显示为省略号
文字超出了需要隐藏并显示省略号这个在工作中很多时候都要用到,我想很多人都碰到过吧,这个有两种解决方法第一种.用程序开截取字符长度,这个其实也是可以的.第二种就是接下来分享的内容,用css样式来做,话也 ...
- Java猜拳小游戏(剪刀、石头、布)
1.第一种实现方法,调用Random数据包,直接根据“1.2.3”输出“剪刀.石头.布”.主要用了9条输出判断语句. import java.util.Random; import java.util ...
- spring4+hibernate4+maven环境搭建
本文主要介绍利用maven搭建spring4+hibernate4开发环境. 首先我们创建一个maven项目,具体步骤就不详细介绍了,看看我们pom.xml文件 <project xmlns=& ...
- jboss 7 启动问题
19:30:50,176 INFO [org.jboss.modules] JBoss Modules version 1.1.1.GA19:30:50,458 INFO [org.jboss.msc ...
- window.showModalDialog返回值和window.open返回值实例详解
最近在谷歌浏览器下发现一个问题,就是使用谷歌浏览器已经不兼容window.showModalDialog了,所以还是改成使用window.open(). 一.window.showModalDialo ...
- php 用户ip的获取
$_SERVER 这个变量我很喜欢,里面有很多服务器和用户的配置.资料.特别是在获取用户ip 的时候 直接$_SERVER['REMOTE_ADDR'] 就可以或许,但这是没有使用 反向代理服务器的情 ...
- 一个字体引发的bug
delphi 7 中默认字体样式为‘MS Sans Serif’,一般情况下子级控件会继承父级一些属性,其中包括字体(包括字体大小,字体样式,颜色等)属性.如果动态创建控件且需要修改字体颜色或者大小时 ...
- day13---堡垒机
1.业务需求 兼顾业务安全目标与用户体验,堡垒机部署后,不应使用户访问业务系统的访问变的复杂,否则工作将很难推进,因为没人喜欢改变现状,尤其是改变后生活变得更艰难 保证堡垒机稳定安全运行, 没有100 ...
- 播放一个视频并用滚动条控制进度-OpenCV应用学习笔记二
今天我们来做个有趣的程序实现:利用OpenCV读取本地文件夹的视频文件,并且在窗口中创建拖动控制条来显示并且控制视频文件的读取进度. 此程序调试花费了笔者近一天时间,其实大体程序都已经很快写出,结果执 ...