gma 绘制唐都畿道一府四州

开元二十一年(733年) ,唐玄宗李隆基在关内道长安 附近增置京畿道 ,河南道洛阳 附近增置都畿道,并把山南道分为山南东道和山南西道,江南分为江南东道、江南西道和黔中道。每道设采访处置使(监察官),部分道兼设节度使(军事长官),形成了十五道的格局,十五道的范围也逐渐确定。

都畿道(734年)辖一府(河南府)、四州(汝州、陕州、郑州、怀州),详细信息如下表:

名称 治所 今所在地 简要说明
河南府 河南县 / 洛阳县 (双附郭) 河南省洛阳市洛龙区/老城区 都畿道的核心,东都洛阳所在地。
汝州 梁县 河南省汝州市 位于洛阳东南部,是洛阳南面的屏障。
陕州 陕县 河南省三门峡市陕州区 位于洛阳以西,扼守崤山通道,连接长安与洛阳的咽喉。
郑州 管城县 河南省郑州市管城回族区 位于洛阳以东,通往中原腹地的门户。
怀州 河内县 河南省焦作市沁阳市 位于黄河以北,是洛阳北面的重要屏障。

环境和数据准备

目前,gma 3 的 alpha 版已经发布,本例用于测试 gma 3 的绘图功能

安装 gma:pip install gma==3.0.0a5
本文基于:gma 3.0.0a5,Python 3.12
本文用到的矢量数据为:

链接: https://pan.baidu.com/s/1oIxnRTUke5FR_pk9HrJ-Hg?pwd=snv9

提取码: snv9
数据使用须知:
1.本数据免费获取且不需要任何门槛,使用时请注明出处。
2.数据制作不易,请不要将此数据(以及在此数据基础上做的修改数据)在未经作者同意的情况下用于任何商业项目或目的。
3.请自我约束,以保持开放数据活力。

代码

python 复制代码
from gma.carto import inres, plot
from gma import gio
import numpy as np
import matplotlib.pyplot as plt

# 1.打开数据数据
gdb = gio.open_file("唐_734年.gdb")
ly_zhoufu = gdb.get_layer('州府')
ly_duji = ly_zhoufu.select('道 = "都畿道"')
ly_zhoufuzhisuo = gdb.get_layer('州府治所')
ly_dujizhoufu = ly_zhoufuzhisuo.select('道 = "都畿道"')
ly_kaiyuan = gdb.get_layer('道')
ly_dujidao = ly_kaiyuan.select('道 = "都畿道"')

rv = gio.open_vector('其他要素.gdb', name_or_id = '五级河流')

st_gdb = gio.open_file("洛阳/隋唐洛阳城.gdb")

# 2.配置一个绘图范围
left, bottom, right, top = ly_duji.bounds
xsize = right - left
ysize = top - bottom
bounds = [left - xsize * 0.2, bottom - ysize * 0.3, right + xsize * 0.2, top + ysize * 0.3]

# 3.绘图
plt.figure(figsize=(12, 6), dpi = 300)

## 3.1 添加数据
### 3.1.0 创建一个地图框
mf = plot.MapFrame(crs = 3857, bounds = bounds)

### 3.1.1 添加都畿道行政区底图
ly1 = mf.add_vector(ly_dujidao, facecolors = '#DCFFF0', edgecolors = 'none', linewidths = 0)
ly2 = mf.add_vector(ly_duji, facecolors = 'none', edgecolors = 'gray', linewidths = 0.5)

### 3.1.2 添加河流
for lev in range(1, 6):
    s_rv = rv.select(f'LEVEL_RIVE = {lev}')
    width = 0.4 + 0.1 * (6 - lev)
    mf.add_vector(s_rv, lw = width, facecolors = 'lightblue', edgecolors = 'lightblue')

### 3.1.3 道行政边界
ly0 = mf.add_vector(ly_kaiyuan, facecolors = 'none', edgecolors = 'black', linewidths = 0.3)
ly11 = mf.add_vector(ly_dujidao, facecolors = 'none', edgecolors = 'black', linewidths = 1)

### 3.1.4 东都外郭城
chengqiang = st_gdb.get_layer('外郭城墙').dissolve()
st_ly3 = mf.add_vector(chengqiang, facecolor = '#FED580', edgecolors = 'green', linewidths = 0.1)

### 3.1.5 都畿道州府治所
ly3 = mf.add_vector(ly_dujizhoufu, facecolors = 'none', edgecolors = 'black', pointsizes = 12)

## 3.2 标注
offsets0 = [(0, 0), (0, 0), (0, 0), (0, 0), (0, 80), (0, 20), (0, -50)]
tx0 = ly0.add_labels(fields = '道', family = 'SimHei', color = 'darkgray', size = 12, xytext = offsets0)

offsets2 = [(-100, -20), (30, 0), (0, -100), (10, 30), (10, 40)]
tx2 = ly2.add_labels(fields = '州府', family = 'SimSun', xytext = offsets2)

offsets3 = [(0, -35), (0, -35), (0, -35), (0, -35), (0, -35), (60, 0)]
tx3 = ly3.add_labels(fields = '治所', family = 'SimSun', size = 8, xytext = offsets3)

st_ly3.add_labels('东都', family = 'SimHei', xytext = [(0, 55)])

## 3.3 经纬网
gl = mf.add_graticule(lon_range = np.arange(109, 116, 1), lat_range = np.arange(33, 36, 1), 
                      lw = 0.3, ls = (16, (16, 16)))
ol = gl.set_outline()
lb = gl.set_labels(size = 9, family = 'Times New Roman')

## 3.4 保存结果
plt.savefig('都畿道一府四州.jpg', bbox_inches = 'tight')

数据使用须知:
1.本数据免费获取且不需要任何门槛,使用时请注明出处。
2.数据制作不易,请不要将此数据(以及在此数据基础上做的修改数据)在未经作者同意的情况下用于任何商业项目或目的。
3.请自我约束,以保持开放数据活力。

相关推荐
Thneonl3 小时前
Celery 生产踩坑:1000 任务积压与 acks_late 双重执行
后端·python
清桔3 小时前
模型的调用
python
小小张说故事3 小时前
Python 多线程为什么跑不快?asyncio 入门指南:异步并发从零上手
后端·python
10年前端老司机3 小时前
干货分享|企业智能知识库 Rerank 重排序落地实践与踩坑总结
python·aigc·agent
天天被压力3 小时前
【Python 量化取数指南 #13】Python 把行情落库:sqlite 一键存,回测随用随取
java·人工智能·python
天天被压力3 小时前
【Python 量化取数指南 #14】Python 清洗行情数据:复权停牌对齐,回测不翻车
java·人工智能·python
Python私教3 小时前
Python环境配置:conda+PyCharm+换源,附6个坑
人工智能·python·pycharm
databook3 小时前
检测数据异常值的五种统计技术
python·数据挖掘·数据分析
小小张说故事3 小时前
Selenium 装驱动太麻烦?Playwright 入门指南:Python 网页自动化新标准
python
海宇数科3 小时前
Python数据工程:利用海宇车型识别精准优化车险理赔合规体验
人工智能·python