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.

5 3 oy
Ortalama Puan

Bu yazıya, yorum yaparak sen de puan verebilirsin.


Hedefler

  1. Python ile coğrafi verilerin kullanımı.
  2. Canlı kızılötesi bir uydu verisinin yüklenmesi.
  3. 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.

Abone Ol
Bildirim Al
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

3 Yorum
En Yeniler
Eskiler Beğenilenler
Satıriçi Geribildirimi
Tüm yorumları göster.
Furkan Aslantaş
Furkan Aslantaş
27 Temmuz 2020 14:48
Puan :
     

Teşekkürler, böyle faydalı makaleler bizim zamanımızda yoktu. Emeğinizin kıymetinin bilmesi dileğiyle…

Emin Akın
Emin Akın
27 Temmuz 2020 11:34
Puan :
     

Teşekkürler. Faydalı bilgiler.

Ahmet Yıldırım
Ahmet Yıldırım
27 Temmuz 2020 11:13
Puan :
     

Teşekkür derim. Yine güzel bir paylaşım.