Geo Location 地理位置信息小结

周末调研了一下Geo Location 地理位置信息方面的内容,自己小结一下。
一、通过 IP 地址获得用户的地理位置信息
也就是根据用户的IP,通过IP数据库查询获得信息。一般IP数据库中,
每条记录的基本结构:
 IP地址段(起始、结束),以及对应的信息数据
一般包含的信息:国家、区域(省/州)、城市、街道、经纬度、ISP提供商等信息

因为IP数据库随着时间经常变化(不过一段时间内变化很小),所以需要有人经常维护和更新。这个数据也不可能完全准确、也不可能覆盖全。这是maxmind的城市准确度 http://www.maxmind.com/app/city_accuracy
因为没有权威的数据组织机构,且经常有变化。各家数据供应商,基本上做着做着就形成自己的一套数据了。

目前,国内用的比较有名的是“纯真IP数据库”,国外常用的是 maxmind、ip2location。

IP数据库是否收费:收费、免费都有。一般有人维护的数据往往都是收费的,准确率和覆盖率会稍微高一些。

质量方面:
主要概念是准确率和覆盖率。
记录数据总条数。纯真现在是38万条(2010年07月30日更新)
是否有人维护。
数据库更新频率:每月、每周。数据库会定期更新的,maxmind开源版是每月更新一次。

查询形式:
本地,将IP数据库下载到本地使用,查询效率高、性能好。常用在统计分析方面。具体形式又分为:
内存查询:将全部数据直接加载到内存中,便于高性能查询。或者二进制的数据文件本身就是经过优化的索引文件,可以直接对文件做查询。
数据库查询:将数据导入到数据库,再用数据库查询。效率没有内存查询快。
远程(web service或ajax),调用远程第三方服务。查询效率自然比较低,一般用在网页应用中。
查询的本质:输入一个IP,找到其所在的IP段,一般都是采用二分搜索实现的。


是否提供API:有的IP数据库提供API,支持多语言(java、javascript、C#等),这样你就不用自己直接分析数据格式、整理、写查询代码了。

是否提供经纬度:纯真IP数据库不提供经纬度,Maxmind提供。如果做地图应用,一般是需要经纬度的。

语言方面:英文还是中文。maxmind提供的数据,所有信息都是英文的,国家是iso的国家码,如中国是China,北京是Beijing,国内环境使用不方便,除非你自己再维护一个中英对照表。而纯真IP数据库就中文信息。

另外,有些Web服务器也有这方面的功能集成。因为对Web应用而言,IP数据显然是通过Web服务器获得的,因此这部分工作也可以交给web 服务器来做。比如 Nginx 就带了一个GeoIP 的可选模块( http://wiki.nginx.org/NginxHttpGeoIPModule),集成了 MaxMind,安装时需要在configure中指定该模块。


Maxmind,http://www.maxmind.com
有收费版,也有开源版本。
数据下载,http://geolite.maxmind.com/download/geoip/database/
准确度,http://www.maxmind.com/app/city_accuracy
支持多种语言,http://www.maxmind.com/app/city
Open Source binary API available for the following languages:
C
PHP (Pure)
Java
Perl (XS)
Perl (Pure)
Apache
Python
MS COM
C#
Pascal
Ruby
For performance details, see our benchmark page

ip2location , http://www.ip2location.com/ ,和Maxmind类似,不多介绍了。

纯真IP数据库
http://www.cz88.net/
主要是国内信息,比较准确,也比较精确(可以到小区、网吧什么的),数据也是中文的。比较适合分析国内数据,国内够用了。国外数据非常少,如果主要处理国外的,不要用这个。没有经纬度。
数据的使用方法:
方法一:利用其自带的程序,可以将二进制数据解压为文本文件,然后写个程序将其导入到数据库中。为了方便IP查询,将IPv4的文本格式统一转为整数处理(网上有关于IP转整数的方法)。
方法二:使用某种编程语言,直接对二进制的数据文件进行查询。当然你要知道它的二进制格式,不过有一些现成的实现。对于java语言,使用LumaQQ中的现成代码就可以了,因为以前LumaQQ的显示地理位置就是用纯真IP数据库实现的。只用到IPSeeker.java,Utils.java ,IPEntry.java 。核心是IPSeeker.java,使用很简单,一看就明白。顺便说一下,里面有个cache如果你不需要可以自己去掉,另外其单例模式不是线程安全的,如果多线程使用,自己加个同步。

官方组织:APNIC
http://www.apnic.net/
APNIC is an open, membership-based, not-for-profit organization providing Internet addressing services to the Asia Pacific.
数据下载:http://ftp.apnic.net/apnic/dbase/data/
http://ftp.apnic.net/apnic/dbase/data/country-ipv4.lst 提供了IP段到国家的映射。小工具chnroutes 就是利用这个数据。


二、通过 W3C Geo API 获得用户地理位置
也就是html5中关于地理位置的方面
geolocation api,地理位置由浏览器提供,需要浏览器支持。很多基于地理位置的网站都开始使用了,一般需要浏览器用户同意。
W3C 的 Geolocation API Specification:http://dev.w3.org/geo/api/spec-source.html

三、移动领域
手机:GPS(精确度高、刚开启时搜星比较慢、手机上比较费电)、根据手机信号的基站定位(不太精确、范围较大),
Wifi信号应该也可以,但要有这方面的数据收集


其它参考:
Web 地理定位(Geo-Location)知识大全,http://www.javaeye.com/news/13813-web-geo
根据IP定位地理位置,http://www.huachu.com.cn/read/readbookinfo.asp?sectionid=1000004203

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值