python根据IP列表生成百度IP热点图tilemap

1、安装python库,用到读取csv的库pandas,获取IP经度和纬度的库pygeoip

pip install pandas
pip install pygeoip


2、下载GeoIP库

http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz

http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz

解压后放于/usr/local/python2.7.6/lib/python2.7/site-packages/pygeoip/目录


3、读取ip,转化为point.js文件,源码如下:

#!/usr/bin/python

import pandas as pd
import pygeoip
import types

#初始化pygeoip
gi = pygeoip.GeoIP('/usr/local/python2.7.6/lib/python2.7/site-packages/pygeoip/GeoLiteCity.dat', pygeoip.MEMORY_CACHE)

#转换IP为经度和纬度
def getLocal(ip):
    if type(ip) != types.StringType:
        print ip
        return
    location = gi.record_by_addr(ip)
    if location is None:
        print ip
        return
    lng = location['longitude']
    lat = location['latitude']
    str_temp = '{"lat":' + str(lat) + ',"lng":' + str(lng) + '},\n'
    #print ip,lng,lat,str_temp
    file.write(str_temp)
    
file = open('/root/point.js', 'w')
file.write("var points =[\n")
#读取ip列表
df = pd.read_csv("/root/iplist.csv")
df.apply(lambda x:getLocal(x.sip), axis=1)
file.write("];\n")
file.close()

4、编写map.html文件,把point.js的数据传给百度,生成地图

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
    <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=KrmZxHHwvLnl4Xfyt0FMMVzgGLaaxU2j"></script>
    <script type="text/javascript" src="http://api.map.baidu.com/library/Heatmap/2.0/src/Heatmap_min.js"></script>
    <script type="text/javascript" src="./point.js"></script>
    <title>热力图功能示例</title>
    <style type="text/css">
        ul,li{list-style: none;margin:0;padding:0;float:left;}
        html{height:100%}
        body{height:100%;margin:0px;padding:0px;font-family:"微软雅黑";}
    </style>    
</head>
<body>
    <div id="container"></div>
    <div id="r-result">
        <input type="button"  οnclick="openHeatmap();" value="显示热力图"/><input type="button"  οnclick="closeHeatmap();" value="关闭热力图"/>
    </div>
</body>
</html>
<script type="text/javascript">
    var map = new BMap.Map("container");          // 创建地图实例

    var point = new BMap.Point(113.418261, 33.921984);
    map.centerAndZoom(point, 6);             // 初始化地图,设置中心点坐标和地图级别
    map.enableScrollWheelZoom(); // 允许滚轮缩放
       
    if(!isSupportCanvas()){
        alert('热力图目前只支持有canvas支持的浏览器,您所使用的浏览器不能使用热力图功能~')
    }

    heatmapOverlay = new BMapLib.HeatmapOverlay({"radius":20});
    map.addOverlay(heatmapOverlay);
    heatmapOverlay.setDataSet({data:points,max:100});
    //是否显示热力图
    function openHeatmap(){
        heatmapOverlay.show();
    }
    function closeHeatmap(){
        heatmapOverlay.hide();
    }
    openHeatmap();
    function setGradient(){
        var gradient = {};
        var colors = document.querySelectorAll("input[type='color']");
        colors = [].slice.call(colors,0);
        colors.forEach(function(ele){
            gradient[ele.getAttribute("data-key")] = ele.value; 
        });
        heatmapOverlay.setOptions({"gradient":gradient});
    }
    //判断浏览区是否支持canvas
    function isSupportCanvas(){
        var elem = document.createElement('canvas');
        return !!(elem.getContext && elem.getContext('2d'));
    }
</script>

5、把map.html和point.js放在一个目录,双击map.html得到地图

最终热力图的样子如下:

QQ截图20160626193304



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值