Python ile Adres Bulucu

Python ile Adres Bulma Motoru Oluşturma

Merhaba arkadaşlar, bu aralar işimden dolayı Python ile haşır neşir olduğumdan dolayı Python ile yazılarıma devam etmekteyim ama bu demek değildir ki R ile istatistiksel çözümlemeler devam etmeyecek sadece biraz ertelendi diyelim 🙂 Yapacağımız arama motorunu oluştururken Google amcanın çok yardımı dokunuyor. 🙂 Google’dan aldığımız API anahtarı ile ve bize sağladığı Python modülü ile bu arama motorunu oluşturacağız. İlk başta bunu Google Haritalar’a girerek halledeceğinizi düşünüyor olabilirsiniz ama bu kadar basit düşünmek biraz yanlış olur. Çünkü bu adres bulma motoru bir web servis için kullanılabilir veya kodun yapısı biraz daha değiştirilip farklı analizler yapmak için güzel bir veri seti oluşturulabilir. Her neyse lafı daha fazla uzatmadan bir kaç temel bilgi verdikten sonra Python ile adres bulma motoru oluşturalım.

Öncelikle Jupyter Notebook ile yaptığımı belirtmek istiyorum ve kullandığım işletim sistemi ise Arch Linux’un dağıtıcısı olan Manjaro Linux’dur.

Çoğu Linux sisteminde ortak olan Jupyter Notebook yükleme komutu aşağıdaki gibidir. Bu şekilde Linux konsolunda yükleyebilirsiniz veya pip3 yerine pip ile de yükleniyor bazı sistemlerde.

$ pip3 install jupyter
#veya
$ pip install jupyter

Jupyter Notebook’u çalıştırmak için ise konsola aşağıdaki kodu yazabilirsiniz.

$ jupyter notebook

Yukarıdaki kodu yazdıktan sonra yerel alanı kullanan bir sayfa açılacak varsayılan tarayıcınızda. Bu kısa bilgileri verdikten sonra kodu ilk işimiz olan API Anahtarımızı almak için bu bağlantıya tıklayalım. Google hesabımızla giriş yaptıktan sonra aşağıdaki resimdeki Kimlik bilgileri kısmına tıklayıp daha sonrasında ise Kimlik bilgilerini oluştur kısmında API Anahtarı alınır.

Google bize haritadaki verileri çekebilmemiz için bir JSON formatı sunuyor ve bu format sayesinde verileri çekebiliriz. Ayrıca daha detaylı bilgilere ulaşmak için bu adresten Google Haritalar Dökümantasyonuna bakabilirsiniz.

Buradaki bağlantıdan örnek JSON formatına ulaşabilirsiniz. APIKEYİBURAYAYAZINIZ kısmına kendi aldığınız API anahtarını yazarak aşağıdaki gibi örnek JSON formatına erişebilirsiniz.

{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "1600",
               "short_name" : "1600",
               "types" : [ "street_number" ]
            },
            {
               "long_name" : "Amphitheatre Parkway",
               "short_name" : "Amphitheatre Pkwy",
               "types" : [ "route" ]
            },
            {
               "long_name" : "Mountain View",
               "short_name" : "Mountain View",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Santa Clara County",
               "short_name" : "Santa Clara County",
               "types" : [ "administrative_area_level_2", "political" ]
            },
            {
               "long_name" : "California",
               "short_name" : "CA",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "United States",
               "short_name" : "US",
               "types" : [ "country", "political" ]
            },
            {
               "long_name" : "94043",
               "short_name" : "94043",
               "types" : [ "postal_code" ]
            }
         ],
         "formatted_address" : "1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA",
         "geometry" : {
            "location" : {
               "lat" : 37.4216124,
               "lng" : -122.083792
            },
            "location_type" : "ROOFTOP",
            "viewport" : {
               "northeast" : {
                  "lat" : 37.4229613802915,
                  "lng" : -122.0824430197085
               },
               "southwest" : {
                  "lat" : 37.4202634197085,
                  "lng" : -122.0851409802915
               }
            }
         },
         "place_id" : "ChIJtYuu0V25j4ARwu5e4wwRYgE",
         "plus_code" : {
            "compound_code" : "CWC8+JF Mountain View, California, United States",
            "global_code" : "849VCWC8+JF"
         },
         "types" : [ "street_address" ]
      }
   ],
   "status" : "OK"
}

