【可视化】绘制中国标准行政区划地图(2024版)

【可视化】绘制中国标准行政区划地图(2024版)

在科研投稿论文过程中,多数期刊杂志要求我们制作涉及国界的图件,必须使用自然资源部地图技术审查中心发布的标准地图底图。凡涉国界图件(国内部分地区、全国、世界部分地区、全球)必须使用
自然资源部标准地图服务系统国家测绘局地理信息局标准地图底图,所用底图边界要完全无修改(包括南海诸岛位置)。本文结合GeopandasCartopy两个强大的地理数据处理库进行展示。

相关库简介

Cartopy 是一个用于地理数据处理和可视化的 Python 库,专门设计来处理地图投影和地理空间数据的绘制。它是基于 Matplotlib 的高层次接口,主要用于创建地理参考图形和地图。Cartopy提供了丰富的功能来处理不同的地图投影、地理参考数据的转换,以及与流行的地理信息系统(GIS)数据格式的集成。

代码实现

导入相关库

# -*- coding: UTF-8 -*-
# 导入相关库
import numpy as np
import xarray as xr
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature
from copy import copy
from cartopy.mpl.gridliner import LATITUDE_FORMATTER, LONGITUDE_FORMATTER
import shapely.geometry as sgeom

加载数据

**国家地理信息公共服务平台(天地图)**新增了矢量地图底图下载服务,用户可以根据需求下载不同审图号的标准地图矢量底图。矢量地图相较于像素地图,具有更高的清晰度和可编辑性,可以无限放大而不失真,更适合进行地图编辑和二次创作。获取方式见-天地图

读取中国区域的省、市、县的区划信息:

# 读取省级行政区划
province = gpd.read_file('中国_省.geojson')
# 读取市级行政区划
city = gpd.read_file('中国_市.geojson')
# 读取县级行政区划
county = gpd.read_file('中国_县.geojson')

市级行政区划展示

# 设置地图投影
proj = ccrs.LambertConformal(central_longitude=105, central_latitude=90,standard_parallels=(25, 47))

# 设置图片大小
fig = plt.figure(figsize=[10, 8],frameon=True)

# Set projection and plot the main figure
ax = fig.add_axes([0.08, 0.05, 0.8, 0.94], projection=proj)
# 设置地图范围
ax.set_extent([80, 130, 15, 55],crs=ccrs.PlateCarree())
# 添加地理要素
ax.add_geometries(city.geometry, 
                  crs=ccrs.PlateCarree(), 
                  edgecolor='k',
                  facecolor='none',
                  zorder=1)

# 添加海洋、陆地、河流、湖泊
ax.add_feature(cfeature.OCEAN.with_scale('50m'),zorder=0)
ax.add_feature(cfeature.LAND.with_scale('50m'),zorder=0)
ax.add_feature(cfeature.RIVERS.with_scale('50m'),zorder=0)
ax.add_feature(cfeature.LAKES.with_scale('50m'),zorder=0)

# 设置并添加经纬度标签
xticks = [55, 65, 75, 85, 95, 105, 115, 125, 135, 145, 155, 165]
yticks = [0 , 5 , 10, 15, 20, 25 , 30 , 35 , 40 , 45 , 50 , 55 , 60 , 65]

gl = ax.gridlines(xlocs=xticks, 
                  ylocs=yticks,
                  draw_labels=True,
                  x_inline=False, 
                  y_inline=False,
                  linewidth=1,
                  color='dimgrey',
                  alpha=0.5,
                  linestyle='--')

gl.top_labels = False 
gl.right_labels = False 
gl.xformatter = LONGITUDE_FORMATTER  
gl.yformatter = LATITUDE_FORMATTER  

# 添加南海附图
sub_ax = fig.add_axes([0.75, 0.102, 0.15, 0.2],
                      projection=ccrs.LambertConformal(central_latitude=90,
                                                       central_longitude=105))

# 添加海洋、陆地、河流、湖泊
sub_ax.add_feature(cfeature.OCEAN.with_scale('50m'))
sub_ax.add_feature(cfeature.LAND.with_scale('50m'))
sub_ax.add_feature(cfeature.RIVERS.with_scale('50m'))
sub_ax.add_feature(cfeature.LAKES.with_scale('50m'))

# 设置南海附图范围
sub_ax.set_extent([106, 120, 2, 24], crs=ccrs.PlateCarree())
sub_ax.add_geometries(city.geometry, crs=ccrs.PlateCarree(), edgecolor='k', facecolor='none')

plt.show()

结果展示

市级行政区划底图

作为展示,本文只展示了市级行政区划的底图,大家可以替换数据进行省、县级的行政区划展示。

推荐阅读

欢迎关注我的公众号“AI拾贝”,原创技术文章第一时间推送。后台发送ChinaMap,自动回复源码和数据。

