不同投影方式的原理和适用情况
地图投影是将地球的三维表面投影到二维平面上的方法。由于地球是球体,而地图是平面,投影过程中不可避免地会产生变形。不同的投影方式适用于不同的应用场景,以下是几种常见投影方式的原理和适用情况:
1. 等距圆柱投影(Plate Carree)
- 原理:将地球的经纬度直接映射到平面直角坐标系,经线和纬线都是等距的平行直线。
- 特点:
- 简单直观,易于计算。
- 高纬度地区变形严重,面积和形状失真。
- 适用情况:
- 适用于小范围地图或需要简单投影的场景。
- 常用于地理信息系统(GIS)和遥感影像的初始处理。
2. 罗宾逊投影(Robinson)
- 原理:一种折衷投影,试图在面积、形状和距离之间取得平衡。
- 特点:
- 全球地图的整体视觉效果较好。
- 高纬度地区仍有变形,但比等距圆柱投影更合理。
- 适用情况:
- 适用于世界地图的展示。
- 常用于教育和出版领域。
3. 墨卡托投影(Mercator)
- 原理:将地球投影到一个圆柱体上,然后展开圆柱体。
- 特点:
- 保持方向和角度的准确性,适合航海导航。
- 高纬度地区面积变形严重,极地地区无法显示。
- 适用情况:
- 适用于航海和航空导航。
- 常用于网络地图(如 Google Maps)。
4. 正射投影(Orthographic)
- 原理:将地球投影到一个切平面上,类似于从太空看地球的效果。
- 特点:
- 视觉效果逼真,适合展示半球或局部区域。
- 仅能显示地球的一部分,边缘变形严重。
- 适用情况:
- 适用于展示半球或局部区域。
- 常用于科学可视化或艺术效果图。
示例代码分块说明
1. 导入库
import cartopy.crs as ccrs
import cartopy.feature as cfeature
import matplotlib.pyplot as plt
- 功能:导入所需的库。
cartopy.crs
:用于定义地图投影。cartopy.feature
:用于添加地理特征(如海岸线、国界线等)。matplotlib.pyplot
:用于绘图。
2. 设置 matplotlib 的字体和符号显示
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
- 功能:设置 matplotlib 的中文字体和解决负号显示问题。
SimHei
是一种常用的中文字体。axes.unicode_minus=False
确保负号正常显示。
3. 定义投影方式和标题
projections = [
ccrs.PlateCarree(),
ccrs.Robinson(),
ccrs.Mercator(),
ccrs.Orthographic(central_longitude=0, central_latitude=90)
]
titles = ['等距圆柱投影', '罗宾逊投影', '墨卡托投影', '正射投影(北极视角)']
- 功能:定义四种投影方式和对应的标题。
4. 创建子图布局
fig, axes = plt.subplots(2, 2, figsize=(14, 10),
subplot_kw={'projection': projections[0]})
- 功能:创建一个 2x2 的子图布局,设置整体画布大小为 14x10,并初始化第一个子图的投影方式。
5. 遍历子图并设置投影方式
for i, ax in enumerate(axes.flat):
ax.remove() # 移除默认的子图
ax = fig.add_subplot(2, 2, i+1, projection=projections[i]) # 重新添加子图,并设置投影方式
ax.set_global() # 设置地图范围为全球
# 添加地理特征
ax.add_feature(cfeature.COASTLINE, linewidth=0.5) # 添加海岸线
ax.add_feature(cfeature.BORDERS, linestyle=':', linewidth=0.5) # 添加国界线
ax.add_feature(cfeature.LAND, edgecolor='black', facecolor='lightgray') # 添加陆地
ax.add_feature(cfeature.OCEAN, facecolor='lightblue') # 添加海洋
# 添加网格线
ax.gridlines(linestyle='--', color='gray', linewidth=0.5)
# 设置子图标题
ax.set_title(titles[i], fontsize=12, pad=10)
- 功能:遍历每个子图,设置不同的投影方式,并添加地理特征和网格线。
6. 调整子图布局
plt.tight_layout()
- 功能:自动调整子图之间的间距,避免重叠。
7. 显示绘图
plt.show()
- 功能:显示绘图窗口。
Comments NOTHING