一、简介

  在上一篇(数据科学学习手札41)中我们了解了folium的基础内容,实际上folium在地理信息可视化上的真正过人之处在于其绘制图像的高度可定制化上,本文就将基于folium官方文档中的一些基本示例来展开说明;

二、处理GeoJSON和TopoJSON数据

2.1 GeoJSON数据

  GeoJSON是语法规则符合JSON文件的,专用于表示地理信息的一种JSON文件,其在JSON语法的基础上,内部又有着一套固定的语法规则。在folium中我们使用folium.GeoJson()方法来为已有的Map对象添加GeoJson图层,其常用参数如下:

  data:传入你想要在地图上绘制的GeoJson数据

  style_function:一个自编函数,将自定义的对geojson中特征的风格设置,映射到geojson图层上,默认为None

  highlight_function:一个自编函数,用于映射自定义的地图上施加的鼠标事件形式,默认为None

  smooth_factor:float型,用于控制每一次缩放时geojson图层元素的光滑程度,该数值越大,意味着元素越光滑;该数值越小,意味着,元素的表现越接近真实坐标

下面是一些基本的例子:

  1、绘制线

import folium

'''创建底层Map对象'''
m = folium.Map(location=[0.5,100.5],
zoom_start=8,
control_scale=True) '''定义geojson图层'''
gj = folium.GeoJson(data={ "type": "LineString",
"coordinates": [ [100.0, 0.0], [101.0, 1.0] ]
}) '''为m添加geojson层'''
gj.add_to(m) '''显示m'''
m

  2、绘制无孔的区域

import folium

'''创建底层Map对象'''
m = folium.Map(location=[0.5,100.5],
zoom_start=8,
control_scale=True) '''定义geojson图层'''
gj = folium.GeoJson(data={ "type": "Polygon",
"coordinates": [
[ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0] ]
]
}) '''为m添加geojson层'''
gj.add_to(m) '''显示m'''
m

  3、绘制有孔的区域

import folium

'''创建底层Map对象'''
m = folium.Map(location=[0.5,100.5],
zoom_start=8,
control_scale=True) '''定义geojson图层'''
gj = folium.GeoJson(data={ "type": "Polygon",
"coordinates": [
[ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0] ],
[ [100.2, 0.2], [100.8, 0.2], [100.8, 0.8], [100.2, 0.8], [100.2, 0.2] ]
]
}) '''为m添加geojson层'''
gj.add_to(m) '''显示m'''
m

  4、绘制多点

import folium

'''创建底层Map对象'''
m = folium.Map(location=[0.5,100.5],
zoom_start=8,
control_scale=True) '''定义geojson图层'''
gj = folium.GeoJson(data={ "type": "MultiPoint",
"coordinates": [ [100.0, 0.0], [101.0, 1.0] ]
}) '''为m添加geojson层'''
gj.add_to(m) '''显示m'''
m

  5、绘制多线

import folium

'''创建底层Map对象'''
m = folium.Map(location=[0.5,100.5],
zoom_start=6,
control_scale=True)
'''创建geojson层'''
gj = folium.GeoJson(data={ "type": "MultiLineString",
"coordinates": [
[ [100.0, 0.0], [101.0, 1.0] ],
[ [102.0, 2.0], [103.0, 3.0] ]
]
}) '''将gj添加到m上'''
gj.add_to(m) '''显示m'''
m

  6、绘制多面

import folium

'''创建底层Map对象'''
m = folium.Map(location=[0.0,100.0],
zoom_start=6,
control_scale=True)
'''创建geojson层'''
gj = folium.GeoJson(data={ "type": "MultiPolygon",
"coordinates": [
[[[102.0, 2.0], [103.0, 2.0], [103.0, 3.0], [102.0, 3.0], [102.0, 2.0]]],
[[[100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0]],
[[100.2, 0.2], [100.8, 0.2], [100.8, 0.8], [100.2, 0.8], [100.2, 0.2]]]
]
}) '''将gj添加到m上'''
gj.add_to(m) '''显示m'''
m

  7、绘制几何集合

import folium

'''创建底层Map对象'''
m = folium.Map(location=[0.0,100.0],
zoom_start=6,
control_scale=True)
'''创建geojson层'''
gj = folium.GeoJson(data={ "type": "GeometryCollection",
"geometries": [
{ "type": "Point",
"coordinates": [100.0, 0.0]
},
{ "type": "LineString",
"coordinates": [ [101.0, 0.0], [102.0, 1.0] ]
}
]
}) '''将gj添加到m上'''
gj.add_to(m) '''显示m'''
m