<think>嗯,用户想了解如何使用Python绘制地图。首先,我需要考虑用户可能的背景和需求。可能是数据分析师、学生或者对地理数据可视化感兴趣的人。他们可能需要一个从基础到进阶的指南,涵盖不同的库和方法。 首先,常见的Python地图绘制库有哪些呢?Basemap虽然经典,但已经停止维护了,所以应该推荐替代品,比如Cartopy。此外,Folium适合交互式地图,Plotly Express简单易用,GeoPandas处理地理数据更专业。需要分别介绍这些库的特点和使用场景。 接下来,用户可能需要安装指导。比如Cartopy的安装可能涉及多个依赖,需要给出pip命令。Folium和Plotly相对容易安装,GeoPandas可能复杂一些,特别是GDAL依赖。这里需要提醒用户注意安装时的潜在问题,比如系统依赖或本兼容性。 然后,每个库的示例代码是必要的。用户需要看到具体的实现步骤。例如,使用Cartopy绘制海岸线和国家边界,或者Folium生成带有标记的交互式地图。每个示例应该简洁明了,并附有解释,帮助用户理解代码的作用。 还要考虑不同库的优缺点。比如Cartopy适合静态地图,学术用途;Folium适合网页应用,交互性强;Plotly适合快速生成在线图表;GeoPandas适合处理复杂的地理数据操作。用户可能根据项目需求选择合适的工具。 另外,数据源的问题。比如自然地球数据在Cartopy中的自动下载,或者Folium使用OpenStreetMap的底图。如果用户需要自定义地理数据,可能需要指导他们如何加载Shapefile或GeoJSON文件,这时候GeoPandas就派上用场了。 可能还需要提到地图投影的重要性,比如Cartopy支持多种投影方式,这对于展示全球或区域数据时的变形处理很重要。比如PlateCarree和Robinson投影的区别和应用场景。 最后,常见问题或错误处理。例如,安装Cartopy时可能遇到的Proj错误,或者Folium地图在Jupyter笔记本中无法显示的问题。应该给出一些排查建议,比如更新库本,检查网络连接,或者安装必要的系统依赖。 总结下来,回答需要结构清晰,分步骤介绍不同库,提供安装命令和示例代码,并比较它们的适用场景,帮助用户根据具体需求选择最合适的工具。同时,语言要简洁,避免过于技术性的术语,确保不同水平的用户都能理解。</think>Python绘制地图的常用方法可以分为以下几个步骤,我将从工具选择到具体实现逐步说明: 1. **工具选择** 常用库推荐: - Cartopy(替代Basemap的专业地理绘图库) - Folium(基于Leaflet的交互式地图) - Plotly Express(快速生成在线地图) - GeoPandas(地理数据处理+基础绘图) 2. **环境准备** ```bash # 安装核心库 pip install cartopy folium plotly geopandas ``` 3. **基础实现方法** ▶ **Cartopy示例(静态地图)** ```python import matplotlib.pyplot as plt import cartopy.crs as ccrs fig = plt.figure(figsize=(10, 6)) ax = fig.add_subplot(1, 1, 1, projection=ccrs.PlateCarree()) ax.coastlines() # 绘制海岸线 ax.add_feature(cartopy.feature.BORDERS) # 国界线 ax.gridlines() # 网格线 plt.show() ``` ▶ **Folium示例(交互式地图)** ```python import folium # 创建以北京为中心的地图 m = folium.Map(location=[39.9, 116.4], zoom_start=10) folium.Marker([39.9, 116.4], popup='北京').add_to(m) m.save('beijing_map.html') ``` 4. **进阶功能实现** ▶ **绘制等值线图(Cartopy)** ```python import numpy as np # 生成模拟数据 lons = np.linspace(-180, 180, 360) lats = np.linspace(-90, 90, 180) data = np.random.rand(180, 360) # 绘制 ax.contourf(lons, lats, data, transform=ccrs.PlateCarree()) ax.add_feature(cartopy.feature.LAND) ``` ▶ **GeoJSON数据可视化(GeoPandas)** ```python import geopandas as gpd world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres')) world.plot(column='gdp_md_est', legend=True) plt.show() ``` 5. **常见问题处理** - 地图投影选择:根据需求选择合适投影(`Robinson`, `Mercator`等) ```python ax = plt.axes(projection=ccrs.Robinson()) ``` - 中文标注问题:需额外配置中文字体 - 数据源推荐:Natural Earth(免费基础数据)、高德/百度API(实时数据) 6. **性能优化建议** - 大数据量时使用`Datashader` - 使用`contextily`添加底图 - 矢量数据优先使用GeoJSON格式 不同场景推荐方案: - 学术论文:Cartopy+Matplotlib - 网页交互:Folium/Plotly - 数据分析:GeoPandas基础绘图 - 实时数据:结合地图API使用 实际应用中建议先明确: 1. 需要静态图还是交互式展示? 2. 数据量级和格式要求? 3. 是否需要专业地理坐标系转换? 可以通过以下方式获取更多帮助: ```python import cartopy print(cartopy.config['data_dir']) # 查看地图数据存储路径 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值