先上效果图

上海市2010年第六次全国人口普查

全国人口普查10年一次,不要问我为什么不找2017年,我也没办法,摊手~

思路

申请使用百度地图API密钥

数据准备

分析数据

把地区改编成经纬度

画图

1. 申请使用百度地图API密钥

点击创建应用,应用名称随便取,IP白名单,写自己的本地IP,或者0.0.0.0/0 都可

image.png

点击提交,记住自己的密钥(AK),后面有用。

2. 数据准备(xlsx格式)

3. 数据分析&4. 把地区改编成经纬度

我用python3.6

import json

from urllib.request import urlopen, quote

import xlrd

# 打开xlsx

book =xlrd.open_workbook("/Users/chengkai/Desktop/file/learn/project/sh_population/sh_population.xlsx")

# 打开sheet1

sh = book.sheet_by_index(0)

# 待拼接的url(不完整的url)

url = 'http://api.map.baidu.com/geocoder/v2/'

ak = '你自己的密钥'

# 遍历每一行,为什么从1开始呢,因为0是标题行,不需要

for i in range(1, sh.nrows):

# 各个地区前面加上‘上海市’,保证后面检索到的所有经纬度都是上海市的地区,而不是别的省市的

city ='上海市'+sh.cell_value(i,0)

# 取第二列所有人口

population = sh.cell_value(i,1)

# 因为出现中文,所以转换一下格式

add = quote(city)

# 以 json 的格式输出

output = 'json'

# URL 正式拼接,这一句画,下面还会详解解释

uri = url + '?' + 'address=' + add + '&output=' + output + '&ak=' + ak

req = urlopen(uri)

# 传入的字符串,需要解码

res = req.read().decode()

# 写成json 字典的形式

temp = json.loads(res)

# 提取经度

lng = temp['result']['location']['lng']

# 提取纬度

lat = temp['result']['location']['lat']

# 写成新的字典

str_temp = '{"lat":' + str(lat) + ',"lng":' + str(lng) + ',"count":' + str(population) +'},'

print(str_temp)

注释一,url拼接

仔细观察url 不一样的地方就是地区

看到下面的字典知道经纬度是怎么一层层提取了把

image.png

image.png

最后结果

{"lat":31.227203440768868,"lng":121.49607206403445,"count":429891.0},

{"lat":31.213348379555082,"lng":121.48123797847695,"count":248779.0},

{"lat":31.169152089592195,"lng":121.44623500472937,"count":1085130.0},

{"lat":31.213301496813617,"lng":121.3876161086648,"count":690571.0},

{"lat":31.23538080348789,"lng":121.45475555700204,"count":246788.0},

{"lat":31.263742929075534,"lng":121.39844294374956,"count":1288881.0},

{"lat":31.288044465926138,"lng":121.4577688102147,"count":830476.0},

{"lat":31.28249722898657,"lng":121.49191854079479,"count":852476.0},

{"lat":31.304510479541904,"lng":121.5357165996346,"count":1313222.0},

{"lat":31.093537540382123,"lng":121.42502428093465,"count":2429372.0},

{"lat":31.398622694466777,"lng":121.40904121844942,"count":1904886.0},

{"lat":31.36433805543363,"lng":121.25101353755592,"count":1471231.0},

{"lat":31.23089534913395,"lng":121.6384813140922,"count":5044430.0},

{"lat":30.83508077708232,"lng":121.24840817975154,"count":732410.0},

{"lat":31.021244628098586,"lng":121.22679050142115,"count":1582398.0},

{"lat":31.130862397996967,"lng":121.09142524282201,"count":1081022.0},

{"lat":30.915122452605868,"lng":121.56064167963345,"count":1083463.0},

{"lat":31.633564930802045,"lng":121.5353975435439,"count":703722.0},

5. 画图

复制粘贴下面的代码写到html文件

1 改成你的密钥

3 把下面的var points 的内容和上面上海市人口的内容替换

2 选一个地图的中心点,我选择黄浦区作为我的中心点

4 下面的代码还有很多参数值得研究,有时间的读者不妨研究一下,可以留言相互学习哈

image.png

如果写如密钥报错的话,可以用v=1.4版本的,因为这版本不需要密钥

热力图功能示例

