Python dilinde olan bazı geo-spacial komutlar kullanılarak basemap üzerine veriler nasıl çizdirilir buna bakacağız.
Kendi çalışmalarıma kaynak olarak kullanacağım bir yazıyı daha sizlere aktarıyor olacağım. Herkese iyi okumalar dilerim. Faydalı olması dileğiyle.
Okuyucular aşağıdaki puanı vermişler.
Bu yazıya, yorum yaparak sen de puan verebilirsin.
Hedefler
- Python ile coğrafi verilerin kullanımı.
- Canlı kızılötesi bir uydu verisinin yüklenmesi.
- Verilerin konumlarının uydu görüntüleri üzerine işlenmesi.
Python ile coğrafi verilerin kullanımı.
İlk olarak bir harita üzerinde, çalışma alanına karar vererek başlayacağız. Burada bizim ihtiyacımız olan şey seçeceğimiz alanın köşe koordinatlarıdır. Kaliforniyayı seçtik ve köşe koordinatlarını almamız gerekiyor. Bunun için bu web sitesini kullanıyoruz. (Tıklayın)
Bu koordinatları, basemap isimli python kütüphanesini kullanarak çalışma alanımıza ait haritayı ekrana çizdirmek için kullanıyoruz.
# Nessecary Imports import matplotlib.pyplot as plt from mpl_toolkits.basemap import Basemap # Make the figure plt.figure(figsize=(14, 14)) # Initialize the basemap m = Basemap(llcrnrlat = 30, llcrnrlon = -126, urcrnrlat = 45, urcrnrlon = -114, resolution='h') # Get the area of interest imagery m.arcgisimage(service='ESRI_Imagery_World_2D', xpixels = 2500, verbose= True,alpha= .6) # Draw the coasts m.drawcoastlines(color='blu', linewidth=3) # Draw the states m.drawstates(color='red',linewidth=3)
Şimdi bunu daha spesifik bir veriyi çizdirmek için de kullanabilirsiniz. Örneğin, sadece bir şehrin nüfus yoğunluğunu çizmek istiyorsanız, bunu kolayca yapabilirsiniz. Aşağıda bunun bir örneğini vereceğim.
(Tıklayın) Bu bağlantıda ki veri, buradaki yoğunluk haritasının altlığını oluşturacak. Kaliforniye şehrine ait nufus verilerine buradan ulaşabiliyoruz. Daha sonra bunu çizdirelim.
import pandas as pd import numpy as np # Read in data on all cities cities = pd.read_csv('uscitiesv.csv') # Choose only cities in california cities = cities.loc[cities.state_id == 'CA',:] # Get all the data from the dataframe lat, lon = cities['lat'], cities['lng'] population,density = cities['population'], cities['density'] # Scatter the points, using size and color but no label plt.scatter(lon, lat, label=None, c=np.log10(population),s= 10*np.log(density), cmap='viridis', linewidth=0, alpha= .4) plt.axis(aspect='equal') plt.xlabel('longitude') plt.ylabel('latitude') plt.colorbar(label='log$_{10}$(population)') plt.clim(3, 7) # make a guide for the user for density in [1, 50//3, 50]: plt.scatter([], [], c='k', alpha=0.3, s=5*np.log(density), label='10* log('+str(density) + ')') plt.legend(scatterpoints=1, frameon=False, labelspacing=1, title='City Density') # add a title plt.title('California Cities: Density and Population');
Şimdi yukarıdaki basemap üzerine nufus yoğunluğu ile ilgili haritayı getirerek daha anlamlı bir harita elde edebiliriz. Bunu yapmak oldukça kolay. Kodlar şu şekilde
# Nessecary Imports import matplotlib.pyplot as plt from mpl_toolkits.basemap import Basemap # Make the figure plt.figure(figsize=(14, 14)) # Initialize the basemap m = Basemap(llcrnrlat = 30, llcrnrlon = -126, urcrnrlat = 45, urcrnrlon = -114, resolution='h') # Get the area of interest imagery m.arcgisimage(service='ESRI_Imagery_World_2D', xpixels = 2500, verbose= True,alpha= .6) # Draw the coasts m.drawcoastlines(color='blue', linewidth=1) # Draw the states m.drawstates(color='red',linewidth=3) m.scatter(lon, lat, latlon=True, c=np.log10(population), s=10*np.log(density), cmap='Reds', alpha=0.5) # 3. create colorbar and legend plt.colorbar(label=r'$\log_{10}({\rm population})$') plt.clim(3, 7)
Canlı kızılötesi bir uydu verisinin yüklenmesi.
Şimdi canlı uydu verilerine bakacağız. Verileri nereden alacağınızı ve haritaya çizdikten sonra nasıl göründüğünü aşağıda görüyor olacağız.
Canlı uydu verilerine bağlantılar aşağıdadır. Kızılötesi uydulardan alınan 3 veri kümesi vardır. Son 24 saat, son 48 saat ve son 7 gün anomalileri.
- https://firms.modaps.eosdis.nasa.gov/active_fire/c6/shapes/zips/MODIS_C6_USA_contiguous_and_Hawaii_24h.zip
- https://firms.modaps.eosdis.nasa.gov/active_fire/c6/shapes/zips/MODIS_C6_USA_contiguous_and_Hawaii_48h.zip
- https://firms.modaps.eosdis.nasa.gov/active_fire/c6/shapes/zips/MODIS_C6_USA_contiguous_and_Hawaii_7d.zip
Bu görüntü 31 Temmuz’da çekildi ve bu alana ulaşmak için tüm kod aşağıda verilmiştir.
def make_folder_name(localtime): if localtime.tm_hour > 12: string = str(localtime.tm_mon)+'_'+str(localtime.tm_mday)+'__'+ str(localtime.tm_hour-12)+'-'+str(localtime.tm_min)+'_pm' else: string = str(localtime.tm_mon)+'_'+str(localtime.tm_mday)+'_'+ str(localtime.tm_hour)+'-'+str(localtime.tm_min)+'_am' return string import zipfile import requests import time #names of the datasets and their respective links names = ['24hrModis1km','48hrModis1km','7dModis1km'] links = ['https://firms.modaps.eosdis.nasa.gov/active_fire/c6/shapes/zips/MODIS_C6_USA_contiguous_and_Hawaii_24h.zip', 'https://firms.modaps.eosdis.nasa.gov/active_fire/c6/shapes/zips/MODIS_C6_USA_contiguous_and_Hawaii_48h.zip', 'https://firms.modaps.eosdis.nasa.gov/active_fire/c6/shapes/zips/MODIS_C6_USA_contiguous_and_Hawaii_7d.zip'] folder_names = [] localtime = time.localtime(time.time()) # Save the data into the right spot # Go through each and link for i,name_Link in enumerate(zip(names,links)): # download the file contents in binary format r = requests.get(name_Link[1]) # open method to open a file on your system and write the contents with open(name_Link[0], "wb") as code: code.write(r.content) # Unzip the data zip_ref = zipfile.ZipFile(name_Link[0], 'r') name = make_folder_name(localtime)+'_'+name_Link[0] folder_names.append(name) zip_ref.extractall(name) zip_ref.close()
import matplotlib.pyplot as plt from mpl_toolkits.basemap import Basemap import shapefile from geopy.geocoders import Nominatim geolocator = Nominatim() plt.figure(figsize=(14, 14)) m = Basemap(llcrnrlat = 30, llcrnrlon = -126, urcrnrlat = 45, urcrnrlon = -114, resolution='h') print('fetching image') m.arcgisimage(service='ESRI_Imagery_World_2D', xpixels = 2500, verbose= True,alpha= .6) # Draw the states m.drawstates(color='orange',linewidth=1) print('adding indicators') names2 = ['MODIS_C6_USA_contiguous_and_Hawaii_24h','MODIS_C6_USA_contiguous_and_Hawaii_48h','MODIS_C6_USA_contiguous_and_Hawaii_7d'] i = 1 for name,name1 in (zip(reversed(folder_names),reversed(names2))): shpFilePath = name+'/'+name1 listx=[] listy=[] test = shapefile.Reader(shpFilePath) for sr in test.shapeRecords(): x,y = (sr.shape.points[0]) listx.append(x) listy.append(y) x,y = m(listx,listy) if i == 1: Color = 'r' Label = '24h Infrared anomalies' a = .6 m.plot(x, y, 'o',color = Color, markersize=10,alpha = a,label=Label) if i == 2: Color = 'b' Label = '48h Infrared anomalies' a = .5 m.plot(x, y, 'o',color = Color, markersize=8,alpha = a,label=Label) if i == 3: Color = 'g' Label = '7d Infrared anomalies' a = .2 m.plot(x, y, 'o',color = Color, markersize=6,alpha = a,label=Label) i = i + 1 plt.legend()
Herkese iyi çalışmalar dilerim.
Teşekkürler.
Merhaba kodları spyder editöründe çalıştırdım ama hata verdi bunun sebebii nedir ?
Teşekkürler, böyle faydalı makaleler bizim zamanımızda yoktu. Emeğinizin kıymetinin bilmesi dileğiyle…
Teşekkürler. Faydalı bilgiler.
Teşekkür derim. Yine güzel bir paylaşım.