{  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 }
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服务

东拼西凑山寨方案

这个山寨的方案灵感来源于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

最后晒一个图,兴奋一下