2.2 TopoJSON数据

  TopoJSON是GeoJSON按照拓扑学编码之后的扩展形式,相比GeoJSON直接使用Polygon、Point之类的几何体来表示图形,TopoJSON中的每一个几何体都是通过将共享边整合后组成的,这使得TopoJSON相较于GeoJSON,大大地减少了数据冗余,节省存储空间,在folium中,我们使用folium.TopoJson()方法,通过与folium.GeoJson()相似的方法,为地图添加TopoJSON层对象,因此其常用参数同folium.GeoJson(),但没有highlight_function选项,下面是参照folium官方手册的一个简单的例子:

import folium
import os
import json '''将工作目录转至目标文件所在目录'''
os.chdir(r'C:\Users\windows\Desktop\folium') '''读取目标json文件'''
with open('南极冰盖_topo.json') as to:
s = to.readline()
data = json.loads(s) '''创建底层地图对象'''
m = folium.Map(
location=[-59.1759, -11.6016],
tiles='Mapbox Bright',
zoom_start=1
) '''创建TopoJson层对象'''
tj = folium.TopoJson(data,'objects.antarctic_ice_shelf',name='topojson') '''将topojson对象添加到底层地图上'''
tj.add_to(m) '''显示m'''
m

2.3 style_function  在folium.GeoJson()和folium.TopoJson()方法中,都有参数style_function,该参数传入一个自编函数用于控制GeoJson及TopoJson层中的对象视觉参数,自编函数style_function通过返回一个字典类型的变量,来完成上述控制过程,这个字典中常用的键有'color',用于控制边点线的颜色,'weight'用于控制边点线的大小或粗细,'fillOpacity'用于控制面对象中的填充颜色的透明度,'fillColor'用于控制面对象中填充颜色的色彩,建议使用十六进制字符型色彩输入来控制,下面通过一个简单的例子来了解一下style_function的用法:

import folium
import numpy as np '''创建底层地图'''
m = folium.Map(location=[0.0,180.0],
zoom_start=3,
control_scale=True) '''自定义style_function函数'''
def style_function(feature):
return {'fillOpacity': 0.4,
'weight': 2,
'fillColor': '#FFFF33',
'color':'#FFFF33'
} '''创建GeoJson层对象'''
gj = folium.GeoJson(data={ "type": "Polygon",
"coordinates": [[[160,30],[160,-30],[180,-30],[180,30]]]},style_function=style_function) '''将GeoJson层对象添加到底层地图资源上'''
gj.add_to(m) '''显示m'''
m

实际中,可以根据与面对象关联的指标数字,来控制不同水平对应的面对象的颜色,譬如在绘制中国各省经济发展水平的示意图时,就可以将每个省的某个经济指标如人均GDP作为指标数字,在style_function中设置相应的算法来控制面各省面对象的填充颜色以达到类似下图的效果(下图来自folium官方演示demo):

三、热力地图(heatmap)

  我们利用folium.plugins.HeatMap()来绘制我们的热力地图,该方法较为简单,主要的传入参数仅有一个data,其格式为[[纬度,经度,数值],[纬度,经度,数值],...,[纬度,经度,数值]],其中每一个单独的点的坐标由嵌套的内层每一个列表的前两个元素来确定,控制热力程度的值由上述列表的第三个值表示,下面是一个简单的例子:

import folium
import numpy as np
from folium.plugins import HeatMap data = (np.random.normal(size=(100, 3)) *
np.array([[1, 1, 1]]) +
np.array([[48, 5, 1]])).tolist()
data

可以看出,data的格式如我们介绍的那样

m = folium.Map([48., 5.], tiles='stamentoner', zoom_start=6)

HeatMap(data).add_to(m)

m

  以上就是关于folium的一些进阶内容,如有笔误,望指出。

  

  

  

