gma视角的历史地图集3:自夏至宋3000年5座洛阳城
古代洛阳地区,沿洛水之北自东向西洛河两岸,于不足30公里的范围内,分布着二里头遗址、偃师商城遗址、周王城遗址、汉魏洛阳城遗址和隋唐洛阳城遗址等五大都城遗址,人称 “五都贯洛”。都城遗址分布密集,联系密切,时间跨度大,在全世界罕见。
“五都贯洛”的历史意义:
- 连续性: 五座都城跨越夏商至隋唐近3000年,见证中国早期国家形成到帝国鼎盛。
- 文化融合: 河洛地区成为华夏文明的核心,辐射中原文化。
- 文明演进: 从二里头(早期国家)→商周(礼制成熟)→汉唐(帝国巅峰),体现中国古代都城制度的连续性。
- 考古价值: 五座遗址均被列入“中国百年百大考古发现”,二里头、汉魏洛阳城为国家级大遗址保护项目。
自夏至宋3000年5座洛阳城简介
都城名称 | 时代 | 位置 | 主要特点 |
---|---|---|---|
二里头遗址 | 夏(约前1900-前1600) | 洛阳偃师区 | 中国最早广域王权都城,宫殿基址、青铜作坊 |
偃师商城 | 商(约前1600-前1260) | 洛阳偃师区 | 商汤“西亳”,宫城布局规整,体现商代“宫庙分离”制度。 |
周王城-汉晋河南县 | 西周初-西晋末(前1040-311?) | 洛阳市西工区 | 周天子宗庙,反映周礼文化。 |
周成周城-汉魏洛阳城 | 西周初-唐初(前1040-627?) | 洛阳市瀍河区、偃师区、孟津区 | 丝绸之路起点,北魏规模达100平方公里,首创里坊制 |
隋唐洛阳城 | 隋-北宋末(605-1140) | 洛阳市瀍河区、老城区、西工区、洛龙区 | 武则天“神都”,现存明堂、天堂遗址,应天门遗址等 |
gma绘制自夏至宋3000年5座洛阳城
环境和数据准备
安装 gma:
pip install gma
本文基于:gma 2.1.7,Python 3.12
本文用到历史行政区划数据以及其他相关数据:
链接: https://pan.baidu.com/s/1BbtnVAdypITrI5Jaj8w6SA?pwd=jh95
提取码: jh95
注意:本文用到的 自夏至宋3000年5座洛阳城 数据为 洛 根据历史资料自制,不保证其完全准确,其他用途使用时请斟酌!!
注意:本文用到的 自夏至宋3000年5座洛阳城 数据为 洛 根据历史资料自制,不保证其完全准确,其他用途使用时请斟酌!!
注意:本文用到的 自夏至宋3000年5座洛阳城 数据为 洛 根据历史资料自制,不保证其完全准确,其他用途使用时请斟酌!!
绘图代码
import matplotlib.pyplot as plt
from gma.map import inres, plot
from gma import io
import numpy as npselGDBsInfo = {"夏斟鄩城": {'数据库路径': "夏斟鄩.gdb",'存世时间': '约前1900-约前1600','存世朝代': '夏\n(太康-夏桀)'},"商西亳城": {'数据库路径':"商西亳.gdb",'存世时间': '约前1600-约前1260' ,'存世朝代': '商\n(商汤-仲丁)'},"周王城-汉晋河南县":{'数据库路径': "周王城.gdb", '存世时间': '前1040-311?', '存世朝代': '西周初-西晋末\n(周成王姬诵-晋怀帝司马炽)'},"周成周城-汉魏洛阳城": {'数据库路径': "汉魏洛阳城.gdb", '存世时间': '前1040-627?','存世朝代': '西周初-唐初\n(周成王姬诵-唐高祖李渊)'},"隋唐洛阳城": {'数据库路径': "隋唐洛阳城.gdb",'存世时间': '605-1140','存世朝代': '隋-北宋末\n(隋炀帝杨广-宋钦宗赵桓)'},
}lyRiver = io.ReadVector("其他要素.gdb", "古水系")
np.random.seed(0)
radColors = np.random.uniform(size = (50, 3))osmGDB = io.Open("OSM_河南.gdb")newBou = [112.332, 34.542, 112.856, 34.857]
MapF = plot.MapFrame(BaseMapProj = 3857, Extent = newBou)###### 一些底图
MapL0 = MapF.AddLayer(lyRiver, FaceColor = '#AFEEEE', LineColor='none')#########################
cors = { 'gis_osm_landuse_a_free_1': '#EEE8AA', 'gis_osm_railways_free_1': 'black','gis_osm_water_a_free_1': '#87CEFA', 'gis_osm_waterways_free_1': '#87CEFA',
} ## 定义部分图层的颜色
for layer in osmGDB.iteritems():radFColor = cors.get(layer.Name, np.random.uniform(size = 3))radLColor = cors.get(layer.Name, 'lightgray')if 'Point' in layer.GeomType:continuetry:nly = layer.Clip(MapF.FrameFeature)MapF.AddLayer(nly, FaceColor = radFColor, LineColor = radLColor, PointSize=1, alpha = 0.3)except:pass
MapF.SetBackground('#F0FFF044')
#########################i = 0
for n, infos in selGDBsInfo.items():gdb = io.Open(infos['数据库路径'])bou = [1e100, 1e100, 1e-100, 1e-100]for gi, ly in enumerate(gdb):if gdb.Name == '隋唐洛阳城' and gi > 6: # 隋唐洛阳城 不绘制西苑了continueif 'Point' in ly.GeomType:continueMapL = MapF.AddLayer(ly, FaceColor = radColors[i], LineColor = radColors[i], PointSize = 5)i += 1### 记录所有图层的范围Lbou = MapL.GMALayer.Boundarybou = [min(bou[0], Lbou[0]), min(bou[1], Lbou[1]),max(bou[2], Lbou[2]), max(bou[3], Lbou[3])]## 添加标注if n in ['隋唐洛阳城', "周成周城-汉魏洛阳城"]:x, y0 = (bou[0] + bou[2]) * 0.5, bou[3] + (bou[3] - bou[1]) * 0.3elif n in ['周王城-汉晋河南县']:x, y0 = bou[0] + (bou[2] - bou[0]) * -0.6, bou[3] + (bou[3] - bou[1]) * 0.55elif n in ['夏斟鄩城']:x, y0 = bou[0] + (bou[2] - bou[0]) * 1.4, bou[1] + (bou[3] - bou[1]) * -0.8else:x, y0 = bou[2] + (bou[2] - bou[0]) * 2, bou[3] + (bou[3] - bou[1]) * 1y1 = y0 + 200s = f"{infos['存世时间']}\n{infos['存世朝代']}"MapF.Axes.text(x, y0, s, fontdict = {'family':'SimSun', 'size':5}, ha = 'center', va = 'top')MapF.Axes.text(x, y1, n, fontdict = {'family':'SimHei', 'size':7}, ha = 'center', va = 'bottom')MapF.SetFrame(FrameWidth=0.2)
plt.savefig("三千年五座洛阳城.jpg", dpi = 300, bbox_inches = 'tight')