使用 gma 绘制洛阳市7区7县清新风格地图(OSM2024数据)

环境和数据准备

安装 gma:pip install gma

本文基于:gma 2.1.6,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 io
import numpy as np
np.random.seed(0)


xian = io.ReadVector(r"2024\县级\T2024年初县级.shp")
luoyang = xian.SelectWhere('地级 = "洛阳市"')

gdb = io.Open("OSM_洛阳.gdb")

radColors = { 
    'gis_osm_landuse_a_free_1': '#EEE8AA', 
    'gis_osm_pois_a_free_1': '#7CCD7C', 
    'gis_osm_railways_free_1': 'black',
    'gis_osm_water_a_free_1': '#87CEFA', 
    'gis_osm_waterways_free_1': '#87CEFA',    
}   ## 定义部分图层的颜色


newly = luoyang.Dissolve()
newBou2 = newly.Boundary
############################################################# 绘制内容
MapF = plot.MapFrame(BaseMapProj = 3857, Extent = newBou2)
MapF.AddLayer(newly, 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')

    zo = 20 if 'Line' in layer.GeomType else None
    MapF.AddLayer(layer, FaceColor = radFColor, LineColor = radLColor, PointSize=1, Zorder = zo)

MapF.AddLayer(newly, FaceColor = 'none', LineColor = 'black', LineWidth = 0.1)
############################################################# 绘制内容

MapF.Axes.set_title('洛阳市', fontdict={'family':'SimSun'}, y = 0.99)

plt.savefig("洛阳市.jpg", dpi = 300, bbox_inches = 'tight')

绘制7区7县

import matplotlib.pyplot as plt
from gma.map import inres, plot
from gma import io
import numpy as np
np.random.seed(0)

xian = io.ReadVector(r"2024\县级\T2024年初县级.shp")
luoyang = xian.SelectWhere('地级 = "洛阳市"')

gdb = io.Open("OSM_洛阳.gdb")

radColors = { 
    'gis_osm_landuse_a_free_1': '#EEE8AA', 
    'gis_osm_pois_a_free_1': '#7CCD7C', 
    'gis_osm_railways_free_1': 'black',
    'gis_osm_water_a_free_1': '#87CEFA', 
    'gis_osm_waterways_free_1': '#87CEFA',    
}   ## 定义部分图层的颜色

newBou2 = luoyang.Boundary
for feature in luoyang:
    fields = feature.FieldsInfo
    name = fields.at[0, 'Values']

    bou = feature.Boundary
    newBou = [bou[0] - (bou[2] - bou[0]) * 0.2,
              bou[1] - (bou[3] - bou[1]) * 0.2,
              bou[2] + (bou[2] - bou[0]) * 0.2,
              bou[3] + (bou[3] - bou[1]) * 0.2,
             ]
    
    print(name, bou)
    ############################################################# 绘制内容
    MapF = plot.MapFrame(BaseMapProj = 3857, Extent = newBou)
    MapF.AddFeature(feature, FaceColor = '#F0FFF044', LineWidth = 0)

    for layer in gdb.iteritems():
        ply = layer.Clip(feature)
        radFColor = radColors.get(layer.Name, np.random.uniform(size = 4))
        radLColor = radColors.get(layer.Name, 'lightgray')
        try:
           MapF.AddLayer(ply, FaceColor = radFColor, LineColor = radLColor, PointSize=1)
        except:
            pass
            
    MapF.AddFeature(feature, FaceColor = 'none', LineColor = 'black', LineWidth = 0.1)
    ############################################################# 绘制内容
    
    MapF.Axes.set_title(name, fontdict={'family':'SimSun'}, y = 0.99)
    
    ############################################################# 鹰眼图
    subBounds = [-0.1, 0.95, 0.4, 0.4]
    subAxes = MapF.Axes.inset_axes(subBounds)
    MapF2 = plot.MapFrame(Axes = subAxes, BaseMapProj = 3857, Extent = newBou2)
    MapF2.AddFeature(feature, FaceColor = '#9BCD9B', LineWidth = 0)
    MapF2.AddLayer(luoyang.Copy(), FaceColor = 'none', LineColor = 'gray')
    ############################################################# 鹰眼图

    plt.savefig(f"{name}.jpg", dpi = 300, bbox_inches = 'tight')











请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洛的地理研学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值