博客
关于我
Python数据可视化:Cartopy 地理空间数据可视化
阅读量:634 次
发布时间:2019-03-14

本文共 4053 字,大约阅读时间需要 13 分钟。

前言

Cartopy 是为了向 Python 添加地图制图功能而开发的扩展库。该项目致力于以 matplotlib 包为基础,用简单直观的方式操作各类地理要素的成图。Cartopy 官网的画廊页面已经提供了很多绘图的例子,它们和官方文档一起,是学习该工具的主要材料。

绘制 IGS 站点分布图

本图使用的 IGS 核心站与 MGEX 项目站点,及其坐标均来自 IGS 网站。我已经将其整理成为 igs-core 和 mgex 两个 CSV 文件,你可以直接下载。

 

IGS 核心站与 MGEX 站点分布图

import numpy as npimport matplotlib.pyplot as pltimport cartopy.crs as ccrsimport cartopy.feature as cfeature# Load the coordinate of IGS Core & MGEX sites, The CSV files are# exported from: http://www.igs.org/networkigs_core = np.recfromcsv('igs-core.csv', names=True, encoding='utf-8')mgex = np.recfromcsv('mgex.csv', names=True, encoding='utf-8')fig = plt.figure(figsize=[9, 6])# Set projectionax = plt.axes(projection=ccrs.Robinson())# Add ocean and landax.add_feature(cfeature.LAND)ax.add_feature(cfeature.OCEAN)# Add MGEX & IGS core sitesax.plot(mgex['longitude'], mgex['latitude'], 'o', color='tomato',        label='MGEX', transform=ccrs.Geodetic())ax.plot(igs_core['longitude'], igs_core['latitude'], '*', color='darkmagenta',        label='IGS Core', transform=ccrs.Geodetic())# Plot gridlinesax.gridlines(linestyle='--')# Set figure extentax.set_global()# Set legend locationplt.legend(loc='lower right')# Show figureplt.show()

PS:如有需要Python学习资料的小伙伴可以加下方的群去找免费管理员领取

 

可以免费领取源码项目实战视频PDF文件

 

绘制 GNSS 控制网

这里使用的 IGS 站点坐标数据同样来自 IGS 网站。我已将其整理成一个 CSV 格式的文件:euro-igs,你可以直接下载使用。这里使用 matplotlib.tri 中的 Triangulation 来根据输入的点位坐标来创建 Delaunay 三角网,然后使用 plt.triplot() 方法绘制。

 

GNSS 控制网

import numpy as npimport matplotlib.pyplot as pltimport matplotlib.tri as triimport cartopy.crs as ccrsimport cartopy.feature as cfeature# Load coordinate of the IGS sites in Europe, this CSV file is# exported from: http://www.igs.org/networkigs_sites = np.recfromcsv('euro-igs.csv', names=True, encoding='utf-8')# Generate Delaunay trianglestriangles = tri.Triangulation(igs_sites['longitude'], igs_sites['latitude'])fig = plt.figure(figsize=[6, 8])# Set projectionax = plt.axes(projection=ccrs.LambertConformal(central_latitude=90,                                               central_longitude=10))# Add ocean, land, rivers and lakesax.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'))# Plot trianglesplt.triplot(triangles, transform=ccrs.Geodetic(), marker='o', linestyle='-')# Plot gridlinesax.gridlines(linestyle='--')# Set figure extentax.set_extent([-10, 30, 30, 73])# Show figureplt.show()

绘制板块分布图

板块构造理论将地球的岩石圈分为十数个大小不等的板块。本图使用的 Nuvel 板块边界数据来自 EarthByte 网站,我已经将其整理为一个压缩文件,你可以直接下载使用。

 

Nuvel 板块分布图

import numpy as npimport matplotlib.pyplot as pltimport cartopy.crs as ccrs# The plate boundary filesfiles = ['African.txt', 'Antarctic.txt', 'Arabian.txt', 'Australian.txt',         'Caribbean.txt', 'Cocos.txt', 'Eurasian.txt', 'Indian.txt', 'Juan.txt',         'Nazca.txt', 'North_Am.txt', 'Pacific.txt', 'Philippine.txt',         'Scotia.txt', 'South_Am.txt']# Read boundaries into numpyborders = []for f in files:    border = np.genfromtxt(f, names=['lon', 'lat'], dtype=float, comments=':')    borders.append(border)# Plate namesplates = ['African', 'Antarctic', 'Arabian', 'Australian', 'Caribbean', 'Cocos',          'Eurasian', 'Indian', 'Juan', 'Nazca', '  North\nAmerican', 'Pacific',          'Philippine', 'Scotia', '  South\nAmerican']# Central point for every plate, just for text positioningcentral = [(17, -5), (90, -80), (40, 21), (120, -28), (270, 12), (260, 6),           (60, 50), (70, 13), (230, 45), (260, -21), (250, 36), (190, 0),           (123, 17), (304, -59), (315, -27)]# Start plotfig = plt.figure(figsize=(12, 7))ax = plt.axes(projection=ccrs.Mollweide(central_longitude=120))# Plot a image as backgroundax.stock_img()# Plot boundariesfor plate, center, border in zip(plates, central, borders):    ax.plot(border['lon'], border['lat'], color='coral',            transform=ccrs.Geodetic())    ax.text(center[0], center[1], plate, transform=ccrs.Geodetic())plt.show()

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

以下文章来源于EasyShu ,作者姜英明

转载地址:http://rsioz.baihongyu.com/

你可能感兴趣的文章
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增加修改实时同步_使用JsonPath及自定义Python脚本_03---大数据之Nifi工作笔记0055
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_插入修改删除增量数据实时同步_通过分页解决变更记录过大问题_01----大数据之Nifi工作笔记0053
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表或全表增量同步_实现指定整库同步_或指定数据表同步配置_04---大数据之Nifi工作笔记0056
查看>>
NIFI1.23.2_最新版_性能优化通用_技巧积累_使用NIFI表达式过滤表_随时更新---大数据之Nifi工作笔记0063
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现update数据实时同步_实际操作05---大数据之Nifi工作笔记0044
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现数据实时delete同步_实际操作04---大数据之Nifi工作笔记0043
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_生成插入Sql语句_实际操作02---大数据之Nifi工作笔记0041
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_03_来吧用NIFI实现_数据分页获取功能---大数据之Nifi工作笔记0038
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_不带分页处理_01_QueryDatabaseTable获取数据_原0036---大数据之Nifi工作笔记0064
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_无分页功能_02_转换数据_分割数据_提取JSON数据_替换拼接SQL_添加分页---大数据之Nifi工作笔记0037
查看>>
NIFI从Oracle11G同步数据到Mysql_亲测可用_解决数据重复_数据跟源表不一致的问题---大数据之Nifi工作笔记0065
查看>>
NIFI从PostGresql中离线读取数据再导入到MySql中_带有数据分页获取功能_不带分页不能用_NIFI资料太少了---大数据之Nifi工作笔记0039
查看>>
nifi使用过程-常见问题-以及入门总结---大数据之Nifi工作笔记0012
查看>>
NIFI分页获取Mysql数据_导入到Hbase中_并可通过phoenix客户端查询_含金量很高的一篇_搞了好久_实际操作05---大数据之Nifi工作笔记0045
查看>>
NIFI分页获取Postgresql数据到Hbase中_实际操作---大数据之Nifi工作笔记0049
查看>>
NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
查看>>
NIFI同步MySql数据源数据_到原始库hbase_同时对数据进行实时分析处理_同步到清洗库_实际操作06---大数据之Nifi工作笔记0046
查看>>
Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
查看>>