• 18-09-2024, 18:43:47
    #1
    Başlıkta da belirttiğim gibi bir emlak ilan scripti yapıyorum laravel ila sarı sitedeki gibi il, ilçe, semt girdiğimde haritanın otomatik o konuma gitmesini nasıl yapabilirim? Bu konuda nasıl bir araştırma yapmam gerek yada nerelere bakmam gerek internette bir türlü bulamadım.
  • 18-09-2024, 18:52:42
    #2
    Hocam chatgpt'ye sordum cevabını yazıyorum ;

    Alıntı

    1. Google Maps API Anahtarını Al


    İlk olarak, Google Maps API kullanacaksan bir API anahtarı alman gerekecek. Google Cloud hesabı açarak bu anahtarı edinebilirsin.
    • Google Cloud Console'a git
    • Yeni bir proje oluştur
    • API & Services bölümünden "Google Maps JavaScript API" ve "Geocoding API" servislerini etkinleştir
    • API anahtarını oluştur ve kaydet.

    2. Google Maps Kütüphanesini Projeye Dahil Et


    Harita işlevselliği için Google Maps JavaScript API'yi projene eklemelisin. Bunun için public dizininde bulunan bir JavaScript dosyasına veya direkt view'ına aşağıdaki script tagini ekleyebilirsin.

    <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_GOOGLE_MAPS_API_KEY&libraries=places"></script>
    Bu kodda YOUR_GOOGLE_MAPS_API_KEY kısmını aldığın API anahtarı ile değiştirmelisin.

    3. Harita Alanı Oluştur


    Bir view dosyasında haritayı gösterecek bir HTML elementine ihtiyacın olacak. Örneğin, div tagi kullanarak şu şekilde yapabilirsin:

    <div id="map" style="width: 100%; height: 400px;"></div>

    4. Laravel Tarafında Adres Bilgisi Alma


    Emlak ilan formundan il, ilçe ve semt gibi bilgileri alarak bu bilgileri haritaya yönlendirecek bir JavaScript kodu yazman gerekiyor. İşlem şu şekilde ilerleyecek:
    • Kullanıcı, formdan ili, ilçeyi ve semti girdiğinde bu veriler backend tarafına gönderilecek.
    • Backend'de (Laravel tarafında) bu bilgileri aldıktan sonra JavaScript'e gönderip, Google Maps Geocoding API ile koordinatlarını alacaksın.
    Örnek bir form kodu şu şekilde olabilir:

    <form id="locationForm">
        <input type="text" id="city" placeholder="İl">
        <input type="text" id="district" placeholder="İlçe">
        <input type="text" id="neighborhood" placeholder="Semt">
        <button type="submit">Haritayı Güncelle</button>
    </form>

    5. Haritayı ve Geocode İşlemini Yap


    Kullanıcı formu doldurduğunda, bu bilgileri kullanarak harita üzerinde o konuma gitmek için Google Maps Geocoding API kullanabilirsin. Aşağıda basit bir JavaScript örneği mevcut:
    javascript

    <script>
        let map;
        let geocoder;
    
        function initMap() {
            map = new google.maps.Map(document.getElementById('map'), {
                center: { lat: 39.9334, lng: 32.8597 }, // Başlangıç olarak Türkiye'nin merkezi
                zoom: 8
            });
    
            geocoder = new google.maps.Geocoder();
    
            document.getElementById('locationForm').addEventListener('submit', function(event) {
                event.preventDefault();
                geocodeAddress();
            });
        }
    
        function geocodeAddress() {
            const city = document.getElementById('city').value;
            const district = document.getElementById('district').value;
            const neighborhood = document.getElementById('neighborhood').value;
            const address = `${neighborhood}, ${district}, ${city}, Türkiye`;
    
            geocoder.geocode({ address: address }, function(results, status) {
                if (status === 'OK') {
                    map.setCenter(results[0].geometry.location);
                    new google.maps.Marker({
                        map: map,
                        position: results[0].geometry.location
                    });
                } else {
                    alert('Geocode işlemi başarısız oldu: ' + status);
                }
            });
        }
    </script>
    Yukarıdaki kodda birkaç önemli noktayı açıklayayım:
    1. initMap fonksiyonu: Sayfa yüklendiğinde haritayı başlatan fonksiyon. Harita başlangıçta Türkiye'nin ortasında (Ankara civarında) gösteriliyor. Ama formu doldurup gönderdiğinde bu merkez değişiyor.
    2. geocodeAddress fonksiyonu: Kullanıcının girdiği il, ilçe ve semt bilgilerini birleştirip Google Maps Geocoding API'ye gönderiyor. Eğer API başarılı şekilde bir sonuç dönerse, haritanın merkezini bu sonuca göre güncelliyor ve işaretçi ekliyor.
    3. Event Listener: Form gönderildiğinde (submit edildiğinde) haritayı güncelleyen fonksiyon çalışıyor.

    6. Bu Yapıyı Laravel'e Entegre Et


    JavaScript tarafını tamamladıktan sonra, bu kodu bir view dosyasına entegre edebilirsin. Laravel’de, bu kodu bir blade dosyasına koymak yeterli olacaktır.
    Örneğin, resources/views/map.blade.php dosyasına şöyle bir içerik ekleyebilirsin:

    @extends('layouts.app')
    
    @section('content')
        <form id="locationForm">
            <input type="text" id="city" placeholder="İl">
            <input type="text" id="district" placeholder="İlçe">
            <input type="text" id="neighborhood" placeholder="Semt">
            <button type="submit">Haritayı Güncelle</button>
        </form>
    
        <div id="map" style="width: 100%; height: 400px;"></div>
    @endsection
    
    @section('scripts')
        <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_GOOGLE_MAPS_API_KEY&callback=initMap&libraries=places" async defer></script>
        <script>
            // Yukarıda verdiğim initMap ve geocodeAddress fonksiyonlarını buraya ekle
        </script>
    @endsection

    7. Geocoding API Kullanımına Dikkat Et


    Geocoding API ile koordinatları almak için API çağrıları yapıyorsun. Bu API'yi çok fazla kullanırsan Google, belirli bir limitin üstüne çıktığında ücretlendirme yapabilir. Kullanım sınırlarına ve maliyet planına dikkat etmekte fayda var.

    Alternatif: OpenStreetMap ve Leaflet.js


    Eğer Google Maps yerine ücretsiz ve açık kaynak bir çözüm istersen, Leaflet.js ve OpenStreetMap kullanabilirsin. Leaflet, oldukça popüler ve hafif bir harita kütüphanesi. Aynı mantığı bu kütüphanelerle de uygulayabilirsin.
  • 18-09-2024, 19:26:02
    #3
    GokhanGok adlı üyeden alıntı: mesajı görüntüle
    Hocam chatgpt'ye sordum cevabını yazıyorum ;
    Teşekkür ederim hocam araştıracağım
  • 19-09-2024, 07:03:45
    #4
    mustafas3rhat adlı üyeden alıntı: mesajı görüntüle
    Başlıkta da belirttiğim gibi bir emlak ilan scripti yapıyorum laravel ila sarı sitedeki gibi il, ilçe, semt girdiğimde haritanın otomatik o konuma gitmesini nasıl yapabilirim? Bu konuda nasıl bir araştırma yapmam gerek yada nerelere bakmam gerek internette bir türlü bulamadım.
    İl ve ilçelerin merkezlerini enlem ve boylam olarak tutmanız gerekmekte. Sonrasında seçilen ile veya ilçeye göre leafleft haritası kullanarak, leafleft markerlarıyla konumu işaretleyebilirsiniz.
  • 19-09-2024, 10:52:48
    #5
    Prsoners adlı üyeden alıntı: mesajı görüntüle
    İl ve ilçelerin merkezlerini enlem ve boylam olarak tutmanız gerekmekte. Sonrasında seçilen ile veya ilçeye göre leafleft haritası kullanarak, leafleft markerlarıyla konumu işaretleyebilirsiniz.
    illerin enlem ve boylamları var ilçe ve semtlerin enlem ve boylamları yok ne yazık ki. Onları da bulabileceğim bir yer var mı?
  • 19-09-2024, 11:17:42
    #6
    mustafas3rhat adlı üyeden alıntı: mesajı görüntüle
    illerin enlem ve boylamları var ilçe ve semtlerin enlem ve boylamları yok ne yazık ki. Onları da bulabileceğim bir yer var mı?
    https://gist.github.com/NovaYear/4fe...c0992b356fa32a şunu bir inceleyin
  • 19-09-2024, 11:33:08
    #7
    Prsoners adlı üyeden alıntı: mesajı görüntüle
    Teşekkür ederim ilçeye kadar bulabildim. Mahalleleri de bulabilirsek süper olur
  • 20-09-2024, 10:43:48
    #8
    mustafas3rhat adlı üyeden alıntı: mesajı görüntüle
    Teşekkür ederim ilçeye kadar bulabildim. Mahalleleri de bulabilirsek süper olur
    Malesef öyle bir data yok. Mahalleler liste halinde vardır ama tam merkezden enlem boylam bulunmuyor. Overpass'den
    http://www.overpass-api.de/api/xapi?node[place=suburb][bbox=26.0,36.0,45.0,42.1]
    çıkan datalarda kısıtlı.