Шейп-файл чтения базовой карты Matplotlib очень медленный

Я пытаюсь построить простую карту «merc» с границей из файла формы. Общий размер шейп-файла ne_10m_admin_0_countries_lakes.shp составляет всего 8 МБ. Простой график поверхности mslp из данных GFS занял около 28 секунд, что я считаю слишком много. После расследования я обнаружил, что чтение шейп-файла занимает около 10 секунд. Простой код для демонстрации проблемы показан ниже:

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap


south = 0
north = 5
west = 70
east = 85

m = Basemap(projection='merc', llcrnrlat=south, urcrnrlat=north,
        llcrnrlon=west, urcrnrlon=east, resolution='c')
m.readshapefile('data/gis-data/world_countries/'
    'ne_10m_admin_0_countries_lakes', 'ne_10m_admin_0_countries_lakes', linewidth=0.7)

plt.savefig('map.png')

Чтобы показать проблему, с которой я столкнулся, я запустил приведенный выше код с комментарием пути к файлу формы и без него. Вот время, затраченное скриптом после чтения из шейп-файла:

$ time python test.py 
real    0m18.234s
user    0m17.832s
sys 0m1.020s

Вот результат без чтения из шейп-файла: -

$ time python test.py 
real    0m2.506s
user    0m2.360s
sys 0m0.324s

Есть ли способ быстро прочитать файл формы? Есть ли какое-нибудь решение/хитрость для этой проблемы?


person sundar_ima    schedule 08.02.2016    source источник
comment
Опубликовано как gis.stackexchange.com/q/180451/115   -  person PolyGeo    schedule 21.02.2016


Ответы (1)


Я бы задал этот вопрос и в геоинформационные системы, там есть люди, которые вам помогут. Если базовая карта работает медленно, пробовали ли вы cartopy, я видел это на сайте matplotlib, см. http://matplotlib.org/1.4.1/mpl_toolkits/index.html

person Andreas Müller    schedule 08.02.2016
comment
Спасибо за комментарий. Проблема здесь не в basemap. Это чтение шейп-файла. Я прочитал некоторые из файлов пользовательской формы. Где-то я читал, что pickle должно улучшить скорость прорисовки. Но не уверен, как это сделать. - person sundar_ima; 08.02.2016
comment
Но разве это не m = Basemap, чтобы экземпляр Basemap читал ваш шейп-файл? - person Andreas Müller; 09.02.2016
comment
Он может читать шейп-файл. Но это очень медленно. Мне нужно сгенерировать 100 изображений, и на их построение уходит много времени. - person sundar_ima; 10.02.2016