Можно ли сопоставить вершины многоугольника matplotlib в массив?Python

Программы на Python
Ответить
Anonymous
 Можно ли сопоставить вершины многоугольника matplotlib в массив?

Сообщение Anonymous »

Я пытаюсь создать маскирующий массив для глобальной карты, используя шейп-файлы. Мне удалось заставить правильный шейп-файл работать таким образом, что теперь я могу построить нужную мне область, используя многоугольник matplotlib. Но я просто не могу понять, как сопоставить эту форму с массивом по моему выбору.
Например, я хотел бы сопоставить форму Северной Атлантического океана с глобальной сеткой с разрешением 0,1 градуса (см. код ниже). Можно ли каким-то образом получить координаты созданного мной многоугольника и сопоставить их с массивом Grid в коде?
Шейп-файл взят из https://marineregions.org/downloads.php «Глобальные океаны и моря».

Код: Выделить всё

from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon
from matplotlib.collections import PatchCollection
from matplotlib.patches import PathPatch
import numpy as np

idir           =  "shp.files"

ifn            =  "goas_v01"
ifp            =  "{0:s}/{1:s}".format(idir,ifn)

sres           =  0.1
decim          =  int(-np.log10(sres))
lat_grid       =  np.arange( -90, 90+sres,sres).round(decim)
lon_grid       =  np.arange(-180,180     ,sres).round(decim)
lat_size       =  len(lat_grid)
lon_size       =  len(lon_grid)
grid           =  np.zeros((lat_size,lon_size))

mapargs        =  {
"llcrnrlon" :-180 ,
"urcrnrlon" : 180 ,
"llcrnrlat" : -90 ,
"urcrnrlat" : 90  ,
"projection":"cyl",
"lat_0"     : 0   ,
"lon_0"     : 0   ,
}

fig,ax      =  plt.subplots(1,1)

patches     =  []

map         =  Basemap(**mapargs)

map.drawmapboundary()
map.drawcoastlines()

shpf        =  map.readshapefile("{0:s}".format(ifp),"{0:s}".format(ifn),drawbounds = False)

infos       =  map.goas_v01_info
shps        =  map.goas_v01

msize       =  len(infos)

trg_nm      =  "North Atlantic Ocean"

for m in range(msize):

info     =  infos [m]
rngnum   =  info  ["RINGNUM"]
nm       =  info  ["name"]
shp      =  shps  [m]

if (nm == trg_nm and rngnum == 1):
patches.append(Polygon(np.array(shp), closed=True))

ax.add_collection(PatchCollection(patches, facecolor= 'm', edgecolor='k', linewidths=1., zorder=2))

plt.show()
Итак, я хотел бы сопоставить фиолетовую область (см. рисунок)
Изображение

в массив сетки с размерами (1801,3600) как значение 1 для каждой точки.>

Подробнее здесь: https://stackoverflow.com/questions/798 ... o-an-array
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»