ul,li{list-style: none;margin:0;padding:0;float:left;}

html{height:100%}

body{height:100%;margin:0px;padding:0px;font-family:"微软雅黑";}

#container{height:500px;width:100%;}

#r-result{width:100%;}

var map = new BMap.Map("container"); // 创建地图实例

var point = new BMap.Point(121.44623500472937, 31.169152089592195);

map.centerAndZoom(point,15); // 初始化地图,设置中心点坐标和地图级别

map.enableScrollWheelZoom(); // 允许滚轮缩放

var points =[{"lat":31.227203440768868,"lng":121.49607206403445,"count":429891.0},

{"lat":31.213348379555082,"lng":121.48123797847695,"count":248779.0},

{"lat":31.169152089592195,"lng":121.44623500472937,"count":1085130.0},

{"lat":31.213301496813617,"lng":121.3876161086648,"count":690571.0},

{"lat":31.23538080348789,"lng":121.45475555700204,"count":246788.0},

{"lat":31.263742929075534,"lng":121.39844294374956,"count":1288881.0},

{"lat":31.288044465926138,"lng":121.4577688102147,"count":830476.0},

{"lat":31.28249722898657,"lng":121.49191854079479,"count":852476.0},

{"lat":31.304510479541904,"lng":121.5357165996346,"count":1313222.0},

{"lat":31.093537540382123,"lng":121.42502428093465,"count":2429372.0},

{"lat":31.398622694466777,"lng":121.40904121844942,"count":1904886.0},

{"lat":31.36433805543363,"lng":121.25101353755592,"count":1471231.0},

{"lat":31.23089534913395,"lng":121.6384813140922,"count":5044430.0},

{"lat":30.83508077708232,"lng":121.24840817975154,"count":732410.0},

{"lat":31.021244628098586,"lng":121.22679050142115,"count":1582398.0},

{"lat":31.130862397996967,"lng":121.09142524282201,"count":1081022.0},

{"lat":30.915122452605868,"lng":121.56064167963345,"count":1083463.0},

{"lat":31.633564930802045,"lng":121.5353975435439,"count":703722.0},

];

if(!isSupportCanvas()){

alert('热力图目前只支持有canvas支持的浏览器,您所使用的浏览器不能使用热力图功能~')

}

//详细的参数,可以查看heatmap.js的文档 https://github.com/pa7/heatmap.js/blob/master/README.md

//参数说明如下:

/* visible 热力图是否显示,默认为true

* opacity 热力的透明度,1-100

* radius 势力图的每个点的半径大小

* gradient {JSON} 热力图的渐变区间 . gradient如下所示

* {

.2:'rgb(0, 255, 255)',

.5:'rgb(0, 110, 255)',

.8:'rgb(100, 0, 255)'

}

其中 key 表示插值的位置, 0~1.

value 为颜色值.

*/

heatmapOverlay = new BMapLib.HeatmapOverlay({"radius":50});

map.addOverlay(heatmapOverlay);

heatmapOverlay.setDataSet({data:points,max:100});

//是否显示热力图

function openHeatmap(){

heatmapOverlay.show();

}

function closeHeatmap(){

heatmapOverlay.hide();

}

closeHeatmap();

function setGradient(){

/*格式如下所示:

{

0:'rgb(102, 255, 0)',

.5:'rgb(255, 170, 0)',

1:'rgb(255, 0, 0)'

}*/

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'));

}

最后用浏览器打开html 文件,会看到最前面的镇楼图,祝君好运~!

