如何利用Python快速绘制海报级别地图详解

文章目录

  • 1 简介
  • 2 利用prettymaps快速制作海报级地图
      • 2.1 prettymaps的几种使用方式
        • 2.1.1 圆形模式
        • 2.1.2 圆角矩形模式
        • 2.1.3 添加文字内容
      • 关于Python技术储备
        • 一、Python所有方向的学习路线
        • 二、Python基础学习视频
        • 三、精品Python学习书籍
        • 四、Python工具包+项目源码合集
        • ①Python工具包
        • ②Python实战案例
        • ③Python小游戏源码
        • 五、面试资料
        • 六、Python兼职渠道


1 简介


基于Python中诸如matplotlib等功能丰富、自由度极高的绘图库,我们可以完成各种极富艺术感的可视化作品,关于这一点我在系列文章在模仿中精进数据可视化中已经带大家学习过很多案例了。

而今天我要给大家介绍的这个Python库prettymaps非常的有趣,基于它,我们只需要简单的代码就可以对地球上给定坐标和范围的任意地区进行地图可视化😋。

2 利用prettymaps快速制作海报级地图


遗憾的是,prettymaps暂时还不能通过pip或conda直接进行安装,但可以利用pip配合git从源码仓库进行安装,对于国内的用户来说,可以使用下面的语句从github的镜像地址快速安装:

pip install git+https://hub.fastgit.org/marceloprates/prettymaps.git

安装完成后,如果下面的语句执行无误,那么恭喜你已经安装完成:

from prettymaps import \*

2.1 prettymaps的几种使用方式

prettymaps无需用户自行准备数据,会根据用户设定的坐标和范围大小来自动从OpenStreetMap上获取相应范围内的矢量数据作为绘图素材,主要有以下几种使用方式:

2.1.1 圆形模式

prettymaps中最简单的绘图模式为圆形模式,我们只需要传入中心点经纬度坐标,以及半径范围(单位:米)即可,下面的例子来自官方示例程序,我将其地点换成以上海外滩为中心向外2500米范围:

from prettymaps import \*
from matplotlib import pyplot as plt# 创建图床
fig, ax = plt.subplots(figsize = (12, 12), constrained\_layout = True)layers = plot((31.23346, 121.492154), # 圆心坐标,格式:(纬度, 经度)radius = 2500, # 半径ax = ax, # 绑定图床layers = {'perimeter': {}, # 控制绘图模式,{}即相当于圆形绘图模式# 下面的参数用于定义从OsmStreetMap选择获取的矢量图层要素,不了解的无需改动照搬即可'streets': {'custom\_filter': '\["highway"~"motorway|trunk|primary|secondary|tertiary|residential|service|unclassified|pedestrian|footway"\]','width': {'motorway': 5,'trunk': 5,'primary': 4.5,'secondary': 4,'tertiary': 3.5,'residential': 3,'service': 2,'unclassified': 2,'pedestrian': 2,'footway': 1,}},'building': {'tags': {'building': True, 'landuse': 'construction'}, 'union': False},'water': {'tags': {'natural': \['water', 'bay'\]}},'green': {'tags': {'landuse': 'grass', 'natural': \['island', 'wood'\], 'leisure': 'park'}},'forest': {'tags': {'landuse': 'forest'}},'parking': {'tags': {'amenity': 'parking', 'highway': 'pedestrian', 'man\_made': 'pier'}}},# 下面的参数用于定义OpenStreetMap中不同矢量图层的样式,嫌麻烦的直接照抄下面的官方示例即可drawing\_kwargs = {'background': {'fc': '#F2F4CB', 'ec': '#dadbc1', 'hatch': 'ooo...', 'zorder': -1},'perimeter': {'fc': '#F2F4CB', 'ec': '#dadbc1', 'lw': 0, 'hatch': 'ooo...',  'zorder': 0},'green': {'fc': '#D0F1BF', 'ec': '#2F3737', 'lw': 1, 'zorder': 1},'forest': {'fc': '#64B96A', 'ec': '#2F3737', 'lw': 1, 'zorder': 1},'water': {'fc': '#a1e3ff', 'ec': '#2F3737', 'hatch': 'ooo...', 'hatch\_c': '#85c9e6', 'lw': 1, 'zorder': 2},'parking': {'fc': '#F2F4CB', 'ec': '#2F3737', 'lw': 1, 'zorder': 3},'streets': {'fc': '#2F3737', 'ec': '#475657', 'alpha': 1, 'lw': 0, 'zorder': 3},'building': {'palette': \['#FFC857', '#E9724C', '#C5283D'\], 'ec': '#2F3737', 'lw': .5, 'zorder': 4},},osm\_credit = {'color': '#2F3737'}
)# 导出图片文件
plt.savefig('上海外滩-圆形模式.png', dpi=500)

