6 Mart 2025 Perşembe
Aşağıda, veritabanı desteği ile oluşturulmuş interaktif seyahat planlama uygulamasını anlatan örnek bir blog yazısı bulabilirsiniz. Yazı, Python, Folium, Geopy ve SQLite kullanarak Diyarbakır için parklar ve konaklama yerlerini haritada nasıl görselleştirebileceğinizi adım adım açıklayalım.
Veritabanı Destekli Seyahat Planlama Uygulaması: Diyarbakır Haritası Oluşturma
Günümüzde seyahat planlaması ve konum bazlı analizler, doğru araçlar kullanıldığında oldukça hızlı ve etkili bir şekilde gerçekleştirilebiliyor. Bu blog yazısında, Python kullanarak SQLite veritabanında sakladığımız park ve otel verilerini çekip, Folium kütüphanesi yardımıyla Diyarbakır merkezli interaktif bir harita üzerinde nasıl görselleştirebileceğimizi adım adım ele alıyoruz.
Proje Amacı
Bu uygulamanın temel amacı:
Veritabanı Yönetimi: Parklar ve konaklama yerlerinin bilgilerini SQLite veritabanında saklamak.
Veri Çekme: Veritabanından çekilen verilerle interaktif harita oluşturmak.
Harita Görselleştirmesi: Folium kullanarak Diyarbakır merkezli, rotalı ve mesafe hesaplamalı interaktif bir harita sunmak.
Kullanılan Teknolojiler
Python: Uygulamanın temel programlama dili.
SQLite: Hafif ve kurulumu kolay veritabanı yönetim sistemi.
Folium: Python ile interaktif haritalar oluşturmak için kullanılan kütüphane.
Geopy: İki koordinat arasındaki mesafeleri hesaplamak için kullanılan araç.
Adım Adım Uygulama Geliştirme
1. Veritabanı ve Tablo Oluşturma
İlk olarak, sqlite3 modülü kullanarak bir veritabanı bağlantısı oluşturuyoruz. Ardından, parklar ve konaklama yerleri için iki ayrı tablo oluşturuyoruz:
import sqlite3
# Veritabanı bağlantısı oluştur (seyahat.db dosyası)
conn = sqlite3.connect("seyahat.db")
cursor = conn.cursor()
# Parklar için tablo oluştur
cursor.execute("""
CREATE TABLE IF NOT EXISTS parks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
lat REAL NOT NULL,
lon REAL NOT NULL,
info TEXT
)
""")
# Oteller için tablo oluştur
cursor.execute("""
CREATE TABLE IF NOT EXISTS hotels (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
lat REAL NOT NULL,
lon REAL NOT NULL,
info TEXT
)
""")
conn.commit()
Bu adımda, parks ve hotels tabloları, her kaydın isim, koordinatlar (enlem ve boylam) ve açıklama bilgisini tutacak şekilde tasarlandı.
2. Örnek Veri Eklemek
Tablolar boşsa, örnek veriler ekleyerek uygulamanın nasıl çalıştığını göstereceğiz:
# Eğer tablolar boşsa örnek verileri ekleyelim
cursor.execute("SELECT COUNT(*) FROM parks")
if cursor.fetchone()[0] == 0:
parks_data = [
("Botanik Park", 37.9200, 40.2400, "Geniş yeşil alan, zengin bitki çeşitliliği."),
("Dicle Nehri Parkı", 37.9100, 40.2350, "Nehir kenarında yürüyüş yolları ve dinlenme alanları."),
("Yeşil Vadi Parkı", 37.9050, 40.2200, "Piknik alanları ve doğal yaşam alanları."),
("Ağaçlı Alan Parkı", 37.9150, 40.2150, "Gölgelik ağaçlar altında serin dinlenme noktası."),
("Kültür Parkı", 37.9200, 40.2100, "Tarihi dokusu ve kültürel etkinlikler.")
]
cursor.executemany("INSERT INTO parks (name, lat, lon, info) VALUES (?, ?, ?, ?)", parks_data)
conn.commit()
cursor.execute("SELECT COUNT(*) FROM hotels")
if cursor.fetchone()[0] == 0:
hotels_data = [
("Botanik Otel", 37.9210, 40.2410, "Parkın hemen yakınında konforlu konaklama."),
("Nehir View Hotel", 37.9110, 40.2360, "Nehir manzaralı odalar sunar."),
("Yeşil Vadi Konak", 37.9060, 40.2210, "Doğa ile iç içe huzurlu konaklama."),
("Ağaçlı Lodge", 37.9160, 40.2160, "Modern olanaklar ve doğal ortam."),
("Kültür Suites", 37.9210, 40.2110, "Tarihi atmosferde şık konaklama.")
]
cursor.executemany("INSERT INTO hotels (name, lat, lon, info) VALUES (?, ?, ?, ?)", hotels_data)
conn.commit()
Bu örnek veriler, Diyarbakır’daki doğa parkları ve onlara yakın konumda bulunan otelleri temsil ediyor.
3. Harita Oluşturma ve Verilerin Görselleştirilmesi
Folium kütüphanesi ile Diyarbakır merkezine odaklanmış interaktif bir harita oluşturuyoruz. Veritabanından çektiğimiz park ve otel bilgilerini, her bir konum için marker (işaretleyici) olarak haritaya ekliyoruz.
import folium
from geopy.distance import geodesic
# Diyarbakır merkez koordinatları
map_center = (37.9144, 40.2306)
# Haritayı oluştur
m = folium.Map(location=map_center, zoom_start=13)
# Veritabanından park verilerini çek (id sırasına göre)
cursor.execute("SELECT * FROM parks ORDER BY id")
parks = cursor.fetchall() # Her kayıt: (id, name, lat, lon, info)
# Veritabanından otel verilerini çek (id sırasına göre)
cursor.execute("SELECT * FROM hotels ORDER BY id")
hotels = cursor.fetchall() # Her kayıt: (id, name, lat, lon, info)
# Parkları haritaya ekle
for park in parks:
_, name, lat, lon, info = park
popup_content = f"<b>{name}</b><br>{info}"
folium.Marker(
location=(lat, lon),
popup=popup_content,
icon=folium.Icon(color='green', icon='tree')
).add_to(m)
# Otelleri haritaya ekle
for hotel in hotels:
_, name, lat, lon, info = hotel
popup_content = f"<b>{name}</b><br>{info}"
folium.Marker(
location=(lat, lon),
popup=popup_content,
icon=folium.Icon(color='blue', icon='info-sign')
).add_to(m)
Her park ve otel için farklı renk ve ikonlar kullanarak kullanıcıya daha anlaşılır bir görsel deneyim sunuyoruz.
4. Rotanın Çizilmesi ve Mesafe Hesaplamaları
Haritada, Diyarbakır merkezden başlayarak tüm parkları gezip tekrar merkeze dönülecek bir rota çiziyoruz. İki nokta arasındaki mesafeyi hesaplamak için Geopy kütüphanesini kullanıyoruz:
# Rotayı oluştur: Diyarbakır merkezden başlayıp tüm parkları (veritabanı sırasına göre) gezip geri dönüş
route = [map_center] + [(park[2], park[3]) for park in parks] + [map_center]
folium.PolyLine(route, color="red", weight=2.5, opacity=1).add_to(m)
# Her iki nokta arasındaki mesafeyi hesapla ve rota üzerinde göster
for i in range(len(route) - 1):
start = route[i]
end = route[i + 1]
distance_km = geodesic(start, end).kilometers
midpoint = ((start[0] + end[0]) / 2, (start[1] + end[1]) / 2)
folium.Marker(
location=midpoint,
popup=f"{distance_km:.2f} km",
icon=folium.DivIcon(html=f"""<div style="font-size: 12pt; color:red">{distance_km:.2f} km</div>""")
).add_to(m)
Bu adım, kullanıcıların parklar arasındaki mesafeleri görmesini sağlar ve seyahat planlamasında yol boyunca bilgi sunar.
5. Son Adım: Haritayı Kaydetmek ve Veritabanı Bağlantısını Kapatmak
Uygulamanın son adımı olarak, oluşturduğumuz haritayı HTML dosyası olarak kaydediyoruz ve veritabanı bağlantısını kapatıyoruz:
# Haritayı HTML dosyası olarak kaydet
m.save("diyarbakir_seyahat_rotasi_db.html")
print("Harita oluşturuldu: diyarbakir_seyahat_rotasi_db.html")
# Veritabanı bağlantısını kapat
conn.close()
Bu sayede, diyarbakir_seyahat_rotasi_db.html dosyası interaktif haritanızın bulunduğu dosya haline gelir. Dosyayı bir tarayıcıda açarak, oluşturduğunuz seyahat rotasını ve mesafe hesaplamalarını görsel olarak inceleyebilirsiniz.
Bu blog yazısında, Python kullanarak veritabanı destekli bir seyahat planlama uygulamasını nasıl geliştirebileceğinizi anlattım.
SQLite ile park ve otel verilerini saklayıp yönettik,
Folium sayesinde interaktif harita üzerinde verileri görselleştirdik,
Geopy ile mesafe hesaplamalarını entegre ettik.
Bu örnek, küçük çaplı projelerden büyük ölçekli coğrafi analizlere kadar çeşitli uygulamalara ilham verebilir. Kendi seyahat planlama uygulamanızı geliştirirken bu yapıyı temel alabilir, veritabanındaki verileri daha dinamik hale getirebilir ve farklı görselleştirme seçenekleri ekleyebilirsiniz.
Umarım bu örnek, konum bazlı verilerinizi haritalamak ve analiz etmek için size faydalı bir başlangıç sunar. Keyifli kodlamalar!