
先是从http://geolite.maxmind.com下载了有关ip信息查询的数据库,下载的csv文件,由于免费的数据库只较准确到都市,这点实在有点惋惜了,因为我们的集群实在是小范畴的利用。
wget
http://geolite.maxmind.com/download/geoip/database/GeoLiteCity_CSV/GeoLiteCity-latest.zip
unzip GeoLiteCity-latest.zip
这内里有两个文件,一个GeoLiteCity-Blocks.csv和GeoLiteCity-Location.csv,Block文件中是提供的ip对应到locid信息,location文件中提供的是locid和经纬度信息。
从http://devblog.icans-gmbh.com/using-the-maxmind-geoip-api-with-r/偷了它的一个函数,
ipAddressToIpnum <- function(x) {
do.call(rbind,
lapply(strsplit(x, “.”, fixed=TRUE),
“as.numeric”)))
ipnum = 16777216*X1 + 65536*X2 + 256*X3 + X4)
}
这个函数认真将字符型的ip转换为数字。
load(“../TEST/IP.RData”)
City_location =
read.csv(“GeoLiteCity_20131001/GeoLiteCity-Location.csv”,skip=1)
City =
read.csv(“GeoLiteCity_20131001/GeoLiteCity-Blocks.csv”,skip=1)
ipAddressToIpnum <- function(x) {
do.call(rbind,
lapply(strsplit(x, “.”, fixed=TRUE),
“as.numeric”)))
ipnum = 16777216*X1 + 65536*X2 + 256*X3 + X4)
}
ip = ipAddressToIpnum(“202.197.111.112”)
ip = ipAddressToIpnum(as.character(IP.info))
ip = c(ip,ipAddressToIpnum(c(“202.103.0.117″,”
243.168.158.1″,”36.7.255.255″,”220.170.64.96″)))
#IP.info =
c(“188.143.232.193″,”37.140.141.2″,”66.249.75.18″,”5.10.83.2”)
#ip = c(ip,ipAddressToIpnum(IP.info))
inquery <- function(ip){
ip>=City$startIpNum
}
loc = unlist(lapply(X=ip,FUN=inquery))
loc = loc[!duplicated(loc)]
loc = City[loc,]
loc =
City_location[match(loc$locId,table=City_location$locId),]
#loc =
City_location[City_location$locId==City[index,]$locId,]
marker = data.frame(lat=loc$latitude,lon=loc$longitude)
bb = qbbox(marker[,1],marker[,2])
tp = GetMap.bbox(bb$lonR,bb$latR,marker=marker)
PlotOnStaticMap(tp,maptype=”mobile”)
