五星出东方洛老师:gma绘制的洛阳市瀍河回族区的地图和兴趣点
本文的主要目标为绘制洛老师家乡所在的洛阳市瀍河回族区,给洛老师的家的位置绘制五角星,其他兴趣点标注一下。绘图目标(结果)如下:
环境和数据准备
安装 gma:
pip install gma
本文基于:gma 2.1.7,Python 3.12
本文用到的OSM矢量数据为:
链接: https://pan.baidu.com/s/1GEQbOFnTAlSHGa7erdxFDA?pwd=86mb
提取码: 86mb
本文用到的洛阳市区县范围矢量数据l来源于:
https://www.shengshixian.com/
绘图代码
import matplotlib.pyplot as plt
from gma.map import inres, plot
from gma import ioxian = io.ReadVector(r"2024\县级\T2024年初县级.shp")
luoyang = xian.SelectWhere('地级 = "洛阳市"')
chanhe = luoyang.SelectWhere('县级 = "瀍河回族区"')gdb = io.Open("OSM_洛阳.gdb")radColors = { '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',
} ## 定义部分图层的颜色newBou = chanhe.Boundary
name = chanhe.ToDataFrame().iat[0, 0]############################################################# 绘制内容
MapF = plot.MapFrame(BaseMapProj = 3857, Extent = newBou)
MapF.AddLayer(chanhe, FaceColor = '#F0FFF044', LineWidth = 0)for layer in gdb.iteritems():radFColor = radColors.get(layer.Name, np.random.uniform(size = 4))radLColor = radColors.get(layer.Name, 'lightgray')if 'Point' in layer.GeomType:continueply = layer.Clip(chanhe)try:MapF.AddLayer(ply, FaceColor = radFColor, LineColor = radLColor, PointSize=1)except:pass## 提取洛老师家的坐标点,绘制五角星
Star5Luo = luolaoshiP[0]
ML0 = MapF.AddLayer(Star5Luo, FaceColor = 'red', PointMarker = '*', PointSize = 100)
LB0 = ML0.AddLabel(FieldName = '名称', Offset = [(0, -40)], Font = 'SimHei', FontSize = 7)## 绘制其他点
### 设置 OtherP 偏移量避免遮盖
Offset = [(0, -20), (0, 20), (0, -20), (0, -20), (0, 20),(0, -20), (0, 20), (125, -5), (0, -20), (0, -20), (0, -20), (70, 0), (40, -20), (-20, -20), (0, -20),(-115, 0), (0, -20), (-50, -5), (0, 20), (0, -20),(0, -20), (0, -20), (0, -20)]
OtherP = luolaoshiP[1:]
ML1 = MapF.AddLayer(OtherP, FaceColor = 'blue', LineColor='white', LineWidth = 0.2, PointSize = 5)
ML1.AddLabel(FieldName = '名称', Offset = Offset, Font = 'SimSun', FontSize = 5)MapF.AddLayer(chanhe, FaceColor = 'none', LineColor = 'black', LineWidth = 0.3, LineStyle=(6, (6, 6)))
############################################################# 绘制内容
MapF.Axes.set_title(name, fontdict={'family':'SimSun'}, y = 0.95)############################################################# 鹰眼图
subBounds = [0, 0.85, 0.4, 0.4]
subAxes = MapF.Axes.inset_axes(subBounds)
MapF2 = plot.MapFrame(Axes = subAxes, BaseMapProj = 3857)
MapF2.AddLayer(chanhe, FaceColor = '#9BCD9B', LineWidth = 0)
MapF2.AddLayer(luoyang, FaceColor = 'none', LineColor = 'gray')
MapF2.AddLayer(luoyang.Dissolve(), FaceColor = 'none', LineColor = 'black')
############################################################# 鹰眼图plt.savefig(r"洛老师之瀍河.jpg", dpi = 300, bbox_inches = 'tight')