小白学习cartopy画地图的第一天(中国行政区域图,含南海)

小白学习cartopy画地图的第一天(中国行政区域图,含南海)

这是地图小白的我学习用cartopy画地图的第一天,慢慢摸索慢慢学习,一步一步学会使用cartopy。后面会持续更新。其中很多是从各个博主公众号中学习来的知识,难免雷同,在此先感谢(公众号:气象学家)
在这里插入图片描述

第一步是安装cartopy

这一步我不再说明了,作者也是尝试了很多方法,pip了半天,年轻人最后还是认怂了,建议大家安装方式为anaconda然后转化为国内镜像源安装,简直不要太简单,一条命令就够了,收起年轻人的那点小倔强,比如我。
这里强调一下地图包的问题,安装完cartopy后可以直接使用,但是自带地图包它会在使用的时候下载,这样很慢,所以作者建议提前找离线的下载好,放进正确的路径就好了,(离线地图包很多地方可以找到,要是没用,下方评论区留下你的百度网盘地址,作者发给你),地图存放位置为C:\Users\Administrator.local\share\cartopy\shapefiles\natural_earth\physical
作者也是找了很久才找到的。

第二步下载正确的中国行政区边界

老外坏得很,如果只用cartopy自带地图画国界,会发现很多边边角角是错的,所以需要下载咱们自己的行政区边界
网址是:*https://gmt-china.org/data/*下载里面的CN-border-La.dat,如果还有错误请及时告知作者,作者也是小白,立马删帖。文件也可以找作者要(下方评论区留下你的百度网盘地址,作者发给你

第三步可以开始画图了

导入库

import numpy as np
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature

这一步就不讲了

读取CN-border-La.dat文件

with open('CN-border-La.dat') as src:context = src.read()blocks = [cnt for cnt in context.split('>') if len(cnt) > 0]borders = [np.fromstring(block, dtype=float, sep=' ') for block in blocks]

这一步是读取CN-border-La.da文件,目的是读取里面每个点的经纬度,用于给底图加上行政边界

设置画图参数

fig = plt.figure(figsize=[8, 8])
ax = plt.axes(projection=ccrs.LambertConformal(central_latitude=90,central_longitude=105))

这一步是设置画图参数,和matplotlib画图没区别,解释一下其中几个参数的含义,说白了就是利用兰伯特投影方式画地图
projection:投影
LambertConformal:兰伯特投影
central_latitude:中央纬度
central_longitude:中央经度

画海洋、陆地、河流、湖泊

ax.add_feature(cfeature.OCEAN.with_scale('50m'))
ax.add_feature(cfeature.LAND.with_scale('50m'))
ax.add_feature(cfeature.RIVERS.with_scale('50m'))
ax.add_feature(cfeature.LAKES.with_scale('50m'))

这里利用的是cartopy自带的地图,分辨率50米,大概就是这个意思,我猜的,嘿嘿,不影响画图,当你看到离线地图包的时候就会发现还有10m,和110m的,共三种。

画国界

for line in borders:ax.plot(line[0::2], line[1::2], '-', color='gray',transform=ccrs.Geodetic())

这里就用到了当时上面文件里面的坐标点了,其实就是用点画线,line[0::2]就是X,line[1::2]就是Y,就是用xy画平面图,这样解释是否理解,有兴趣的可以print()一下就明白了,一组是经度,一组是纬度

画经纬度

ax.gridlines(linestyle='--')

其实就是画网格线

设置区域

ax.set_extent([80, 130, 13, 55])

咱们画出来的是世界地图,这个来框处要显示的区域,经度80-130,纬度13-55,事实发现不是很匹配,不过大致也差不多,框出来的就是咱大中国,南海还不够,下面讲

画南海

sub_ax = fig.add_axes([0.741, 0.11, 0.14, 0.155],                      projection=ccrs.LambertConformal(central_latitude=90,central_longitude=115))
sub_ax.add_feature(cfeature.OCEAN.with_scale('50m'))
sub_ax.add_feature(cfeature.LAND.with_scale('50m'))
sub_ax.add_feature(cfeature.RIVERS.with_scale('50m'))
sub_ax.add_feature(cfeature.LAKES.with_scale('50m'))
for line in borders:sub_ax.plot(line[0::2], line[1::2], '-', color='gray',transform=ccrs.Geodetic())
sub_ax.set_extent([105, 125, 0, 25])

画南海我就不赘述了,因为和上面方法一样,无非就是再加一个ax然后画

显示地图

plt.show()

这个不用解释了吧
在这里插入图片描述

完整代码