2.1.2 圆角矩形模式

除了上述的圆形模式之外,prettymaps中还可以使用圆角矩形模式,同样需要定义中心点坐标和半径,接着为参数layers下的每个键值对添加键值对{‘circle’: False, ‘dilate’: 圆角半径}即可,其中圆角半径为数值型,这次我们换一个地方,以故宫为例,半径选择600米:

\# 创建图床
fig, ax = plt.subplots(figsize = (12, 12), constrained\_layout = True)dilate = 100layers = plot((39.91645697864148, 116.39077532493388), # 圆心坐标,格式:(纬度, 经度)radius = 600, # 半径ax = ax, # 绑定图床layers = {'perimeter': {'circle': False, 'dilate': dilate}, # 控制绘图模式,{}即相当于圆形绘图模式# 下面的参数用于定义从OsmStreetMap选择获取的矢量图层要素,不了解的无需改动照搬即可'streets': {'custom\_filter': '\["highway"~"motorway|trunk|primary|secondary|tertiary|residential|service|unclassified|pedestrian|footway"\]','width': {'motorway': 5,'trunk': 5,'primary': 4.5,'secondary': 4,'tertiary': 3.5,'residential': 3,'service': 2,'unclassified': 2,'pedestrian': 2,'footway': 1,},'circle': False, 'dilate': dilate},'building': {'tags': {'building': True, 'landuse': 'construction'}, 'union': False, 'circle': False, 'dilate': dilate},'water': {'tags': {'natural': \['water', 'bay'\]}, 'circle': False, 'dilate': dilate},'green': {'tags': {'landuse': 'grass', 'natural': \['island', 'wood'\], 'leisure': 'park'}, 'circle': False, 'dilate': dilate},'forest': {'tags': {'landuse': 'forest'}, 'circle': False, 'dilate': dilate},'parking': {'tags': {'amenity': 'parking', 'highway': 'pedestrian', 'man\_made': 'pier'}, 'circle': False, 'dilate': dilate}},# 下面的参数用于定义OpenStreetMap中不同矢量图层的样式,嫌麻烦的直接照抄下面的官方示例即可drawing\_kwargs = {'background': {'fc': '#F2F4CB', 'ec': '#dadbc1', 'hatch': 'ooo...', 'zorder': -1},'perimeter': {'fc': '#F2F4CB', 'ec': '#dadbc1', 'lw': 0, 'hatch': 'ooo...',  'zorder': 0},'green': {'fc': '#D0F1BF', 'ec': '#2F3737', 'lw': 1, 'zorder': 1},'forest': {'fc': '#64B96A', 'ec': '#2F3737', 'lw': 1, 'zorder': 1},'water': {'fc': '#a1e3ff', 'ec': '#2F3737', 'hatch': 'ooo...', 'hatch\_c': '#85c9e6', 'lw': 1, 'zorder': 2},'parking': {'fc': '#F2F4CB', 'ec': '#2F3737', 'lw': 1, 'zorder': 3},'streets': {'fc': '#2F3737', 'ec': '#475657', 'alpha': 1, 'lw': 0, 'zorder': 3},'building': {'palette': \['#FFC857', '#E9724C', '#C5283D'\], 'ec': '#2F3737', 'lw': .5, 'zorder': 4},},osm\_credit = {'color': '#2F3737'}
)# 导出图片文件
plt.savefig('北京故宫-圆角矩形模式.png', dpi=500)

2.1.3 添加文字内容

有了这样美观大方的艺术地图,我们还可以基于matplotlib中自定义字体的方法,在地图上添加标注信息,仍然以上海外滩为例,我们利用外部的书法字体,在正中心绘制文字标注信息:

