Ускорение заговора с высоким разрешением с Cartopy - PullRequest
0 голосов
/ 11 апреля 2020

Я хотел бы ускорить выполнение этого кода:

import cartopy.crs as ccrs
from cartopy.feature import NaturalEarthFeature
import matplotlib.pyplot as plt

# the extent in the original code is calculated on the fly
extent = [0, 50, 20, 60]

plt.figure("Test Map")
ax = plt.subplot(111, projection=ccrs.PlateCarree())
ax.set_extent(extent, crs=ccrs.PlateCarree())

ax.add_feature(NaturalEarthFeature('physical', 'ocean', '50m'))

plt.show()

Код в настоящее время занимает несколько секунд для визуализации полученного графика. Когда я перемещаюсь в полученном графике, я вижу, что cartopy фактически построил все многоугольники! cartopy имеет какие-либо функции отсечения?

1 Ответ

1 голос
/ 14 апреля 2020

Короткий ответ: нет, CartoPy не имеет никаких встроенных операций отсечения. Однако Shapely, который использует CartoPy, делает.

Я предполагаю, что проблемы с производительностью, которые вы видите, находятся где-то на вашем собственном графике. Код, который вы разместили, работает в моей системе в течение ~ 45 мс. Вот пример, где вы можете использовать Shapely для вычисления пересечения объекта карты с полем экстента.

import cartopy.crs as ccrs
from cartopy.feature import NaturalEarthFeature
import matplotlib.pyplot as plt
import shapely.geometry as sgeom

# the extent in the original code is calculated on the fly
extent = [0, 50, 20, 60]

feat = NaturalEarthFeature('physical', 'ocean', '50m')
box = sgeom.box(extent[0], extent[2], extent[1], extent[3])
geoms = [geom.intersection(box) for geom in feat.geometries()]

plt.figure("Test Map")
ax = plt.subplot(111, projection=ccrs.PlateCarree())
ax.set_extent(extent, crs=ccrs.PlateCarree())

ax.add_geometries(geoms, crs=ccrs.PlateCarree())

plt.show()

Хотя этот пример на самом деле работает медленнее (~ 97 мс) для меня.

...