import numpy as np
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature#读取CN-border-La.dat文件
with open('CN-border-La.dat') as src:context = src.read()blocks = [cnt for cnt in context.split('>') if len(cnt) > 0]borders = [np.fromstring(block, dtype=float, sep=' ') for block in blocks]
#设置画图各种参数
fig = plt.figure(figsize=[8, 8])
# 设置投影类型和经纬度
ax = plt.axes(projection=ccrs.LambertConformal(central_latitude=90,central_longitude=105))
# 画海,陆地,河流,湖泊
ax.add_feature(cfeature.OCEAN.with_scale('50m'))
ax.add_feature(cfeature.LAND.with_scale('50m'))
ax.add_feature(cfeature.RIVERS.with_scale('50m'))
ax.add_feature(cfeature.LAKES.with_scale('50m'))
# 画国界
for line in borders:ax.plot(line[0::2], line[1::2], '-', color='gray',transform=ccrs.Geodetic())
# 画经纬度网格
ax.gridlines(linestyle='--')
# 框出区域
ax.set_extent([80, 130, 13, 55])
# 画南海,这一步是新建一个ax,设置投影
sub_ax = fig.add_axes([0.741, 0.11, 0.14, 0.155],projection=ccrs.LambertConformal(central_latitude=90,central_longitude=115))
# 画海,陆地,河流,湖泊
sub_ax.add_feature(cfeature.OCEAN.with_scale('50m'))
sub_ax.add_feature(cfeature.LAND.with_scale('50m'))
sub_ax.add_feature(cfeature.RIVERS.with_scale('50m'))
sub_ax.add_feature(cfeature.LAKES.with_scale('50m'))
# 画边界
for line in borders:sub_ax.plot(line[0::2], line[1::2], '-', color='gray',transform=ccrs.Geodetic())
# 框区域
sub_ax.set_extent([105, 125, 0, 25])
# 显示
plt.show()

最后如果地图有错请各位仁兄一定要告诉我

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

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

相关文章

《canvas画图》

抽了一些时间写些笔记。 矩形&#xff1a; code: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>canvas {border: thin solid black;}body > * {float: left;}…

这是Meta版ChatGPT雏形?开源、一块GPU就能跑,1/10参数量打败GPT-3

视学算法报道 编辑&#xff1a;张倩、蛋酱 具有 130 亿参数的 LLaMA 模型「在大多数基准上」可以胜过 GPT-3&#xff08; 参数量达1750 亿&#xff09;&#xff0c;而且可以在单块V100 GPU上运行。 千亿、万亿参数的超大模型需要有人研究&#xff0c;十亿、百亿参数的大模型同样…

如何使用 Flink SQL 探索 GitHub 数据集|Flink-Learning 实战营

作者&#xff5c;王洪顺&#xff08;弘舜&#xff09; 为进一步帮助开发者学习使用 Flink&#xff0c;Apache Flink 中文社区近期发起 Flink-Learning 实战营项目。本次实战营通过真实有趣的实战场景帮助开发者实操体验 Flink&#xff0c;课程包括实时数据接入、实时数据分析、…

Amazon SPAPI By Postman 操作

I. 介绍 在论坛和群里仍然还有很多小伙伴对poatman操作有很多不熟悉的&#xff0c;而每次开case的时候&#xff0c;官网支持人员要求提供postman的Request Info and Response Info&#xff0c;或者自己调试的时候想要快速调用接口出结果&#xff0c;使用http工具无疑是很大的帮…

ChatGPT文本框再次升级,打造出新型操作系统

在ChatGPT到来之前&#xff0c;没有谁能够预见。但是&#xff0c;它最终还是来了&#xff0c;并引起了不小的轰动&#xff0c;甚至有可能颠覆整个行业。 从某种程度上说&#xff0c;ChatGPT可能是历史上增长最快的应用程序&#xff0c;仅在两个多月就拥有了1亿多活跃用户&…

马云回国还谈ChatGPT:人类不应被人工智能所控制

雷递网 乐天 3月27日 阿里巴巴创始人马云日前现身杭州云谷&#xff0c;和校园长们进行交流。这也意味着马云已经回到国内。 此次活动中&#xff0c;校园长们说&#xff0c;云谷从创校以来&#xff0c;一直在探索如何在人工智能快速发展的时代为孩子提供面向未来的教育。 马云说…

程序员再“整活”,在 Dos 上也能玩 ChatGPT 客户端!

编译 | 苏宓 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 如果撇开科技大厂的业务线不谈&#xff0c;我们还可以用 ChatGPT、GPT-4 来干什么&#xff1f;除了逗趣、生成代码、聊天之外&#xff0c;这届网友已经尝试雇佣了 GPT-4 当老板&#xff0c;开启从零的创…

50倍效率!600+AI工具、3000+AI提示艺术,《AIGC万能工具包》助你职场效率起飞

众所周知&#xff0c;2023年是AI元年。 以ChatGPT为例&#xff0c;AI能帮你定目标、写文案&#xff0c;列提纲、找数据&#xff0c;甚至还能帮你做到想不到的事情…… 对不同行业的职场人士来说&#xff0c;它绝对是一个省力气&#xff0c;省时间&#xff0c;能大幅度提升工作产…

阿里、百度、值得买齐发声,电商的“AIGC式”进化