import matplotlib.font\_manager as fm# 创建图床
fig, ax = plt.subplots(figsize = (12, 12), constrained\_layout = True)layers = plot((31.23346, 121.492154), # 圆心坐标,格式:(纬度, 经度)radius = 2500, # 半径ax = ax, # 绑定图床layers = {'perimeter': {}, # 控制绘图模式,{}即相当于圆形绘图模式# 下面的参数用于定义从OsmStreetMap选择获取的矢量图层要素,不了解的无需改动照搬即可'streets': {'custom\_filter': '\["highway"~"motorway|trunk|primary|secondary|tertiary|residential|service|unclassified|pedestrian|footway"\]','width': {'motorway': 5,'trunk': 5,'primary': 4.5,'secondary': 4,'tertiary': 3.5,'residential': 3,'service': 2,'unclassified': 2,'pedestrian': 2,'footway': 1,}},'building': {'tags': {'building': True, 'landuse': 'construction'}, 'union': False},'water': {'tags': {'natural': \['water', 'bay'\]}},'green': {'tags': {'landuse': 'grass', 'natural': \['island', 'wood'\], 'leisure': 'park'}},'forest': {'tags': {'landuse': 'forest'}},'parking': {'tags': {'amenity': 'parking', 'highway': 'pedestrian', 'man\_made': 'pier'}}},# 下面的参数用于定义OpenStreetMap中不同矢量图层的样式,嫌麻烦的直接照抄下面的官方示例即可drawing\_kwargs = {'background': {'fc': '#F2F4CB', 'ec': '#dadbc1', 'hatch': 'ooo...', 'zorder': -1},'perimeter': {'fc': '#F2F4CB', 'ec': '#dadbc1', 'lw': 0, 'hatch': 'ooo...',  'zorder': 0},'green': {'fc': '#D0F1BF', 'ec': '#2F3737', 'lw': 1, 'zorder': 1},'forest': {'fc': '#64B96A', 'ec': '#2F3737', 'lw': 1, 'zorder': 1},'water': {'fc': '#a1e3ff', 'ec': '#2F3737', 'hatch': 'ooo...', 'hatch\_c': '#85c9e6', 'lw': 1, 'zorder': 2},'parking': {'fc': '#F2F4CB', 'ec': '#2F3737', 'lw': 1, 'zorder': 3},'streets': {'fc': '#2F3737', 'ec': '#475657', 'alpha': 1, 'lw': 0, 'zorder': 3},'building': {'palette': \['#FFC857', '#E9724C', '#C5283D'\], 'ec': '#2F3737', 'lw': .5, 'zorder': 4},},osm\_credit = {'color': '#2F373700'}
)# 添加文字标注
ax.text(0.5, 0.5,'外滩, 上海',zorder = 6,ha='center',va='center',fontsize=120,fontproperties = fm.FontProperties(fname='FZZJ-HLYHXSJW.TTF'),transform=ax.transAxes
)# 导出图片文件
plt.savefig('上海外滩-添加文字标注.png', dpi=500)

你可以找到你关注地点的经纬度坐标,尽情地绘制出各种艺术地图作品,譬如下面这些地标:


关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,希望提供给想学习 Python 的小伙伴们一点帮助!

保存图片微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

二、Python基础学习视频

② 路线对应学习视频

还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~在这里插入图片描述
在这里插入图片描述

③练习题

每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
在这里插入图片描述
因篇幅有限,仅展示部分资料

三、精品Python学习书籍

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
在这里插入图片描述

四、Python工具包+项目源码合集
①Python工具包

学习Python常用的开发软件都在这里了!每个都有详细的安装教程,保证你可以安装成功哦!
在这里插入图片描述

②Python实战案例

光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。100+实战案例源码等你来拿!
在这里插入图片描述

③Python小游戏源码

如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!
在这里插入图片描述

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述

六、Python兼职渠道

而且学会Python以后,还可以在各大兼职平台接单赚钱,各种兼职渠道+兼职注意事项+如何和客户沟通,我都整理成文档了。
在这里插入图片描述
在这里插入图片描述
这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以保存图片微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/257466.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

吐血整理几款常见的录屏软件,收藏起来!