(数据科学学习手札42)folium进阶内容介绍的更多相关文章

  1. (数据科学学习手札61)xpath进阶用法

    一.简介 xpath作为对网页.对xml文件进行定位的工具,速度快,语法简洁明了,在网络爬虫解析内容的过程中起到很大的作用,除了xpath的基础用法之外(可参考我之前写的(数据科学学习手札50)基于P ...

  2. (数据科学学习手札44)在Keras中训练多层感知机

    一.简介 Keras是有着自主的一套前端控制语法,后端基于tensorflow和theano的深度学习框架,因为其搭建神经网络简单快捷明了的语法风格,可以帮助使用者更快捷的搭建自己的神经网络,堪称深度 ...

  3. (数据科学学习手札55)利用ggthemr来美化ggplot2图像

    一.简介 R中的ggplot2是一个非常强大灵活的数据可视化包,熟悉其绘图规则后便可以自由地生成各种可视化图像,但其默认的色彩和样式在很多时候难免有些过于朴素,本文将要介绍的ggthemr包专门针对原 ...

  4. (数据科学学习手札50)基于Python的网络数据采集-selenium篇(上)

    一.简介 接着几个月之前的(数据科学学习手札31)基于Python的网络数据采集(初级篇),在那篇文章中,我们介绍了关于网络爬虫的基础知识(基本的请求库,基本的解析库,CSS,正则表达式等),在那篇文 ...

  5. (数据科学学习手札49)Scala中的模式匹配

    一.简介 Scala中的模式匹配类似Java中的switch语句,且更加稳健,本文就将针对Scala中模式匹配的一些基本实例进行介绍: 二.Scala中的模式匹配 2.1 基本格式 Scala中模式匹 ...

  6. (数据科学学习手札47)基于Python的网络数据采集实战(2)

    一.简介 马上大四了,最近在暑期实习,在数据挖掘的主业之外,也帮助同事做了很多网络数据采集的内容,接下来的数篇文章就将一一罗列出来,来续写几个月前开的这个网络数据采集实战的坑. 二.马蜂窝评论数据采集 ...

  7. (数据科学学习手札40)tensorflow实现LSTM时间序列预测

    一.简介 上一篇中我们较为详细地铺垫了关于RNN及其变种LSTM的一些基本知识,也提到了LSTM在时间序列预测上优越的性能,本篇就将对如何利用tensorflow,在实际时间序列预测任务中搭建模型来完 ...

  8. (数据科学学习手札36)tensorflow实现MLP

    一.简介 我们在前面的数据科学学习手札34中也介绍过,作为最典型的神经网络,多层感知机(MLP)结构简单且规则,并且在隐层设计的足够完善时,可以拟合任意连续函数,而除了利用前面介绍的sklearn.n ...

  9. (数据科学学习手札32)Python中re模块的详细介绍

    一.简介 关于正则表达式,我在前一篇(数据科学学习手札31)中已经做了详细介绍,本篇将对Python中自带模块re的常用功能进行总结: re作为Python中专为正则表达式相关功能做出支持的模块,提供 ...

随机推荐

  1. Linux文件系统检查错误

    我们的Linux系统在无法启动时候,通常需要进入单用户模式下进行修改一些配置文件,或调整一些参数方可.但是在进入单用户模式后,我们的/文件系统是只读模式,无法进行修改,那么这个时候我们就需要用到一条命 ...

  2. 使用 Sinamics S120 驱动脚本配置扩展报文

    为了传输故障代码.电流.温度等信息.通常需要使用扩展报文的方式来发送这些信息.在驱动数量较少的情况下,可以进行手动配置. 如果驱动数量很多,可以使用脚本script的方式来配置扩展报文. 驱动编号 注 ...

  3. SchemaSpy

    SchemaSpy https://github.com/schemaspy/schemaspy/releases https://sourceforge.net/projects/schemaspy ...

  4. OWASP出品:Xenotix XSS漏洞测试框架及简单使用

    OWASP Xenotix XSS Exploit Framework是一个高效的跨站脚本漏洞(XSS)检测和攻击测试框架.它通过特有的三大浏览器引擎(包括Trident, WebKit和Gecko) ...

  5. hdu-2886 Special Prime---数论推导

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2866 题目大意: 问你1到L中有多少个素数满足n^3 + p*n^2 = m^3(其中n,m为大于1 ...

  6. Python Django 分页

    Python Django 分页 http://www.360doc.com/content/14/0721/17/16044571_396090985.shtml

  7. 整理了一下关于KVO的姿势

    http://www.jianshu.com/p/d104daf7a062 1) + (BOOL)automaticallyNotifiesObserversForKey:(NSString *)th ...

  8. git的一些小命令

    git_cmd git常用命令 <>代表变量,例如 代表分支名称 远程库 查看远程库信息 git remote -v 查看远程仓库:$ git remote -v 添加远程仓库:$ git ...

  9. C#string byte[] base64位互相转换

    byte表示字节,byte[]则表示存放一系列字节的数组 1个字符=2个字节(byte) 1个字节=8个比特(bit) 网速上所说的1M其实是指1兆的小b,1M= 1024b/8 = 128kb 下面 ...

  10. SQL 查询函数

    1.abs函数取值(绝对值) select ABS(-20) 结果是20 2.ceiling函数取大于等于指定表达式的最小整数 select CEILING(40.5) 结果是41 3.floor函数 ...