python采用Basemap绘制完美中国地图(包括绘制边界框,随机点等)
python采用Basemap绘制完美中国地图(包括绘制边界框,随机点等)
- 1. 效果图
- 2. 原理
- 2.1 依赖模块及安装
- 2.2 工程目录
- 2.3 依赖文件latlng.txt 经纬度
- 3 源码
- 参考
这篇博客将介绍如何使用basemap绘制简单的地图(包括绘制边界框,随机点等),Basemap基于GEOS的地图二维数据,其底图数据库与GMT相同,封装了大量常用的地图投影、坐标转换功能,利用简洁的Python语法支持绘出多种多样的地理地图。
写这篇博客源于一个博友的提问,绘制 地图及经纬度点 为这样的效果图:
1. 效果图
左图效果图如下:
右图效果图如下:
2. 原理
2.1 依赖模块及安装
- 依赖模块如下:
geos
pyproj
basemap
- 安装
pip install geos
pip install pyproj
basemap的wheel文件可在 https://www.lfd.uci.edu/~gohlke/pythonlibs/ 下载,注意需要和python版本以及系统版本对应;
下载完成就可以安装了:
pip install basemap-1.2.2-cp37-cp37m-win_amd64.whl
2.2 工程目录
$ tree
.
|-- images
| `-- latlng.txt ------依赖经纬度值
|-- left.png ------------程序运行生成
|-- plot_map.py----------程序代码
`-- right.png -----------程序运行生成1 directory, 4 files
2.3 依赖文件latlng.txt 经纬度
经纬度是从提问的图片中OCR识别出来的写入了文件,OCR可参考:
另外为了效果图更加明显,随机增加了一些经纬度;
-125 -125.5 48.5 49.0 -125.23 48.79 2012 5 4 7
-125 -125.5 48.5 49.0 -125.1 48.9 2012 5 4 7
-125 -125.5 48.5 49.0 -125.4 48.6 2012 5 4 7
-125 -130.5 48.5 55.0 -128.23 54.79 2012 5 4 7
-125 -134.5 35.5 49.0 -134.23 36.79 2012 5 4 7
-125 -134.5 35.5 49.0 -130.23 40.79 2012 5 4 7
-125 -130.5 45.5 55.0 -128.23 52.79 2012 5 4 7
-125 -134.5 45.5 49.0 -134.23 46.79 2012 5 4 7
-125 -134.5 45.5 49.0 -130.23 51.79 2012 5 4 7
-65.5 -66.0 43 43.5 -65.93 43.33 2011 12 14 7
-61.5 -62.0 47 47.5 -61.96 47.39 2011 5 21 16
-64.5 -65.0 43.5 44.0 -64.87 43.7 2010 12 2 22
-55.5 -56.0 45.5 46.0 -55.75 45.7 2010 10 13 7
-66 -66.5 43.5 44.0 -66.41 43.98 2009 12 16 14
-53 -53.5 49 49.5 -53.35 49.23 2009 11 3 19
-53 -53.5 50 50.5 -53.47 50.29 2009 10 24 11
-51 -51.5 45.5 46.0 -51.02 45.6 2009 9 13 16
-64 -64.5 49 49.5 -64.37 49.0 2009 5 18 22
3 源码
# 绘制地图数据
# 注意:plt.savefig() 依赖 matplotlib.use("Agg")设置
# plt.show时,需要注释掉 matplotlib.use("Agg")
import osimport numpy as np
from mpl_toolkits.basemap import Basemap # 地图依赖
import matplotlib.pyplot as plt # 绘制效果图及可视化
import matplotlib.image as mpimg # 读取图片
import matplotlib # 保存图片# 设置此才可保存图片到本地,但同时没法可视化plt.show()了
# matplotlib.use("Agg")def left_map():# 边界框,及起点0,0处经纬度map = Basemap(llcrnrlon=-135, llcrnrlat=45, urcrnrlon=-120, urcrnrlat=55,resolution='i', lat_0=45, lon_0=-135)map.drawmapboundary(fill_color='aqua')map.fillcontinents(color='#ddaa66', lake_color='aqua')map.drawcoastlines() # 绘制海岸线图层# drawparalles: 绘制lon# drawmeridians:绘制lat# range(-90,100,5)等差数列,因为range到达不了本身,所以需要大一点# linewidht:线宽# dashes[4,2]: 4绘制大小,2间隔像素# labels[1,0,0,1]:文本位置 分别代表左、右、上、下# color: 字体颜色# zorder:改变线的位置,例如,能够使土地覆盖平行线,或相反. 0:线在土地下方(看不见),1:线在土地上方map.drawparallels(range(45, 57, 2), linewidth=2, dashes=[4, 2], labels=[1, 0, 0, 1], color='r', zorder=0)map.drawmeridians(range(-135, 118, 5), linewidth=2, dashes=[4, 2], labels=[1, 0, 0, 1], color='b', zorder=0)# 获取第5列得到经度lons,获取第5列得到纬度lats# my_data = np.loadtxt('images/latlng.txt')# lons = my_data[:, [4]]# lats = my_data[:, [5]]# 生成随机点lons = np.random.randint(120, 135, (25, 1)).astype(np.float32) * -1lats = np.random.randint(45, 55, (25, 1)).astype(np.float32)x, y = map(lons, lats)# 绘制点 圆点红色# 可参考https://matplotlib.org/stable/api/markers_api.html 找到绘制的样式# 可参考https://matplotlib.org/stable/api/colors_api.html 找到绘制的颜色map.scatter(x, y, marker='.', color='r')plt.show()# plt.savefig('left.png')def right_map():# 边界框,及起点0,0处经纬度map = Basemap(llcrnrlon=-75, llcrnrlat=35, urcrnrlon=-45, urcrnrlat=55,resolution='i', lat_0=35, lon_0=-75)map.drawmapboundary(fill_color='aqua')map.fillcontinents(color='#ddaa66', lake_color='aqua')map.drawcoastlines() # 绘制海岸线图层# drawparalles: 绘制lon# drawmeridians:绘制lat# range(-90,100,5)等差数列# linewidht:线宽# dashes[4,2]: 4绘制大小,2间隔像素# labels[1,0,0,1]:文本位置 分别代表左、右、上、下# color: 字体颜色# zorder:改变线的位置,例如,能够使土地覆盖平行线,或相反. 0:线在土地下方(看不见),1:线在土地上方map.drawparallels(range(-90, 100, 5), linewidth=2, dashes=[4, 2], labels=[1, 0, 0, 1], color='r', zorder=0)map.drawmeridians(range(-75, 0, 10), linewidth=2, dashes=[4, 2], labels=[1, 0, 0, 1], color='b', zorder=0)my_data = np.loadtxt('images/latlng.txt')# print(my_data.shape)# print(my_data)# print('lon: ',my_data[:,[4]])# print('lat: ',my_data[:,[5]])# 获取第5列得到经度lons,获取第5列得到纬度latslons = my_data[:, [4]]lats = my_data[:, [5]]x, y = map(lons, lats)# 绘制点 圆点红色# 可参考https://matplotlib.org/stable/api/markers_api.html 找到绘制的样式# 可参考https://matplotlib.org/stable/api/colors_api.html 找到绘制的颜色map.scatter(x, y, marker='.', color='r')plt.show()# plt.savefig('right.png')left_map()
right_map()def mixshow():folder_path = os.getcwd().replace('\\', '/')list = [folder_path + '/left.png', folder_path + '/right.png']for i, j in enumerate(list):print(j)# matplot读出来是RGBimage = mpimg.imread(j)plt.subplot(1, 2, i + 1)plt.imshow(image) # 通过for循环逐个显示图像plt.xticks([]) # 去掉x轴的刻度plt.yticks([]) # 去掉y轴的刻度plt.show()mixshow()
参考
- https://www.cnblogs.com/zhuwjwh/p/12325694.html
- 官网文档
- github 源码
python采用Basemap绘制完美中国地图(包括绘制边界框,随机点等)相关推荐
- python采用Basemap绘制完美中国地图
python采用Basemap绘制完美中国地图 摘要 Basemap的安装 下载Basemap安装文件 安装 Pyproj& Basemap Basemap的Helloword 使用Shape ...
- 使用Echarts完成对中国地图的绘制
目录 前言 1.什么是Echarts插件 2.如何在vue中使用Echarts 3.中国地图的具体样式 4.如何使用Echarts来完成中国地图的绘制 5.总结 前言 我们在使用代码绘画地图的时候通常 ...
- jvectormap 中国地图 (包括香港、台湾、澳门)
一个完整的中国地图(各个省,市.还有国两制),谢谢大家. 忘了网上哪位的范例,我加了些修改. 1 <html xmlns="http://www.w3.org/1999/xhtml&q ...
- 2021年中国地图省市县区边界shp格式arcgis数据(预览图)
2021年中国地图省市县区边界shp格式arcgis数据(预览图) 下载地址 https://download.csdn.net/download/zhongguonanren99/16063641 ...
- R 绘制渐变中国地图及添加南海九段图
采用中国国家基础地理信息系统(GIS)数据模板进行绘制并添加九段图. 调用R进行作图,所用中国地图模板可从[百度网盘](链接: https://pan.baidu.com/s/1FR2zG74d0ao ...
- vue中用echarts 绘制geo 中国地图
前言 由于5.X版本的echarts没有了map包,因此我先安装了5.1.1版本,再安装了4.9版本,并将4.9版本中的map包复制到了5.1.1版本里. 绘制效果如下: 1.省份根据数据值,展示不同 ...
- Android开发画出中国地图,Android 绘制中国地图
最近的版本有这样一个需求: 有 3 个要素: 中国地图 高亮省区 中心显示数字 面对这样一个需求,该如何实现呢? 高德地图 因为项目是基于高德地图来做的,所以很自然而然的想到了高德.但是当查阅高德地图 ...
- python程序创建词云 中国地图_Python基于wordcloud及jieba实现中国地图词云图
热词图很酷炫,也非常适合热点事件,抓住重点,以图文结合的方式表现出来,很有冲击力.下面这段代码是制作热词图的,用到了以下技术: jieba,把文本分词 wordcloud,制作热图 chardet,辨 ...
- echarts 绘制世界地图 中国地图
1.下载 世界地图和中国地图加载包 网上找了很长时间,分享 world.js china.js 下载地址: 链接:https://pan.baidu.com/s/1itbfiTMNMkcbLfUs0N ...
最新文章
- Java后端进行经纬度点抽稀聚合,HTML呈现及前端聚合实现点聚合~
- 肝完这篇垃圾回收,和面试官扯皮不怕了
- 循序渐进Python3(七) -- 2-- 面向对象进阶
- 面试:InnoDB 中一棵 B+ 树可以存放多少行数据?
- 六度人和张星亮:SaaS市场要回归TO B本质
- 【小姨子】 基本信息(拼音,读音等)
- CISSP避坑经验指南
- [转]各种配置管理工具的比较
- C# 将彩色PDF转为灰度
- 记一次基于公众号的微信H5开发项目(一)
- BZOJ1854: [Scoi2010]游戏(二分图匹配)
- html怎么设置字体的背景颜色,html怎样设置字体的背景颜色?
- 清理谷歌浏览器注册表_Win10系统下注册表chrome残留无法删除
- 异地监控组网实战案例(速度快)
- Android 点击图片全屏预览 -——ZoomPreviewPicture默认预览使用
- 浙大远程教育计算机小抄,一张A4纸能写多少个字?看完浙大考生的“小抄”,网友:稳过!...
- salesforce架构_使用Salesforce扩展用户研究运营基础架构
- Windows下安装Nexus私服及更新索引
- Numpy 简单教程(二)数组的形状(shape)操作
- (01)ORB-SLAM2源码无死角解析-(55) 闭环线程→计算Sim3:总体流程讲解ComputeSim3()