Basemap ve pickle modülü

Başlatan muhittin_kaplan, 21 Haziran 2017, 03:25:57

muhittin_kaplan

Merhaba,
Önceki yazımda basemap ile yapılmış bir harita uygulamasını gerçekleştirmiştik. Orada "haritanın daha hızlı açılmasını sağlamak" la alakalı bir cümle geçmişti. İşte bu yazıda onu yapacağız.

Pickle:
Nedir bu pickle modulü, bildiğiniz turşu. Evet turşu. Önce hazırlığınızı yapıyorsunuz, kavanoza malzemeleri koyup kapatıyorsunuz. Sonra lazım olduğunda "önceden hazırlanmış olan" malzemeleri alıp işliyorsunuz.

Bu işlemi veriye yapan Python modülüde "pickle".

Basemap bildiğiniz üzere harita verilerini hazırlayıp matplotlib de gösteriyor. Her defasında bu haritayı hazırlamak zaman/performans kaybına neden olacağından, birdefa hazırlayıp bir dosyaya kaydedip, daha sonra bu hazır verilerden oluşmuş dosyayı okusak sanırım daha verimli bir çalışma yapmış oluruz.
İsterseniz kodlarla devam edelim. (iyi yazsaydım zaten edebiyat felan okurdum)

Önce şu modüllerimizi alalım (anaconda yı yazmıştım)

from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import pickle
import os



sonra dosyamızı kontrol edelim ki pickle dosyamız varsa oradan okusun, yoksa hazırlayıp kaydetsin. Bu işlem uzun sürebilir. Benim cihaz da yaklaşık 15sn sürüyor. Her haritaya ihtiyacımız olduğunda bu bekleme süresi 15sn, beklemez kapatırım kullanıcı olsam.

if os.path.exists('map.pickle'): #map.pickle dosyası orada duruyormu ?
    print ('pickle dosyasından harita oluşturuluyor')
    m = pickle.load(open('map.pickle', 'rb')) #oku ve m olarak hafızaya al
else:
    print('Harita İlk kez oluşturulacak. Bu Yüzden İşlem Sona Erene Kadar Bekleyiniz !') #dosya yoksa mesajı yaz.
    m = Basemap(projection='mill', llcrnrlat=30, urcrnrlat=48, llcrnrlon=20, urcrnrlon=48, resolution='f')#haritayı oluştur -uzun süren yerimiz burası çünkü F çözünürlülük
    pickle.dump(m, open('map.pickle', 'wb'), -1)#turşunun kapağını kapat ;)
 
m.drawcoastlines(linewidth=1.5, linestyle='solid', color='k', antialiased=1, ax=None, zorder=None)
m.drawcountries(color='#A0A0A0')
m.drawstates(color='#A0A0A0')
m.fillcontinents()
m.drawmapboundary()
m.drawrivers()
 
Mlat,Mlon=39.925054,32.8347552
 
x, y = m(Mlon, Mlat)
m.plot(x, y, 'ro', markersize=2)
plt.title("Güzel Ülke")
plt.show()

Haritanın açılmasındaki hız farkı yaklaşık 1/10.

selametle...