dersblog

Yerel Coğrafi Veriler

Şehir kordinatlar, kamp yerleri, milli park verilerini içeren bazı coğrafi veriler [1]'de bulunabilir. Sıkıştırılmış dosya açılmış hali /opt/Downloads/trgeo diye farzedelim,

from pygeodesy.sphericalNvector import LatLon
import pandas as pd, numpy as np, json, glob
pd.set_option('display.max_columns', None)
base = '/opt/Downloads/trgeo'

Önce şehir kordinatlarına bakalım,

df = pd.read_csv(base + '/sehirler.csv')
print (df[['plaka','il_adi','lat','lon']])
    plaka          il_adi        lat        lon
0       1           ADANA  37.000000  35.321333
1       2        ADIYAMAN  37.764167  38.276167
2       3  AFYONKARAHİSAR  38.763760  30.540340
3       4            AĞRI  39.721667  43.056667
4       5          AMASYA  40.650000  35.833333
..    ...             ...        ...        ...
76     77          YALOVA  40.650000  29.266667
77     78         KARABÜK  41.200000  32.633333
78     79           KİLİS  36.718399  37.121220
79     80        OSMANİYE  37.068050  36.261589
80     81           DÜZCE  40.843849  31.156540

[81 rows x 4 columns]

Diğer veriler

df.columns
Out[1]: 
Index(['plaka', 'il_adi', 'lat', 'lon', 'northeast_lat', 'northeast_lon',
       'southwest_lat', 'southwest_lon'],
      dtype='object')

northeast_, southwest_ diye giden kolonlar il merkezini tanımlayan bir kutunun uçlarını gösteriyor olmalı, kontrol etmedik belki bazıları için faydalı olabilir.

Kamp yerlerini gösteren iki tane dosya var, kamp/kampyerleri.csv ve kamp/trkamp.csv. Daha büyük olan birinci dosya. Tek bir satıra bakalım,

df = pd.read_csv(base + '/kamp/kampyerleri.csv',sep=';')
df1 = df[df.name == 'Davraz Tepe']
lat,lon = df1['location'].to_string(index=False).strip().split(",")
print (lat,lon)
print ("\n",df1['description'])
30.871582 38.0275405

 12    Egirdir Golu, Isparta ili sinirlarinda yer ala...
Name: description, dtype: object

Tabiat Alanlari, Milli Parklar

Bu kategori altinda birkac tane dosya var,

glob.glob(base + "/millipark/*.json")
Out[1]: 
['/opt/Downloads/trgeo/millipark/milli_parklar.json',
 '/opt/Downloads/trgeo/millipark/ozel_cevre_koruma_alanlari.json',
 '/opt/Downloads/trgeo/millipark/sulak_alanlar.json',
 '/opt/Downloads/trgeo/millipark/tabiat_anitlari.json',
 '/opt/Downloads/trgeo/millipark/tabiat_parklari.json',
 '/opt/Downloads/trgeo/millipark/yaban_hayati_gelistirme_sahalari.json',
 '/opt/Downloads/trgeo/millipark/tabiati_koruma_alanlari.json']

Veriler kml formatında [3] makalesi yazarından geliyor; onları json formatına çevirmek için zip içinde conv.py kodu var. Biz bu çevrimi yaptık, dosyalar aynı zip içinde. JSON veri dosyaları okunduktan sonra basit Python sözlüğüne erişir gibi erişebiliyoruz, buradaki önemli veri park, korunma alanın sınırlarını tanımlayan enlem, boylam listesi,

f = base + "/millipark/tabiat_parklari.json"
with open(f, encoding='utf-8') as fh:
    data = json.load(fh)
print (list(data.keys())[:10])
['ABANT GÖLÜ TP', 'GÜVERCİNLİK TP', 'ÇİÇEKLİ TP', 'EFEOĞLU TP', 'BORÇKA KARAGÖL TP', 'KARGALI GÖLCÜK TP', 'DELMECE YAYLASI TP', 'KÜÇÜKELMALI TP', 'SUUÇTU TP', 'AYVALIK ADALARI TP']

Bunlardan birini seçelim, mesela DELMECE YAYLASI TP

dy = data['DELMECE YAYLASI TP']
dy = np.array([[float(x[0]),float(x[1])] for x in dy])
print (dy[:5])
[[40.69293056 31.77253616]
 [40.69254208 31.77262633]
 [40.691463   31.7727743 ]
 [40.6902973  31.77253936]
 [40.68959222 31.77169046]]

Bu şekilde alanı tanımlayan poligonun köşe noktalarını elde ettik. Bu noktaları direk grafikleyebiliriz, favori coğrafi paketi burada kullanılır, şurada [4] anlatılan Folium olabilir mesela, ya da basemap..

Eğer noktaların ortasını bulmak istiyorsak [5] şu kod,

def mid(coords):
    b = (LatLon(lat,lon) for lat,lon in coords)
    nvecs = np.array([a.toNvector() for a in b])
    mid = nvecs.mean().toLatLon()
    return mid.lat,mid.lon

mid(dy)
Out[1]: (40.69422873080869, 31.779313871773233)

Üstteki tüm verileri kullanan bir kod [2]'de, çıktısı veriyi içeren aynı zip içinde, trgeo.html.

Kaynaklar

[1] [Veriler](https://drive.google.com/uc?export=view&id=1qM0KPCZz8JlTWoJJ1-FjYYrNzCDGtoGD)

[2] [Haritalama Kodu](trgeo.py)

[3] Örücü, Analysis of the Border Change in Beyşehir Lake and Kizildağ National Parks in Terms of Land Cover and Land Use, Link

[4] [Haritalamak](../../2020/02/haritalamak.html)

[5] [Genel Coğrafi Kordinat Kodları](../../2018/06/genel-gps-html5-javascript-python.html)


Yukarı