簡體   English   中英

cartopy 函數的替代方法(操縱形狀線串 - Geodetic)

[英]Alternative methods to cartopy functions (manipulating shapely linestrings - Geodetic)

長話短說,我無法在我的環境中安裝 cartopy,所以我正在尋找其他方法來做它可能用於的事情。

我最近一直在關注本教程,該教程使用 cartopy 改變形狀線串的路徑以考慮地球的曲率:

“Cartopy 可用於操縱繪制線條的方式。transform=ccrs.Geodetic() 方法轉換 LineStrings 以考慮地球曲率”

假設我可以用谷歌搜索地球曲率的實際值,有沒有什么方法可以手動操縱線串以達到大致相同的效果?

自己實現大圓算法可能是可行的,但也有其他選擇。 例如,如果您管理安裝pyproj ,則可以使用下面的示例,它對地球上兩個位置之間給定數量的點進行采樣。

請注意,雖然我仍然使用 Cartopy 來顯示海岸線(供參考),但線(大圓)的實際繪圖完全獨立於 Cartopy,並且也可以與普通的 Matplotlib 軸一起使用。

你也可以在沒有 Cartopy 的情況下為你的 map 讀取海岸線或其他邊界/注釋等,只要你注意投影。 Matplotlib 具有執行此操作的所有原語(線條、PathCollections 等),只是 Cartopy 使它更方便。

import matplotlib.pyplot as plt
import cartopy.crs as ccrs
from pyproj import Geod

# from
lat1 = 55.
lon1 = -65

# to
lat2 = 30
lon2 = 80

n_samples = 1000

g = Geod(ellps='WGS84')
coords = g.npts(
    lon1, lat1, lon2, lat2, n_samples, initial_idx=0, terminus_idx=0,
)
lons, lats = zip(*coords)

fig, ax = plt.subplots(
    figsize=(10,5), dpi=86, facecolor="w", 
    subplot_kw=dict(projection=ccrs.PlateCarree(), xlim=(-180,180), ylim=(-90, 90)),
)
ax.axis("off")
ax.coastlines(lw=.3)

ax.plot(lons, lats, "r-") # <- no cartopy, just x/y points! 

在此處輸入圖像描述

您采樣的點數可能應該取決於兩點之間的距離,這也可以使用g.inv(...) function 來計算。數量是准確性和性能之間的權衡。 對於大多數應用程序,您可能希望將其保持得盡可能低,剛好高於您開始明顯看到效果的位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM