Python绘制地图神器folium介绍及安装使用教程

Python绘制地图神器folium介绍及安装使用教程想要绘制更精美的可视化地图?想在地图上自由的设置各种参数?想获得灵活的交互体验?今天它就来了,Python绘制地图神器folium,上手直接开大!

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

之前给大家介绍过多种Python可视化模块,但使用他们进行地理可视化都很简陋。

所以想要绘制更精美的可视化地图?想在地图上自由的设置各种参数?想获得灵活的交互体验?

今天它就来了,Python绘制地图神器folium,上手直接开大!

一、folium简介和安装

folium 建立在 Python 生态系统的数据应用能力和 Leaflet.js 库的映射能力之上,在Python中操作数据,然后通过 folium 在 Leaflet 地图中可视化。

folium 相比较于国内百度的 pyecharts 灵活性更强,能够自定义绘制区域,并且展现形式更加多样化。[1]

Python绘制地图神器folium介绍及安装使用教程

1. folium的简介

  • Folium是建立在 Python 生态系统的数据整理 Datawrangling 能力和 Leaflet.js 库的映射能力之上的开源库。用 Python 处理数据,然后用 Folium 将它在 Leaflet 地图上进行可视化。Folium能够将通过 Python 处理后的数据轻松地在交互式的 Leaflet 地图上进行可视化展示。它不单单可以在地图上展示数据的分布图,还可以使用 Vincent/Vega 在地图上加以标记。

  • 这个开源库中有许多来自 OpenStreetMap、MapQuest Open、MapQuestOpen Aerial、Mapbox和Stamen 的内建地图元件,而且支持使用 Mapbox 或 Cloudmade 的 API 密钥来定制个性化的地图元件。Folium支持 GeoJSON 和 TopoJSON 两种文件格式的叠加,也可以将数据连接到这两种文件格式的叠加层,最后可使用 color-brewer 配色方案创建分布图。

  • Folium可以让你用 Python 强大生态系统来处理数据,然后用 Leaflet 地图来展示。Folium内置一些来自 OpenStreetMap、MapQuest Open、MapQuest Open Aerial、Mapbox和Stamen 的地图元件(tilesets),并且支持用 Mapbox 或者 Cloudmade API keys 来自定义地图元件。Folium支持 GeoJSON 和 TopJSON 叠加(overlays),绑定数据来创造一个分级统计图(Choropleth map)。但是,Folium库绘制热点图的时候,需要联网才可显示。

2. 安装folium

pip install folium -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

Jetbrains全家桶1年46,售后保障稳定

?这里直接使用了国内豆瓣源

Python绘制地图神器folium介绍及安装使用教程

二、基本使用

folium 显示地图的类为 folium.Map,类的声明如下:

class folium.Map(location=None, width='100%', height='100%', left='0%', top='0%', position='relative', tiles='OpenStreetMap', attr=None, min_zoom=0, max_zoom=18, zoom_start=10, min_lat=-90, max_lat=90, min_lon=-180, max_lon=180, max_bounds=False, crs='EPSG3857', control_scale=False, prefer_canvas=False, no_touch=False, disable_3d=False, png_enabled=False, zoom_control=True, **kwargs)

几个重要的参数:

  • location:经纬度,list 或者 tuple 格式,顺序为 latitude, longitude

  • zoom_start:缩放值,默认为 10,值越大比例尺越小,地图放大级别越大

  • control_scale:Bool型,控制是否在地图上添加比例尺,默认为 False 即不添加

  • tiles:显示样式,默认 “OpenStreetMap”,也就是开启街道显示

  • crs:地理坐标参考系统,默认为 “EPSG3857”

1. 各级别地图

世界地图

import folium

print(folium.__version__)

# define the world map
world_map = folium.Map()
# save world map
world_map.save('test_01.html')

结果如下:

当前folium版本:0.11.0

Python绘制地图神器folium介绍及安装使用教程

国家地图

import folium
# define the national map
national_map = folium.Map(location=[35.3, 100.6], zoom_start=4)
# save national map
national_map.save('test_02.html')

结果如下:

Python绘制地图神器folium介绍及安装使用教程

市级地图

其实改变地图显示也就是改变显示的经纬度和缩放比例,省级、市级、县级用法相似,这里举一个市级的例子为例,如北京市:

import folium
# define the national map
city_map = folium.Map(location=[39.93, 116.40], zoom_start=10)
# save national map
city_map.save('test_03.html')

Python绘制地图神器folium介绍及安装使用教程

2. 在地图上标记

普通标记

添加普通标记用 Marker,可以选择标记的图案。

import folium

bj_map = folium.Map(location=[39.93, 115.40], zoom_start=12, tiles='Stamen Terrain')

folium.Marker(
    location=[39.95, 115.33],
    popup='Mt. Hood Meadows',
    icon=folium.Icon(icon='cloud')
).add_to(bj_map)

folium.Marker(
    location=[39.96, 115.32],
    popup='Timberline Lodge',
    icon=folium.Icon(color='green')
).add_to(bj_map)

folium.Marker(
    location=[39.93, 115.34],
    popup='Some Other Location',
    icon=folium.Icon(color='red', icon='info-sign')    # 标记颜色  图标
).add_to(bj_map)

bj_map.save('test_04.html')

结果如下:

Python绘制地图神器folium介绍及安装使用教程

圆形标记

添加圆形标记用 Circle 以及 CircleMarker

import folium

bj_map = folium.Map(location=[39.93, 116.40], zoom_start=12, tiles='Stamen Toner')

folium.Circle(
    radius=200,
    location=(39.92, 116.43),
    popup='The Waterfront',
    color='#00FFFF',   # 颜色
    fill=False,        # 填充
).add_to(bj_map)

folium.CircleMarker(
    location=(39.93, 116.38),
    radius=50,   # 圆的半径
    popup='Laurelhurst Park',
    color='#FF1493',
    fill=True,
    fill_color='#FFD700'
).add_to(bj_map)

bj_map.save('test_05.html')

结果如下:

Python绘制地图神器folium介绍及安装使用教程

动态放置标记

import folium

dynamic_tagging = folium.Map(
    location=[46.8527, -121.7649],
    tiles='Stamen Terrain',
    zoom_start=13
)

folium.Marker(
    [46.8354, -121.7325],
    popup='Camp Muir'
).add_to(dynamic_tagging)

dynamic_tagging.add_child(folium.ClickForMarker(popup='Waypoint'))
dynamic_tagging.save('test_06.html')

结果如下:

Python绘制地图神器folium介绍及安装使用教程

更多详细使用可以参考官方文档:http://python-visualization.github.io/folium/quickstart.html[2]

三、实战案例

以将停车场地理位置数据可视化在地图上示例,熟悉 folium 地图可视化的使用。

1. 获取经纬度数据

停车场地理位置数据来源于网络,数据真实可靠,下面先利用 Python 爬虫获取数据

#数据来源:http://219.136.133.163:8000/Pages/Commonpage/login.aspx

import requests
import csv
import json
import logging

headers = {
    'X-Requested-With': 'XMLHttpRequest',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'
}
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s: %(message)s')
url = 'http://219.136.133.163:8000/Pages/Commonpage/AsyGetData.asmx/GetParkList'
s = requests.session()
s.get(url, headers=headers)
for i in range(1, 318):
    data = {
        'cp': str(i),
        'ps': '10',
        'kw': '',
        'lon': 'undefined',
        'lat': 'undefined',
        'type': 'undefined'
    }
    url = 'http://219.136.133.163:8000/Pages/Commonpage/AsyGetData.asmx/GetParkList'
    # post提交表单数据
    res = s.post(url, data=data, headers=headers)
    # 重新设置编码
    res.encoding = 'utf-8'
    # str转json  便于提取数据
    result = json.loads(res.text)['Result']
    for j in result:
        park_name = j['ParkName']
        Lon = j['Longitude']
        Lat = j['Latitude']
        with open('parkings.csv', 'a+', newline='', encoding='gb18030') as f:
            f_csv = csv.writer(f)
            f_csv.writerow([park_name, Lon, Lat])
            logging.info([park_name, Lon, Lat])

结果如下:

Python绘制地图神器folium介绍及安装使用教程

Python绘制地图神器folium介绍及安装使用教程

共有 3170 个停车场地理位置数据

2. folium地图可视化

import pandas as pd
import folium

