Северная полярная стереографическая проекция не работает

Эта функция рекурсивно закроет дерево каталогов, сжимает файлы и записывает правильные относительные имена файлов в архиве. Записи архива совпадают с файлами, созданными с помощью zip -r output.zip source_dir.

import os
import zipfile
def make_zipfile(output_filename, source_dir):
    relroot = os.path.abspath(os.path.join(source_dir, os.pardir))
    with zipfile.ZipFile(output_filename, "w", zipfile.ZIP_DEFLATED) as zip:
        for root, dirs, files in os.walk(source_dir):
            # add directory (needed for empty dirs)
            zip.write(root, os.path.relpath(root, relroot))
            for file in files:
                filename = os.path.join(root, file)
                if os.path.isfile(filename): # regular files only
                    arcname = os.path.join(os.path.relpath(root, relroot), file)
                    zip.write(filename, arcname)
0
задан Phil 8 March 2019 в 11:27
поделиться

1 ответ

Использование азимутального типа проекции карты всегда требует набора правильных параметров для получения хорошего результата. В этом случае стереографическая проекция центрирована на северном полюсе, ее правильные параметры не соответствуют тем, которые вы обычно используете при реализации с проекцией PlateCaree, которая часто используется. Вот рабочий код, который вы можете попробовать.

# Stereographic projection coverage
#   should be specified less than half of a hemisphere

from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np

m = Basemap(projection='stere', resolution='c',
        lat_0=90, lon_0=270,  lat_ts=(90.+35.)/2., width=15000000, height=10000000)
# (width, height) is the plot extents in meters

m.drawmeridians(np.arange(0, 360, 30), labels=[1,1,1,0])
m.drawparallels(np.arange(0, 90, 10), labels=[0,0,0,1])
m.drawcoastlines()
m.shadedrelief()
plt.show()

Результирующий сюжет (карта 1):

enter image description here

Чтобы получить другую часть мира в область построения достигается путем повторного центрирования карты.

from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np

# projection center point
lon0 = 180
lat0 = 60

m = Basemap(projection='stere', resolution='c',
        lat_0=lat0, lon_0=lon0,  lat_ts=lat0, width=15000000, height=10000000)

m.drawmeridians(np.arange(0, 360, 30), labels=[1,0,0,1])  # left, right, top, bottom
m.drawparallels(np.arange(0, 90, 10), labels=[0,1,1,0])
m.drawcoastlines()
m.shadedrelief()
plt.show()

Выходной график (карта 2):

enter image description here

Указав правильные значения llcrnrlon, urcrnrlon, llcrnrlat, urcrnrlat, в Basemap() можно получить экстенты карты по мере необходимости. Вот еще один пример сюжета по просьбе ФП.

from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure(figsize=(8,8))
m = Basemap(projection='stere', resolution='c',
        lat_0=90, lon_0=-90,  lat_ts=(90.+35.)/2.,
        llcrnrlon=-142, urcrnrlon=78, llcrnrlat=19, urcrnrlat=45)

m.drawmeridians(np.arange(0, 360, 30), labels=[1,0,1,0])  # left, right, top, bottom
m.drawparallels(np.arange(0, 90, 10), labels=[0,1,0,1])
m.drawcoastlines()
m.shadedrelief()
plt.show()

Полученный сюжет (карта 3):

map3

0
ответ дан swatchai 8 March 2019 в 11:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: