如何把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

本文转自博客园xingoo的博客,原文链接:如何把IP转换成经纬度(Java版),如需转载请自行联系原博主。

时间: 2024-08-15 18:12:54

如何把IP转换成经纬度(Java版)的相关文章

关于图片转换成字符显示java

问题描述 关于图片转换成字符显示java public static String _BitmapConvert(String imgpath) { StringBuffer _sb = new StringBuffer(); File imgfile = new File(imgpath); char[] charset = { 'M' '8' '0' 'V' '1' 'i' ':' '*' '|' '.' ' ' }; try { BufferedImage buff = ImageIO.r

技术转型-java实现语音存储和转换成文本

问题描述 java实现语音存储和转换成文本 java:可以通过什么技术或者有什么API可以实现语音相互转换,谁会实现,感激不尽 解决方案 你这个是语音识别啊大哥

python将ip地址转换成整数的方法

 这篇文章主要介绍了python将ip地址转换成整数的方法,涉及Python针对IP地址的转换技巧,需要的朋友可以参考下     本文实例讲述了python将ip地址转换成整数的方法.分享给大家供大家参考.具体分析如下: 有时候我们用数据库存储ip地址时可以将ip地址转换成整数存储,整数占用空间小,索引也会比较方便,下面的python代码自定义了一个ip转换成整数的函数,非常简单,代码同时还提供了整数转换成ip地址的方法. ? 1 2 3 4 5 6 7 import socket, struc

java怎么把转换成字符串转换成中国人习惯看的时间。

问题描述 java怎么把转换成字符串转换成中国人习惯看的时间. 如下代码 public class Test{ public static void main(String[] args) throws Exception { String str="2015/4/13"; Date d=new SimpleDateFormat("yyyy/MM/dd").parse(str); System.out.println(d);} } 打印出来的结果是 Mon Apr

python将ip地址转换成整数的方法_python

本文实例讲述了python将ip地址转换成整数的方法.分享给大家供大家参考.具体分析如下: 有时候我们用数据库存储ip地址时可以将ip地址转换成整数存储,整数占用空间小,索引也会比较方便,下面的python代码自定义了一个ip转换成整数的函数,非常简单,代码同时还提供了整数转换成ip地址的方法. import socket, struct def ip2long(ip): """ Convert an IP string to long """

php常用ip转换与文件下载代码

php教程常用ip转换与文件下载代码 ip转换 php中将ip转换成整型的函数ip2long()容易出现问题,在ip比较大的情况下,会变成负数. <?php $ip = "192.168.1.2"; $ip_n = ip2long($ip); echo $ip_n;      //得到 -1062731518 ?> 由于ip转换成的整型值太大超出了整型的范围,所以变成负数.需写成$ip_n = bindec(decbin(ip2long($ip)));这样便可得到无符号的整

wgp-急求将GPS测得的经纬度(WGS84)转换成xy坐标的java代码

问题描述 急求将GPS测得的经纬度(WGS84)转换成xy坐标的java代码 急求将GPS测得的经纬度(WGS84)转换成xy坐标的java代码 解决方案 经纬度其实就是XY坐标 只是不知你说的XY坐标指的是什么? 百度地图?google地图? 不同地图坐标有差别 再说也不用转换,直接给经纬度就行了 //Double latitude = 22.560034 * 1E6;

使用Axis2和JiBX将Java类转换成Web服务,第1部分

使用Axis2和JiBX将Java类转换成Web服务,第1部分: 使用XML通过Java类定义Web服务 本文配套源码 简介 Web 服务在日常开发中重要性与日俱增,Axis2 也成为了倍受人们欢迎的开发Web 服务的开放源码平台.Axis2 使用Java 语言编写,它能利用了 JiBX(一种框架,用于将XML和Java绑定在一起)的自由性.假设您有一个含有大量 Java 类和数据结构的 Java 项目,而且不想打乱或者更改它们.JiBX 会帮助您实现这一切,它把在 Axis2 中使用的 XML

java如何将 xls(xls报表)文件转换成cll文件(华表报表)

问题描述 java如何将xls(xls报表)文件转换成cll文件(华表报表)说明:华表报表保存出来的是.cll文件的所以说我现在想把xls报表转换成cll报表的,请问如何处理是好呀!!!谢谢各位了!!!! 解决方案 解决方案二:没有人知道吗?解决方案三:该回复于2011-03-26 12:03:13被版主删除解决方案四:三楼的链接我看了好像对我没有帮助的呀解决方案五:高手呀出来帮帮忙呀!!!