python画城市热力图_python 在百度地图上画热力图相关推荐

  1. 如何在百度地图上画镂空圆 Android

    百度API提供了在地图上画圆形的类,但画出圆只能是实心圆,也就是不能实现让圆内没有颜色而圆外有颜色的镂空圆.那么我们应该实现镂空圆呢? 首先我发现API还提供一个画多边形的类.而一个镂空圆分解成两个多 ...

  2. python 百度地图api热力图_用百度地图API做热力图

    吐槽一下,以前申请的ak居然没有权限用js api,神一样的逻辑 然后新开的,居然有十五分钟以上的延迟.搞到我查了一阵,准备去论坛发帖了,突然好了... 然后设置渐变颜色很蛋疼,直男的审美有点痛苦 最 ...

  3. 怎样在百度地图上画圈_知识地图分享:你不是记忆差,你只是没找对方法

    生活的朋友都想拥有过目不忘的超能力,渴望挥手告别疯狂重复却很难记住的困境.超强的记忆力在上学与工作中都发挥着重要的作用. 多年前有一部港剧<读心神探>,里面的男主角姚学琛年少时学习差劲,被 ...

  4. python地图热力图是什么意思_python实现输入的数据在地图上生成热力图效果

    我就废话不多说了,直接贴代码,注意要先安装folium #-*-coding:utf8-*- #输入data生成热力图html,借助了leaflet,没网不能用 import os import fo ...

  5. python中国地图热力图是什么意思_python实现输入的数据在地图上生成热力图效果...

    我就废话不多说了,直接贴代码,注意要先安装folium #-*-coding:utf8-*- #输入data生成热力图html,借助了leaflet,没网不能用 import os import fo ...

  6. python比例图_python在地图上画比例的实例详解

    现在用python画图已经难不倒一直跟小编学习的小伙伴们了,甚至有的小伙伴画图比小编还要厉害.为此小编还偷偷下了一番功夫,画图这种事情,细节上的完善肯定能让图片更加好看.所以小编知道大家会画地图,但是 ...

  7. Python采集全国各地百度地图上店铺POI数据(母婴、美食等)

    Python采集全国各地百度地图上店铺POI数据 1. 注册百度地图开放平台账号 先注册百度地图开发平台账号,创建应用,获得AK 2. 通过Python批量检索不同城市店铺POI数据 2.1 大致思路 ...

  8. 如何绘制景区热力图_百度地图标注“景区热力图”让你拥有千里眼

    百度地图标注"景区热力图"让你拥有千里眼 发布时间: 2000-12-19点击数:1406 做人嘛,最主要的是高兴,春节十分困难出去玩一趟,只看到摩肩接踵这种作业是谁也不想的,假如 ...

  9. Echarts结合百度地图API绘制热力图

    最近项目中需要使用echarts与百度地图API结合来绘制事故发生热力图,在将其与百度地图结合的过程中遇到了一些问题,现将其过程与解决方案记录下,以供日后参考.echarts中结合百度地图API的热力 ...

最新文章

  1. [redis设计与实现][5]基本数据结构——整数集合
  2. windows 7平台 使用 感言
  3. 机器值计算机组成,计算机组成原理_数据的机器运算.ppt
  4. html和css可以用在ssh里面么,在网站中使用SSH
  5. 用c语言计算2的n次方,计算2的N次方........有什么错吗?
  6. 【转】android 完全退出应用程序
  7. gcc/g++ 如何支持c11/c++11标准编译
  8. c# 串口 多线程_远距离无线串口模块手持平板电脑价格多少钱
  9. Oculus消费者版在路上,留给“山寨”VR的时间有多少?
  10. 考研英语近义词与反义词·十四·总篇
  11. 图片转ascii字符画C语言,将图片转为ASCII字符画
  12. 那些不能在一起吃的水果搭配
  13. 微信小程序JSwxs获取当前时间戳
  14. Nginx+Lua+Redis实现广告缓存
  15. linux打包解压工具,打包压缩、解压缩工具详解
  16. 将计算机移动到桌面,如何将图标移动到桌面 移动桌面图标的方法分享
  17. Sql Server利器sql prompt
  18. 微信小程序-从零开始制作一个跑步微信小程序
  19. 电子版与网络版的差异(不可言传)
  20. 十年长空,历久弥新,SDCC 2017年终大戏震撼来袭!九大出品人隆重登场!

热门文章

  1. poi-tl生成word多张图表及图片
  2. 《坏小孩》《长夜难明》《无证之罪》之一点感想
  3. 开普勒sql注入靶场学习
  4. linux 2.6内核编译_03_配置选项注解
  5. java寻宝题目,直接带走的干货:2017新年寻宝题集
  6. 可爱的“符号表情”emoticon
  7. jmeter运行提示Not able to find Java executable or version. Please check your Java installa
  8. SV绿皮书笔记(二)
  9. antd_Ant Design Pro_Vue打包问题:使用静态本地文件路径访问
  10. 我开通留言了 !!!