python模块安装系列之cartopy的whl文件下载和安装教程
·
Cartopy whl文件安装详细教程
一、下载whl文件
1. 准备工作:检查系统环境
# 查看Python版本
python --version
# 查看系统位数(Windows)
echo %PROCESSOR_ARCHITECTURE%
# 或者使用Python查看
python -c "import platform; print(f'系统: {platform.system()} {platform.architecture()[0]}')"
2. Cartopy依赖包(必须先安装)
Cartopy需要以下依赖,按顺序安装:
必需依赖whl文件(先安装这些):
- PROJ(地理投影库)
- GEOS(几何引擎)
- Shapely(几何操作)
- pyproj(坐标转换)
3. 下载(Windows用户)
首先为了顺利安装这个模块,我们需要下载whl文件,可以尝试去github搜仓库pythonlibs_whl_mirror,然后找到对应版本whl文件,之后进行一个步骤安装
4. 下载文件列表(按顺序下载)
| 包名 | 推荐版本 | 文件名示例 |
|---|---|---|
| GEOS | 3.11.1 | GEOS-3.11.1-cp39-cp39-win_amd64.whl |
| Shapely | 1.8.5 | Shapely-1.8.5-cp39-cp39-win_amd64.whl |
| pyproj | 3.5.0 | pyproj-3.5.0-cp39-cp39-win_amd64.whl |
| Cartopy | 0.21.1 | Cartopy-0.21.1-cp39-cp39-win_amd64.whl |
注意:将cp39替换为您的Python版本(如cp38、cp310等)
二、安装步骤(必须按顺序)
步骤1:安装基础依赖
# 打开CMD,切换到下载目录
cd C:\Users\你的用户名\Downloads
# 1. 安装GEOS(必须先安装)
pip install GEOS-3.11.1-cp39-cp39-win_amd64.whl
# 2. 安装Shapely
pip install Shapely-1.8.5-cp39-cp39-win_amd64.whl
# 3. 安装pyproj
pip install pyproj-3.5.0-cp39-cp39-win_amd64.whl
步骤2:安装Cartopy
# 4. 安装Cartopy主包
pip install Cartopy-0.21.1-cp39-cp39-win_amd64.whl
步骤3:安装可选依赖(推荐)
# 安装matplotlib(用于绘图)
pip install matplotlib
# 安装pyshp(用于读取shapefile)
pip install pyshp
# 安装scipy(用于插值等操作)
pip install scipy
三、验证安装
测试1:基础导入测试
# test_cartopy_basic.py
print("=== Cartopy 基础测试 ===")
# 测试1:检查版本
try:
import cartopy
print(f"✓ Cartopy版本: {cartopy.__version__}")
except ImportError as e:
print(f"✗ Cartopy导入失败: {e}")
exit(1)
# 测试2:检查依赖
try:
import shapely
print(f"✓ Shapely版本: {shapely.__version__}")
except ImportError as e:
print(f"✗ Shapely导入失败: {e}")
try:
import pyproj
print(f"✓ pyproj版本: {pyproj.__version__}")
except ImportError as e:
print(f"✗ pyproj导入失败: {e}")
# 测试3:检查CRS(坐标参考系统)
try:
import cartopy.crs as ccrs
print("✓ 坐标参考系统模块可用")
except Exception as e:
print(f"✗ CRS模块错误: {e}")
# 测试4:检查要素模块
try:
import cartopy.feature as cfeature
print("✓ 地理要素模块可用")
except Exception as e:
print(f"✗ 要素模块错误: {e}")
print("\n✅ Cartopy基础测试完成")
测试2:简单地图绘制
# cartopy_simple_map.py
"""
Cartopy 简单地图绘制示例
绘制中国地图并标记主要城市
"""
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature
import numpy as np
def create_china_map():
"""创建中国地图"""
print("正在创建中国地图...")
# 1. 创建图形和坐标轴
fig = plt.figure(figsize=(12, 8))
# 使用PlateCarree投影(经纬度坐标)
ax = plt.axes(projection=ccrs.PlateCarree())
# 2. 设置地图范围(中国区域)
ax.set_extent([70, 140, 15, 55], crs=ccrs.PlateCarree())
# 3. 添加地理特征
print("添加地理特征...")
# 添加海岸线
ax.add_feature(cfeature.COASTLINE.with_scale('50m'), linewidth=0.8)
# 添加国界
ax.add_feature(cfeature.BORDERS.with_scale('50m'), linewidth=0.5, linestyle=':')
# 添加河流
ax.add_feature(cfeature.RIVERS.with_scale('50m'), linewidth=0.5, alpha=0.5)
# 添加湖泊
ax.add_feature(cfeature.LAKES.with_scale('50m'), alpha=0.5)
# 添加陆地颜色
ax.add_feature(cfeature.LAND.with_scale('50m'), facecolor='lightgray', alpha=0.3)
# 添加海洋颜色
ax.add_feature(cfeature.OCEAN.with_scale('50m'), facecolor='lightblue', alpha=0.3)
# 4. 标记中国主要城市
cities = {
'北京': (116.4, 39.9),
'上海': (121.47, 31.23),
'广州': (113.23, 23.16),
'成都': (104.06, 30.67),
'武汉': (114.31, 30.52),
'西安': (108.94, 34.26),
'哈尔滨': (126.53, 45.80),
'乌鲁木齐': (87.62, 43.82),
'拉萨': (91.11, 29.65),
'海口': (110.35, 20.02)
}
print("标记主要城市...")
for city, (lon, lat) in cities.items():
ax.plot(lon, lat, 'ro', markersize=6, transform=ccrs.PlateCarree())
ax.text(lon + 0.5, lat + 0.5, city,
transform=ccrs.PlateCarree(),
fontsize=9,
fontproperties='SimHei' if city in ['北京', '上海', '广州'] else 'Arial',
bbox=dict(boxstyle="round,pad=0.2", facecolor="yellow", alpha=0.5))
# 5. 添加网格线
gl = ax.gridlines(draw_labels=True, linewidth=0.5, color='gray', alpha=0.5, linestyle='--')
gl.top_labels = False
gl.right_labels = False
# 6. 添加标题
plt.title('中国地图 - 主要城市分布', fontsize=16, fontweight='bold', pad=20)
# 7. 保存图片
plt.savefig('china_map.png', dpi=300, bbox_inches='tight')
print("地图已保存为 'china_map.png'")
plt.show()
return fig, ax
def test_projection():
"""测试不同地图投影"""
print("\n=== 测试不同地图投影 ===")
projections = [
('PlateCarree', ccrs.PlateCarree(), "等经纬度投影"),
('Robinson', ccrs.Robinson(), "罗宾逊投影"),
('Mercator', ccrs.Mercator(), "墨卡托投影"),
('Orthographic', ccrs.Orthographic(central_longitude=105, central_latitude=35), "正射投影(中国视角)"),
('LambertConformal', ccrs.LambertConformal(central_longitude=105, central_latitude=35), "兰伯特正形圆锥投影")
]
fig = plt.figure(figsize=(15, 10))
for i, (name, proj, desc) in enumerate(projections, 1):
ax = fig.add_subplot(2, 3, i, projection=proj)
# 设置中国区域
if name != 'Orthographic':
ax.set_extent([70, 140, 15, 55], crs=ccrs.PlateCarree())
# 添加特征
ax.add_feature(cfeature.COASTLINE.with_scale('50m'), linewidth=0.5)
ax.add_feature(cfeature.BORDERS.with_scale('50m'), linewidth=0.3, linestyle=':')
ax.add_feature(cfeature.LAND.with_scale('50m'), facecolor='lightgray', alpha=0.3)
# 标记北京
ax.plot(116.4, 39.9, 'ro', markersize=4, transform=ccrs.PlateCarree())
ax.set_title(f'{name}\n{desc}', fontsize=10)
plt.suptitle('Cartopy 不同地图投影对比', fontsize=16, fontweight='bold')
plt.tight_layout()
plt.savefig('projections.png', dpi=300)
print("投影测试图已保存为 'projections.png'")
plt.show()
if __name__ == "__main__":
try:
print("=" * 60)
print("Cartopy 安装测试和示例")
print("=" * 60)
# 测试1:创建中国地图
fig1, ax1 = create_china_map()
# 测试2:测试不同投影
test_projection()
print("\n" + "=" * 60)
print("✅ Cartopy 安装成功!所有功能正常")
print("=" * 60)
except Exception as e:
print(f"\n❌ 发生错误: {e}")
import traceback
traceback.print_exc()
测试3:高级功能示例
# cartopy_advanced_demo.py
"""
Cartopy 高级功能示例
包含数据可视化、自定义特征和交互功能
"""
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature
import numpy as np
from matplotlib.colors import LinearSegmentedColormap
def temperature_map():
"""创建温度分布图"""
print("创建温度分布图...")
# 创建自定义颜色映射
colors = ['blue', 'cyan', 'green', 'yellow', 'red']
cmap = LinearSegmentedColormap.from_list('temperature', colors, N=256)
# 创建图形
fig = plt.figure(figsize=(14, 8))
ax = fig.add_subplot(1, 1, 1, projection=ccrs.PlateCarree())
# 设置全球范围
ax.set_global()
# 添加基础特征
ax.add_feature(cfeature.COASTLINE, linewidth=0.5)
ax.add_feature(cfeature.LAND, facecolor='lightgray', alpha=0.3)
ax.add_feature(cfeature.OCEAN, facecolor='lightblue', alpha=0.3)
# 模拟温度数据
lons = np.linspace(-180, 180, 360)
lats = np.linspace(-90, 90, 180)
lon_grid, lat_grid = np.meshgrid(lons, lats)
# 创建模拟温度分布(简单模型)
# 假设温度随纬度变化,赤道最热,两极最冷
temperature = 30 * np.cos(np.deg2rad(lat_grid)) + np.random.randn(*lat_grid.shape) * 5
# 绘制温度分布
contour = ax.contourf(lon_grid, lat_grid, temperature,
levels=20, cmap=cmap,
transform=ccrs.PlateCarree(),
alpha=0.7)
# 添加等温线
ax.contour(lon_grid, lat_grid, temperature,
levels=10, colors='black',
linewidths=0.5, transform=ccrs.PlateCarree(),
alpha=0.5)
# 添加色标
cbar = plt.colorbar(contour, ax=ax, orientation='horizontal',
pad=0.05, shrink=0.8)
cbar.set_label('Temperature (°C)', fontsize=12)
# 添加标题
plt.title('Global Temperature Distribution (Simulated)',
fontsize=16, fontweight='bold', pad=20)
# 添加网格
gl = ax.gridlines(draw_labels=True, linewidth=0.5,
color='gray', alpha=0.5, linestyle='--')
gl.top_labels = False
gl.right_labels = False
plt.tight_layout()
plt.savefig('temperature_map.png', dpi=300)
print("温度分布图已保存为 'temperature_map.png'")
plt.show()
def custom_features():
"""创建自定义地理特征"""
print("\n创建自定义地理特征图...")
fig = plt.figure(figsize=(12, 8))
# 使用兰伯特投影显示美国
projection = ccrs.LambertConformal(central_longitude=-96, central_latitude=39)
ax = fig.add_subplot(1, 1, 1, projection=projection)
# 设置美国范围
ax.set_extent([-125, -66, 24, 50], crs=ccrs.PlateCarree())
# 添加高分辨率特征
ax.add_feature(cfeature.STATES.with_scale('50m'), linewidth=0.3, edgecolor='gray')
ax.add_feature(cfeature.COASTLINE.with_scale('50m'), linewidth=0.8)
ax.add_feature(cfeature.BORDERS.with_scale('50m'), linewidth=1)
# 添加主要河流
ax.add_feature(cfeature.RIVERS.with_scale('50m'), linewidth=0.5, edgecolor='blue', alpha=0.6)
# 添加湖泊
ax.add_feature(cfeature.LAKES.with_scale('50m'), facecolor='blue', alpha=0.3)
# 标记主要城市
us_cities = {
'New York': (-74.0, 40.7),
'Los Angeles': (-118.2, 34.1),
'Chicago': (-87.6, 41.9),
'Houston': (-95.4, 29.8),
'Miami': (-80.2, 25.8),
'Seattle': (-122.3, 47.6)
}
for city, (lon, lat) in us_cities.items():
ax.plot(lon, lat, 's', color='red', markersize=8,
transform=ccrs.PlateCarree())
ax.text(lon + 0.5, lat + 0.5, city,
transform=ccrs.PlateCarree(),
fontsize=9, fontweight='bold',
bbox=dict(boxstyle="round,pad=0.2", facecolor="white", alpha=0.8))
# 添加自定义区域(比如标记中部平原)
from cartopy.mpl.patch import geos_to_path
import matplotlib.patches as mpatches
# 创建一个简单的矩形区域(示例)
rectangle = mpatches.Rectangle((-105, 35), 10, 10,
facecolor='green', alpha=0.2,
transform=ccrs.PlateCarree())
ax.add_patch(rectangle)
ax.text(-100, 40, 'Great Plains',
transform=ccrs.PlateCarree(),
fontsize=10, style='italic')
plt.title('United States - Major Cities and Features',
fontsize=16, fontweight='bold')
# 添加比例尺
import matplotlib.transforms as mtransforms
ax.add_artist(mpatches.Rectangle((-120, 25), 10, 1,
facecolor='black',
transform=ccrs.PlateCarree()))
ax.text(-115, 26.5, '1000 km',
transform=ccrs.PlateCarree(),
fontsize=8)
plt.tight_layout()
plt.savefig('us_map_custom.png', dpi=300)
print("自定义特征图已保存为 'us_map_custom.png'")
plt.show()
if __name__ == "__main__":
try:
print("=" * 60)
print("Cartopy 高级功能演示")
print("=" * 60)
# 运行示例
temperature_map()
custom_features()
print("\n" + "=" * 60)
print("✅ Cartopy 高级功能测试完成!")
print("=" * 60)
except Exception as e:
print(f"\n❌ 发生错误: {e}")
import traceback
traceback.print_exc()
四、常见错误解决
错误1:缺少依赖
ModuleNotFoundError: No module named 'shapely'
解决:确保按顺序安装了所有依赖包
错误2:PROJ版本问题
CRSError: Invalid projection: epsg:xxxx
解决:
# 更新PROJ数据(在线运行)
pip install pyproj
python -c "import pyproj; pyproj.datadir.set_data_dir(pyproj.datadir.get_data_dir())"
错误3:whl文件不兼容
ERROR: Cartopy-0.21.1-cp39-cp39-win_amd64.whl is not a supported wheel on this platform
解决:
- 确认Python版本:
python --version - 确认系统位数:64位系统用
win_amd64,32位用win32 - 下载对应版本的whl文件
错误4:安装顺序错误
如果安装顺序错误,需要完全卸载后重新安装:
# 卸载所有相关包
pip uninstall cartopy shapely pyproj -y
# 删除缓存
pip cache purge
# 按正确顺序重新安装
pip install GEOS-*.whl
pip install Shapely-*.whl
pip install pyproj-*.whl
pip install Cartopy-*.whl
五、运行测试
# 运行基础测试
python test_cartopy_basic.py
# 运行简单地图示例
python cartopy_simple_map.py
# 运行高级示例
python cartopy_advanced_demo.py
六、注意事项
- 安装顺序至关重要:必须按 GEOS → Shapely → pyproj → Cartopy 顺序安装
- Python版本匹配:所有whl文件的Python版本必须一致
- 系统架构一致:所有包必须都是64位或都是32位
- 网络问题:如果从UCI下载,有时需要尝试多个版本
- 数据文件:Cartopy第一次运行时可能需要下载地图数据,确保网络畅通
按照这个流程,您应该能成功安装并使用Cartopy进行地理数据可视化!
更多推荐


所有评论(0)