如何计算屏幕上看到的坐标到Cartopy中的地理坐标(不交错)坐标

问题描述 投票:0回答:2

使用 Cartopy 给出兰伯特投影坐标中的两个点(BL 和 TR),如何计算屏幕上看到的左上角 (TL) 和右下角 (BR) 点的坐标到兰伯特投影中的坐标?我认为这个术语是“令人震惊的”,但我在 Cartopy 中找不到任何例子。

此处给出了重现这些点的代码:

import cartopy.crs as ccrs
import cartopy.feature as cfeature
import matplotlib.pyplot as plt

ll_lon, ll_lat = -10,40
ur_lon, ur_lat = 10,60
c_lon, c_lat = (ll_lon+ur_lon)/2, (ll_lat+ur_lat)/2

plt.figure(figsize=[12,12])

proj = ccrs.LambertConformal(central_longitude=c_lon, central_latitude=c_lat)

ax = plt.axes(projection=proj)
ax.set_extent([-25,+25,35,65], ccrs.PlateCarree())

ax.scatter(ll_lon,ll_lat, transform=ccrs.PlateCarree())
# ax.scatter(ur_lon,ll_lat, transform=ccrs.PlateCarree()) # incorrect
# ax.scatter(ll_lon,ur_lat, transform=ccrs.PlateCarree()) # incorrect
ax.scatter(ur_lon,ur_lat, transform=ccrs.PlateCarree())
ax.scatter(c_lon,c_lat, transform=ccrs.PlateCarree())

ax.add_feature(cfeature.OCEAN,facecolor='paleturquoise',alpha=0.4)
ax.add_feature(cfeature.BORDERS,edgecolor='black')
ax.add_feature(cfeature.COASTLINE,edgecolor='black')

gl = ax.gridlines(crs=ccrs.PlateCarree(), draw_labels=True, x_inline=False, y_inline=False, linewidth=0.33, color='k',alpha=0.5)
gl.right_labels = gl.top_labels = False
plt.show()

预先感谢您的帮助! :)

python coordinates cartopy coordinate-systems coordinate-transformation
2个回答
0
投票

从地理坐标

(λ1, φ1)
(西南)和
(λ2, φ2)
(东北)得到投影坐标
(x1, y1)
(x2, y2)
,则东南为
(x2, y1)
,西北为
(x1, y2)


0
投票

我想你想要

tranform_point
方法:

plot_proj = ccrs.LambertConformal(central_longitude=c_lon, central_latitude=c_lat)
source_proj = ccrs.PlateCarree()

# Get lower left and upper right points in Lambert Conformal system.
l_lcx, l_lcy = plot_proj.transform_point(ll_lon, ll_lat, source_proj)
r_lcx, u_lcy = plot_proj.transform_point(ur_lon, ur_lat, source_proj)

# Convert Lambert Conformal's upper left and lower right back to lat and lon.
ul_lon, ul_lat = source_proj.transform_point(l_lcx, u_lcy, plot_proj)
lr_lon, lr_lat = source_proj.transform_point(r_lcx, l_lcy, plot_proj)
© www.soinside.com 2019 - 2024. All rights reserved.