配图来自Canva可画 一年一度618要来了&#xff0c;和往年一样折扣力度、明星直播等话题被炒得火热&#xff0c;不同的是今年618的科技属性更强。 究其原因&#xff0c;过去半年AIGC技术被电商平台应用到实际运营中&#xff0c;“AIGC选品”、“虚拟货场”、“智能客服”成为电商…

运营er们,AIGC来了!你们怕不怕?

微软已官宣将ChatGPT整合到Bing搜索和Edge浏览器之中&#xff0c;它能根据聊天的上下文进行互动&#xff0c;真正像人类一样来聊天交流&#xff0c;运营er们甚至能用它完成撰写邮件、视频脚本、文案、翻译、代码等任务&#xff01; AIGC爆火 不仅可以提高我们工作效率 而且也可…

ChatGPT超级智能体改写人类未来的宇宙大冒险!|小智ai

ChatGPT丨小智ai丨chatgpt丨人工智能丨OpenAI丨聊天机器人丨AI语音助手丨GPT-3.5丨开源AI平台 ChatGPT&#xff0c;这个惊世骇俗的超级智能体&#xff0c;正在以惊人的速度改写着人类的未来&#xff0c;引领我们进入一场前所未有的宇宙大冒险&#xff01;准备好了吗&#xff1f…

大模型“图纸”已现,火山方舟开工

文丨刘雨琦 编丨王一粟 中国房子盖了2000年&#xff0c;直至汉朝初期&#xff0c;才开始出现“建筑图纸”。 有了图纸后&#xff0c;盖房子便不仅仅依赖于几个“老师傅”&#xff0c;图纸是全盘的指导&#xff0c;避免了曾经多次的推倒重建以及因为力学结构不合理而半途而废…

推荐一个开源数据同步神器,支持多种数据源和预警功能!

DBSyncer是一款开源的数据同步中间件&#xff0c;提供MySQL、Oracle、SqlServer、PostgreSQL、Elasticsearch(ES)、Kafka、File、SQL等同步场景。 支持上传插件自定义同步转换业务&#xff0c;提供监控全量和增量数据统计图、应用性能预警等。 特点&#xff1a; 组合驱动&#…

Java 17 采用率在一年内增长 430% !

出品 | OSC开源社区&#xff08;ID&#xff1a;oschina2013) New Relic 最新发布了一份 “2023 年 Java 生态系统状况报告”&#xff0c;旨在提供有关当今 Java 生态系统状态的背景和见解。该报告基于从数百万个提供性能数据的应用程序中收集的数据&#xff0c;对生产中使用最多…

简单的数据库连接与提供前端接口

前言&#xff1a; 本文浅浅讲解一下&#xff0c;使用多种软件共同开发一个java工程。 这是我在windows系统上跑成功的一次设计&#xff1a; 逻辑图如下&#xff1a; 一&#xff1a;所需软件和版本。 idea&#xff0c;maven&#xff0c;jdk&#xff0c;git&#xff0c;jenki…

免费“白嫖” GPT-4 方法 +1, 开发者锐评:跟“偷”有什么区别?

整理 | 郑丽媛、出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 前不久&#xff0c;可“白嫖” GPT-4 的 Forefront Chat 吸引了众多关注&#xff0c;导致该网站一度崩溃&#xff0c;也令不少人发出疑问&#xff1a;“GPT-4 这么贵&#xff0c;为什么它能免费让我…

chatgpt赋能python:免费Python软件——学习和开发的首选工具

免费Python软件——学习和开发的首选工具 Python是一门高级编程语言&#xff0c;流行于数据科学、机器学习、自然语言处理等领域。但是&#xff0c;许多初学者和开发者因为高昂的学习和购买成本而退缩。然而&#xff0c;免费的Python软件正在帮助更多人轻松学习和开发Python程…

chatgpt赋能python:免费的Python编程软件:开发者必备工具!

免费的Python编程软件&#xff1a;开发者必备工具&#xff01; Python是一门广受欢迎的编程语言&#xff0c;它已经成为了很多公司和开发者的首选语言。Python的出现改变了编程的方式&#xff0c;它具有简单、易懂、易读、易写、易拓展等特点&#xff0c;因此成为了很多新手入…

写 bug 速度提升200%!吊爆的 IDEA 使用技巧

来源&#xff1a;blog.xiaohansong.com/idea-live-templates.html 今天分享一篇idea技巧&#xff0c;让我们少写一些重复代码&#xff0c;提高效率~ 背景 Java 开发过程经常需要编写有固定格式的代码&#xff0c;例如说声明一个私有变量&#xff0c;logger或者bean等等。对于这…

chatgpt赋能Python-python886

Python886&#xff1a;一款优秀的Python IDE 作为一款Python开发的强大IDE&#xff0c;Python886 绝对不会让您失望。Python886 是 Python 编程语言的一个集成开发环境&#xff08;IDE&#xff09;&#xff0c;支持C、C、Python、PHP、Ruby、Perl等多种编程语言。Python886 具…