温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

python怎么绘制中国地图

发布时间:2021-11-26 11:57:48 阅读:817 作者:iii 栏目:大数据
Python开发者专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

这篇文章主要讲解了“python怎么绘制中国地图”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python怎么绘制中国地图”吧!

前言

气象、海洋、地球科学相关的分析必然少不了地图的可视化。
Python中我常用的绘制地图和空间信息分析的库是Cartopy。
Cartopy有一个非常严重的问题,那就是自带的中国国界数据有问题,这也是很多国外开源库的普遍问题。
在做中国区域的分析时,由于九段线的位置很偏南,因此最标准的做法是同时绘制南海区域的子图。
在做一些站点展示的时候,如果只单独画上几个站点总觉得很丑,可以加上一些地形背景。

综上,今天想要用一个小例子解决这3个问题:

  1. 正确的中国国界线及九段线绘制
  2. 南海小地图绘制
  3. 全球地形图添加
 

准备工作

  1. 获取正确的中国矢量文件:公众号后台留言“中国行政区划”    
    (这个矢量文件来自资源环境平台,并和权威机构的标准地图做了比对,吻合一致。)
  2. 获取全球地形图像:公众号后台留言“全球地形”    
    (提供的是全球50m分辨率的tif图,如果对分辨率要求不高可以直接使用stock_img())
 

代码

# -*- coding: utf-8 -*-import numpy as npimport pandas as pdimport cartopyimport cartopy.crs as ccrsimport cartopy.feature as cfeatfrom cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTERfrom cartopy.io.shapereader import Reader, natural_earthimport matplotlib.pyplot as pltimport matplotlib.ticker as mtickerfrom matplotlib.image import imreaddef create_map():    shp_path = './cn_shp/Province_9/'    # --创建画图空间    proj = ccrs.PlateCarree()  # 创建坐标系    fig = plt.figure(figsize=(68), dpi=400)  # 创建页面    ax = fig.subplots(11, subplot_kw={'projection': proj})      # --设置地图属性    provinces = cfeat.ShapelyFeature(        Reader(shp_path + 'Province_9.shp').geometries(),        proj, edgecolor='k',        facecolor='none'    )    # 加载省界线    ax.add_feature(provinces, linewidth=0.6, zorder=2)    # 加载分辨率为50的海岸线    ax.add_feature(cfeat.COASTLINE.with_scale('50m'), linewidth=0.6, zorder=10)    # 加载分辨率为50的河流~    ax.add_feature(cfeat.RIVERS.with_scale('50m'), zorder=10)     # 加载分辨率为50的湖泊    ax.add_feature(cfeat.LAKES.with_scale('50m'), zorder=10)    ax.set_extent([1051331545])    # ax.stock_img()    ax.imshow(        imread('./NE1_50M_SR_W.tif'),        origin='upper',        transform=proj,        extent=[-180180, -9090]    )    # --设置网格点属性    gl = ax.gridlines(        crs=ccrs.PlateCarree(),        draw_labels=True,        linewidth=1.2,        color='k',        alpha=0.5,        linestyle='--'    )    gl.xlabels_top = False  # 关闭顶端的经纬度标签    gl.ylabels_right = False  # 关闭右侧的经纬度标签    gl.xformatter = LONGITUDE_FORMATTER  # x轴设为经度的格式    gl.yformatter = LATITUDE_FORMATTER  # y轴设为纬度的格式    gl.xlocator = mticker.FixedLocator(np.arange(95145 + 55))    gl.ylocator = mticker.FixedLocator(np.arange(-545 + 55))    # --设置小地图    left, bottom, width, height = 0.670.150.230.27    ax2 = fig.add_axes(        [left, bottom, width, height],         projection=proj    )    ax2.add_feature(provinces, linewidth=0.6, zorder=2)    ax2.add_feature(cfeat.COASTLINE.with_scale('50m'), linewidth=0.6, zorder=10)    ax2.add_feature(cfeat.RIVERS.with_scale('50m'), zorder=10)    ax2.add_feature(cfeat.LAKES.with_scale('50m'), zorder=10)    ax2.set_extent([105125025])    # ax2.stock_img()    ax2.imshow(        imread('./NE1_50M_SR_W.tif'),        origin='upper',        transform=proj,        extent=[-180180, -9090]    )    return axdef main():    ax = create_map()    title = f'distribution of station around China'    ax.set_title(title, fontsize=18)    df = pd.read_csv('buyo_position.csv')    df['lon'] = df['lon'].astype(np.float64)    df['lat'] = df['lat'].astype(np.float64)    ax.scatter(        df['lon'].values,        df['lat'].values,        marker='o',        s=10 ,        color ="blue"    )    for i, j, k in list(zip(df['lon'].values, df['lat'].values, df['name'].values)):        ax.text(i - 0.8, j + 0.2, k, fontsize=6)    plt.savefig('station_distribute_map.png')if __name__ == '__main__':    main()    

感谢各位的阅读,以上就是“python怎么绘制中国地图”的内容了,经过本文的学习后,相信大家对python怎么绘制中国地图这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

原文链接:https://my.oschina.net/u/4579695/blog/4512542

AI

开发者交流群×