如何在ccrs.Mecator投影上绘制经纬度直线
时间: 2024-11-03 12:13:41 浏览: 13
chap12_exam_code_2_绘制飞机_
在Cartopy库中,使用ccrs.Mercator投影绘制经纬度之间的直线通常需要通过地理坐标系统(Geodetic Coordinate System)而非直角坐标系(Projected Coordinate System)。这是因为Mercator是一种投影,直线在地球上并不总是直的。为此,你需要计算两点之间的大圆航线。
以下是一个简单的步骤示例:
1. 导入必要的库:
```python
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature
```
2. 定义起点和终点经纬度:
```python
start_lon, start_lat = 0, 50 # 起点经纬度
end_lon, end_lat = 10, 60 # 终点经纬度
```
3. 使用`geodesic`函数计算两点间的弧线距离:
```python
from geopy.distance import geodesic
distance, bearing = geodesic((start_lat, start_lon), (end_lat, end_lon)).km, 0 # 指向北方的角度
```
注意这里我们假设你想沿着北方向从起点到终点。
4. 创建一个新的Mercator轴,并绘制经度线和纬度线:
```python
fig, ax = plt.subplots(figsize=(8, 8), subplot_kw=dict(projection=ccrs.Mercator()))
ax.stock_img() # 添加底图
ax.coastlines(resolution='10m') # 绘制海岸线
ax.gridlines(crs=ccrs.PlateCarree(), draw_labels=True) # 绘制经纬网格
# 绘制大圆航线(假设沿北方向)
plt.plot([start_lon, end_lon], [start_lat, start_lat], transform=ccrs.Geodetic(), color='red', linewidth=2) # 经度线
plt.plot([start_lon, start_lon], [start_lat, end_lat], transform=ccrs.Geodetic(), color='blue', linewidth=2) # 纬度线
# 标注起点和终点
plt.scatter([start_lon], [start_lat], transform=ccrs.Geodetic(), s=50, color='black')
plt.scatter([end_lon], [end_lat], transform=ccrs.Geodetic(), s=50, color='black')
# 添加距离和方向信息
plt.text(0.5, 0.9, f"距离: {int(distance)} km, 方向: {bearing}°", transform=ax.transAxes, fontsize=10, color='gray')
plt.show()
```
这将显示一条大圆航线连接起点和终点,并在图例中显示距离和方向。
阅读全文