Yukarıda verilerin bize nasıl verildiği gösteriliyor. Benim adres bulma motorumda istediğim bilgiler açık adres, enlem ve boylam uzunluğu olsun. Açık adres için “formatted_address”, enlem ve boylam verileri içinse “lat” ve “lng” kısmını kullanacağız.Açık adres kısmını kullanmak için ilk önce “results” kısmına girmemiz gerek daha sonra “formatted_address” kısmına girmemiz gerekli.

Enlem ve boylam uzunlukları içinse sırasıyla “results”“geometry” “location” ve “lat”(Enlem için bunu boylam içinse “lng” ) kısımlarını kullanacağız.

Şimdi bize gerekli olan kütüphaneleri kuralım. İstek gönderebilmemiz için olmazsa olmaz kütüphanemiz olan requests kütüphanesi ile Google API Servisinin coğrafi konumlar için kullanmamızı sağlayan gmaps kütüphanelerini aşağıdaki gibi yükleyelim.

import requests #verileri çekmek için 
import gmaps #harita çıkarmak için

Eğer daha önce yukarıdaki paketleri bilgisayarınıza kurmadıysanız aşağıdaki gibi terminal veya konsol’dan kurabilirsiniz.

pip install requests
pip install gmaps

Daha sonra bu bir arama motoru olduğu için kullanıcıdan bir adres almamız gerekli o yüzden kullanıcıdan input fonksiyonu yardımıyla bir adres alalım ve bunu address değişkenine atayalım.

address = input("Buraya aramak istediğiniz adresi giriniz:")

Daha sonra ise adres arama motoru için fonksiyonumuzu yazalım. Yazacağımız fonksiyonda 2 tane parametre olacak. Biri apiKey diğeri address ve başlarda JSON formatı için bir link vermiştim hatırlarsanız onu da url değişkenine atayalım. Daha sonra try yapısı yardımıyla verilerimizi JSON formatından çekeceğiz, haritamızın görselini ayarlayacağız. Ve eğer adresin bulunamaması durumunda ise except yapısıyla bunu belirteceğiz. Daha sonra fonksiyonu sonlandırmak için return kullanıyoruz.

Yukarıda yazdığımızı tek bir seferde yazmamız gerekiyor aşağıdaki gibi o yüzden tek bir seferde ne yaptığımızı anlatma ihtiyacında bulundum.

def get_lat_lng(apiKey, address):
    
    url = ('https://maps.googleapis.com/maps/api/geocode/json?address={}&key={}'
           .format(address.replace(' ','+'), apiKey))
    try:
        response = requests.get(url)
        resp_json_payload = response.json()
        output_address = resp_json_payload["results"][0]["formatted_address"]        
        lat = resp_json_payload['results'][0]['geometry']['location']['lat']
        lng = resp_json_payload['results'][0]['geometry']['location']['lng']
        gmaps.configure(api_key=apiKey)
        location = (lat, lng)
        fig = gmaps.figure(center = location, zoom_level=15)
        
    except:
        print('***********HATA: {} Adres bulunamadı.***********'.format(address))
        lat = 0
        lng = 0
    return lat, lng, output_address, fig

if __name__ == '__main__':
    
    apiKey = "AIzaSyAZ0Vm2FHhuEIKR8aTDR5ebwaW89Lfgiuk"

Daha sonra enlem, boylam, adres bilgilerini göstermek ve adresi haritada göstermek için aşağıdaki kodu yazalım.

 # get coordinates 
    
    lat, lng = get_lat_lng(apiKey, address)
    print('Coordinates:\nLatitude:  {}°\nLongitude: {}°\nAddress:{}'.format(lat, lng, output_address))
fig #Show map

Şimdi yukarıda yazdığımız kodların genel görüntüsüne bakalım.

Programı çalıştıralım.

Adresi giriyoruz.
Enlem, boylam ve adres bilgilerini veriyor.
Haritayı çıkartmış olduk. 🙂

Bu yazımızın da sonuna gelmiş bulunmaktayız. Daha sonraki yazılarda görüşmek dileğiyle…

Yazar Hakkında
Toplam 11 yazı
Osman IŞIK
Osman IŞIK
Hacettepe Üniversitesi İstatistik- Vakıf Katılım Bankası - Veri Mimarı ve Veri Bilimci
Yorumlar (Yorum yapılmamış)

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

×

Bir Şeyler Ara