# 读取csv数据
data = pd.read_csv('parkings.csv', encoding='gbk')
# 传入纬度和经度数据
park_map = folium.Map(location=[data['latitude'].mean(), data['longitude'].mean()], zoom_start=10, control_scale=True,)
# 实例化 folium.map.FeatureGroup 对象
incidents = folium.map.FeatureGroup()
for name,row in data.iterrows():
    incidents.add_child(
        folium.CircleMarker(            # CircleMarker表示花圆
            (row["latitude"], row["longitude"]),   # 每个停车场的经纬度坐标
            radius=7,                   # 圆圈半径
            color='#FF1493',            # 标志的外圈颜色
            fill=True,                  # 是否填充
            fill_color='#00FF00',       # 填充颜色
            fill_opacity=0.4            # 填充透明度
        )
    )

park_map.add_child(incidents)
park_map.save('park_map1.html')

效果如下:

Python绘制地图神器folium介绍及安装使用教程

这样看起来有点乱,下面我们来统计一下各个局域的停车场数量

import pandas as pd
import folium
from folium import plugins

data = pd.read_csv('parkings.csv', encoding='gbk')
park_map = folium.Map(location=[data['latitude'].mean(), data['longitude'].mean()], zoom_start=10, control_scale=True,)
marker_cluster = plugins.MarkerCluster().add_to(park_map)

for name,row in data.iterrows():
    folium.Marker(location=[row["latitude"], row["longitude"]]).add_to(marker_cluster)
park_map.save('park_map2.html')

效果如下:

Python绘制地图神器folium介绍及安装使用教程

这样能对各个局域停车场的数量在地图上进行统计,将图不断放大以后,还可以显示每个停车场的具体位置,非常方便。

来源:凹凸数据

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/209990.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • win10下pytorch-gpu安装以及CUDA详细安装过程

    win10下pytorch-gpu安装以及CUDA详细安装过程win10下pytorch-gpu安装以及CUDA详细安装过程1.Cuda的下载安装及配置首先我们要确定本机是否有独立显卡。在计算机-管理-设备管理器-显示适配器中,查看是否有独立显卡。可以看到本机有一个集成显卡和独立显卡NVIDIAGetForceGTX1050。接下来,测试本机独立显…

  • 手机号码正则表达式匹配

    手机号码正则表达式匹配正则表达式匹配手机号码最近在学习正则表达式,在这里写一个手机号码的匹配表达式手机号码的规则11位,第一位一定是1 第二位和第三位根据不同运营商的号码段有所区别,只有有限的组合是合法的手机号码 后8位可以是任意数字表达式^1(3[0-9]|5[0-3,5-9]|7[1-3,5-8]|8[0-9])\d{8}$解释:^:代表起始,即手机号码只能以1为开头3[0-9]:代表手机号码第二位可以是3,第三位可以是0-9中任意一个数字5[0-3,5-9]:代表手机号码第二位也可以是5,

  • nodejs写入json文件_json文件可以删除吗

    nodejs写入json文件_json文件可以删除吗哈喽!nodejs的文件系统,接触过node的对node的文件系统肯定不会陌生,这两天我就在思考一个问题,我是否可以在本地操作我的本地json文件,这样一个本地的文本数据库就有了,如果是便签之类,记录的软件,我完全可以不用连后台的数据库,我可以自己操作本地的json文件,自己用node写后台,答案是肯定的,下面我们就一起来实现一下吧,对本地json文件的增、删、改、查1.增首先我们先看一下…

    2022年10月12日
  • 浦发银行 信息科技岗 大数据方向 面经

    浦发银行 信息科技岗 大数据方向 面经浦发银行总行信息科技部(大数据方向)面试浦发银行总行信息科技部(大数据方向)面试8.6面试大家的面经浦发银行总行(上海)大数据岗8月6号面经一、综合面二、机试三、专业面试浦发面经即兴演讲上机测试结构化面试浦发银行大数据创新岗上海打卡第一部分综合面试第二部分专业面试第三部分上机考试(只有开发和测试岗需要,别的岗可选)浦发总行信息岗校招面经(上海…

  • APP推送系统工作原理

    APP推送系统工作原理一、传统APP架构下的信息传送APP主动向服务器请求数据,服务器被动的提供数据。步骤如下:然而,如果此时服务器又有了新的新闻,在用户没有主动刷新的情况下,服务器是不会主动推送给用户的。推送解决了这个困境,它让服务器主动连接APP,通知APP有了新的新闻,可以再请求。收到推送的APP(即使已关闭)又去服务器请求最新的新闻,用户就能看到了。二、实现推送的方法实现一个推送系统需要服务器端和…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号