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.请自我约束,以保持开放数据活力。

相关推荐
张3蜂2 小时前
Python变量与命名规范:从入门到精通
开发语言·python
秦始皇爱找茬2 小时前
Playwright Python Windows 下 headful Chromium 崩溃排查经验分享
python·ui自动化·playwright
十铭忘2 小时前
动作识别12——yolo26s-pose+PoseC3D第1篇之标注工具升级2.0
人工智能·python·深度学习
才兄说2 小时前
机器人租售配合齐不齐?多人同步操作
python
好家伙VCC2 小时前
# 发散创新:基于Python的TTS语音合成实战与优化策略 在人工智能加速落地的今天,**文本转
java·开发语言·人工智能·python
yuankoudaodaokou3 小时前
如何让三维数字化技术落地?思看科技三级认证培训体系赋能用户成长
python·科技
在放️3 小时前
Python 数据分析 · 进入自动化处理的关键入门信息
python
袁袁袁袁满3 小时前
Haystack与亮数据MCP工具结合实现自动化爬虫
爬虫·python·网络爬虫·数据采集·爬虫实战·视频爬虫·特推爬虫