python采用Basemap绘制完美中国地图
python采用Basemap绘制完美中国地图
- 摘要
- Basemap的安装
- 下载Basemap安装文件
- 安装 Pyproj& Basemap
- Basemap的Helloword
- 使用Shapefile绘制中国行政区域地图
- 绘制
- 给区域上色
- 利用pandas打印一下shapefile区域内容信息
- 绘制气象观测站点位置
- 参考博文
摘要
本文主要想在目前网络文献中为大家抽去除一些比较个人的经验的问题。其中包括,
- 如何安装Basemap组件;
- 如何采用Basemap定位出较为美观的中国区域平面效果
- 如何采用shapefile文件绘制完全的中国官方地图 — 目前Basemap默认绘制的中国行政区域地图缺少了,藏南地区、我们的宝岛台湾,九段线。
本人主要抱着抛砖引玉的心态,为网友准备的一个入门级表的实操,还请各位大佬见谅。
Basemap的安装
在这里为大家准备是的才windows平台上如何安装Basemap,对于Linux操作系统本人并未做尝试,但是应该都差不多,首先要讲一点就是Basemap在Anaconda 和pip的仓库中都没有,所以需要自己去下载对应的whl文件:
下载Basemap安装文件
- Basemap安装文件的下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/
- 我们需要下载两个文件 Pyproj 和 Basemap — 建议直接采用浏览器的文字搜索在网页上搜索关键字找,网页的锚好像没用了
- 下载时注意对应本机的Python版本就好了, 比如我电脑上是3.7的python我就使用的cp37-cp37m-win_amd64.whl
安装 Pyproj& Basemap
安装可以采用pip 和anaconda命令进行安装
pip install pyproj‑1.9.6‑cp37‑cp37m‑win_amd64.whl
pip install basemap‑1.2.0‑cp37‑cp37m‑win_amd64.whl
conda install pyproj‑1.9.6‑cp37‑cp37m‑win_amd64.whl
conda install basemap‑1.2.0‑cp37‑cp37m‑win_amd64.whl
两者令名差不多,其实看自己本机环境安装就好了,这里我没碰到什么坑,基本安装都很正常,为了保险,我先安装了pyproj 之后再安装的 basemap。
Basemap的Helloword
这里个人水平有限不太懂地图的投影之类的知识,还有basemap提供的项目内容,我就直接粘贴代码:
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
# plt.figure(figsize=(16, 8))
m= Basemap(llcrnrlon=77, llcrnrlat=14, urcrnrlon=140, urcrnrlat=51, projection='lcc', lat_1=33, lat_2=45, lon_0=100)
# m= Basemap(llcrnrlon=73, llcrnrlat=18, urcrnrlon=135, urcrnrlat=53)
m.drawcountries(linewidth=1.5)
m.drawcoastlines()
plt.show()
了解地图的网友应该知道这地图的行政区域上藏南地区是有一些问题的。所以这图在很多地方其实是不太好使用的。
使用Shapefile绘制中国行政区域地图
有很多网友在网上提供的下载中国区域的shapfile文件地址是:https://gadm.org/download_country_v3.html 这个网站确实能下载到比较多的地图,但是这上面的地图和Basemap默认提供的地图一样存在国界线的问题。
所以我在github上找到一个好的中国国界线shapefile,内容比较少,但是基本边界是没有我能提的,下载地址为:https://github.com/dongli/china-shapefiles。目前好多同学讲说不能直接下载, 我把他在csdn
上做了上传,地址:地图数据下载
绘制
m3= Basemap(llcrnrlon=77, llcrnrlat=14, urcrnrlon=140, urcrnrlat=51, projection='lcc', lat_1=33, lat_2=45, lon_0=100)
m3.readshapefile("china-shapefiles-master/china", 'china', drawbounds=True)
plt.show()
由于我们直接使用shapefile来绘制了,所以就没有再使用basemap的绘制海岸线 和国界线等API了,一面看起来比较混杂。
给区域上色
这里我就使用了简单的上色方案,让matplotlib是调色板自动加色,所以效果没那么好,这毕竟不是我想做的重点如果对这部分有兴趣的同学可以参考用Matplotlib配合Basemap画一个中国地图 使用中国省份人口数据来上色的,效果好一些。
from matplotlib.patches import Polygon
from matplotlib.colors import rgb2hexm5= Basemap(llcrnrlon=80, llcrnrlat=0, urcrnrlon=140, urcrnrlat=51, projection='lcc', lat_1=33, lat_2=45, lon_0=100)
m5.readshapefile("china-shapefiles-master/china", 'china', drawbounds=True)
m5.readshapefile("china-shapefiles-master/china_nine_dotted_line", 'nine_dotted', drawbounds=True)cmap = plt.cm.YlOrRdax =plt.gca()
for nshape, seg in enumerate(m5.china):color = rgb2hex(cmap(nshape)[:3])poly = Polygon(seg, facecolor=color, edgecolor=color)ax.add_patch(poly)
plt.show()
利用pandas打印一下shapefile区域内容信息
provinces = set()
for shapedict in m5.china_info:statename = shapedict['OWNER']provinces.add(statename.replace("\x00",""))
print(provinces )
{'上海市','云南省','内蒙古自治区','北京市','台湾省','吉林省','四川省','天津市','宁夏回族自治区','安徽省','山东省','山西省','广东省','广西壮族自治区','新疆维吾尔自治区','江苏省','江西省','河北省','河南省','浙江省','海南省','湖北省','湖南省','澳门特别行政区','甘肃省','福建省','西藏自治区','贵州省','辽宁省','重庆市','陕西省','青海省','香港特别行政区','黑龙江省'}
绘制气象观测站点位置
stations_lon_lat = pd.read_csv("lon_lat_mean.csv")
plt.rcParams['figure.figsize'] = (30.0, 18.0)
m7= Basemap(llcrnrlon=80, llcrnrlat=0, urcrnrlon=140, urcrnrlat=51, projection='lcc', lat_1=33, lat_2=45, lon_0=100)
m7.readshapefile("china-shapefiles-master/china", 'china', drawbounds=True)
m7.readshapefile("china-shapefiles-master/china_nine_dotted_line", 'nine_dotted', drawbounds=True)
longitudes, latitudes = m7(stations_lon_lat["Longitude"].get_values(), stations_lon_lat["Latitude"].get_values())
m7.scatter(longitudes, latitudes, s=10, marker='*',facecolors='r',edgecolors='r')
参考博文
[1]: 【译】Basemap手册 https://www.sohu.com/a/237965467_165070
[2]: Anaconda中 安装basemap包 https://blog.csdn.net/pengranxindong/article/details/79136486
[3]: Basemap画一个中国地图 https://blog.csdn.net/u011596455/article/details/79620676
python采用Basemap绘制完美中国地图相关推荐
- python采用Basemap绘制完美中国地图(包括绘制边界框,随机点等)
python采用Basemap绘制完美中国地图(包括绘制边界框,随机点等) 1. 效果图 2. 原理 2.1 依赖模块及安装 2.2 工程目录 2.3 依赖文件latlng.txt 经纬度 3 源码 ...
- python for ArcGIS 绘制北京市板块地图
python for ArcGIS 绘制北京市板块地图 结果预览 数据 完整代码 代码解读 需要利用python的arcpy模块绘制出北京市板块地图如下 结果预览 数据 原始板块边界数据如下 完整代码 ...
- python for ArcGIS 绘制西安市板块地图
python for ArcGIS 绘制西安市板块地图 完整代码 代码解读 利用python的arcpy模块绘制出西安市板块地图如下 完整代码 略 代码解读 整个实现过程包括3步 读数,即读取板块边界 ...
- python for ArcGIS 绘制南京市板块地图
python for ArcGIS 绘制南京市板块地图 完整代码 代码解读 利用python的arcpy模块绘制出南京市板块地图如下 完整代码 略 代码解读 整个实现过程包括3步 读数,即读取板块边界 ...
- python for ArcGIS 绘制上海市板块地图
python for ArcGIS 绘制上海市板块地图 背景及思路 完整代码 结果截图 代码解读 后话 背景及思路 第一次用python操作 ArcGIS, 写下这篇博文记录一下.板块是房地产行业专有 ...
- python for ArcGIS 绘制天津市板块地图
python for ArcGIS 绘制天津市板块地图 完整代码 代码解读 利用python的arcpy模块绘制出天津市板块地图如下 完整代码 略 代码解读 整个实现过程包括3步 读数,即读取板块边界 ...
- python for ArcGIS 绘制郑州市板块地图
python for ArcGIS 绘制郑州市板块地图 完整代码 代码解读 利用python的arcpy模块绘制出郑州市板块地图如下 完整代码 略 代码解读 整个实现过程包括3步 读数,即读取板块边界 ...
- python for ArcGIS 绘制宁波市板块地图
python for ArcGIS 绘制宁波市板块地图 完整代码 代码解读 利用python的arcpy模块绘制出宁波市板块地图如下 完整代码 略 代码解读 整个实现过程包括3步 读数,即读取板块边界 ...
- python for ArcGIS 绘制苏州市板块地图
python for ArcGIS 绘制苏州市板块地图 完整代码 代码解读 利用python的arcpy模块绘制出苏州市板块地图如下 完整代码 略 代码解读 整个实现过程包括3步 读数,即读取板块边界 ...
最新文章
- element ui 中el-input搜索输入框或者普通输入框无法输入的问题讨论
- putty 远程linux桌面,Linux远程桌面工具Xming+Putty的搭建
- 丘成桐: 没有经过考验的创新,往往深度不够
- 使用 jQuery Mobile 与 HTML5 开发 Web App (五) —— jQuery Mobile 表单下
- IOT(7)---物联网平台架构设计
- codewars--js--Happy numbers++无穷大判断
- 毕业设计第二次本周目标
- div 空隙_尖叫到建筑的空隙
- Python爬虫入门教程!手把手教会你爬取网页数据
- 计算机常用的颜色模式有,ps的颜色模式有哪些
- ubuntu 使用惠普HP打印机
- Android 绘制电池电量图标(含充电状态)。
- C语言中逗号运算符和逗号表达式
- 行人重识别数据集汇总
- 看完这五个问题后你真的了解C语言吗?(深度剖析C语言第二期)
- linux域名通过代理,Haproxy根据域名匹配后端服务器
- python解锁电脑屏幕_怎样解除电脑屏幕锁定_教你解除电脑屏幕锁定的方法-系统城...
- RabbitMQ异常之reply-code=406, reply-text=PRECONDITION_FAILED - invalid arg ‘x-message-ttl‘ for queue ..
- 从URL到页面渲染,到底经历了些啥
- Tech Ed 2007 历“鲜”记