录屏软件在我们日常工作和生活中扮演着越来越重要的角色,无论是帮助我们记录屏幕操作,还是制作教学视频或演示文稿,都离不开这些优秀的录屏软件。在市场上有许多不同的录屏软件可供选择,今天小编吐血整理了几款常见且受欢迎的录屏…

智能机器人客服推荐方案

智能机器人客服已经成为了许多企业提升客服工作效率以及让客户体验感变好的重要工具。如果你正在寻找一种可以让你的客服工作变得更加高效、让你的企业业务上一个台阶的解决方案,往下看,我告诉你要选择怎样的客服系统,再给你介绍一款可能会适…

Linux内核上游提交完整流程及示例

参考博客文章: 向linux内核提交代码 - 知乎 一、下载Linux内核源码 通过git下载Linux内核源码,具体命令如下: git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 实际命令及结果如下: penghaoDin…

pymol使用

1.pymol使用小技巧8-选取配体周围氨基酸 select ligand,resn x[/code] PS: x为配体名字 color red, ligand[/code] select 5A, byres ligand around 5[/code] PS: 配体5埃范围内的残基 show sticks, 5A color yellow, …

第75讲:MySQL数据库MVCC多版本并发控制核心概念以及底层原理

文章目录 1.当前读与快照读的基本概念1.1.当前读的基本概念1.2.快照读的基本概念 2.什么是MVCC多版本并发控制3.MVCC多版本并发控制依赖的三个组件重要概念3.1.MySQL表中三个隐式字段的概念3.2.undo log日志以及版本链的概念3.3.ReadView读视图的概念 4.MVCC实现多版本并发控制…

1+x网络系统建设与运维(中级)-练习题4

一.设备命名 LSW1 <Huawei>sys [Huawei]sysn LSW1 [LSW1]un in en 同理可得&#xff0c;给所有设备如以上命令一样配置 二.VLAN LSW1 [LSW1]vlan ba 1 10 20 100 [LSW1]int g0/0/1 [LSW1-GigabitEthernet0/0/1]port link-type trunk [LSW1-GigabitEthernet0/0/1]port tru…

【AIGC】大语言模型的采样策略--temperature、top-k、top-p等

总结如下&#xff1a; 图片链接 参考 LLM解码-采样策略串讲 LLM大模型解码生成方式总结 LLM探索&#xff1a;GPT类模型的几个常用参数 Top-k, Top-p, Temperature

如何用虚拟数字人直播软件,制作自己的数字人?

在当今短视频直播时代&#xff0c;越来越多的用户开始关注和使用虚拟数字人直播软件。虚拟数字人克隆软件技术备受瞩目&#xff0c;它真正为我们做到了降本增效的效果&#xff0c;减少主播人工成本的同时还可以24小时不间断的直播带货这为商家带来了前所未有的经济效益。现如今…

配置Smart Link主备备份示例

Smart Link和Monitor Link简介 定义 Smart Link&#xff0c;又叫做备份链路。一个Smart Link由两个接口组成&#xff0c;其中一个接口作为另一个的备份。Smart Link常用于双上行组网&#xff0c;提供可靠高效的备份和快速的切换机制。 Monitor Link是一种接口联动方案&#…

【Java】你掌握了多线程吗?

【文末送书】今天推荐一本Java多线程编程领域新书《一本书讲透Java线程》 摘要 互联网的每一个角落&#xff0c;无论是大型电商平台的秒杀活动&#xff0c;社交平台的实时消息推送&#xff0c;还是在线视频平台的流量洪峰&#xff0c;背后都离不开多线程技术的支持。在数字化转…

如何将微服务注册到nacos服务上

首先可在maven的父工程的pom文件中添加maven的dependencyManagement标签&#xff0c;引入spring-cloud-alibaba-dependencies坐标 <properties><spring.cloud.alibaba.version>2.2.9.RELEASE</spring.cloud.alibaba.version></properties><!-- 管理…

python圣诞树代码编程

以下是一个简单的Python圣诞树代码&#xff1a; def draw_tree(height): for i in range(height): print( * (height - i - 1) * * (2 * i 1)) print( * (height - 1) |)draw_tree(10) 这个函数会绘制一个等腰三角形&#xff0c;其中每一行的星号数量从1开…