Yeni Yakında Arama'ya geçiş

Bu sayfada, Place sınıfında (yeni) ve PlacesService sınıfında (eski) kullanılan yakın arama arasındaki farklar açıklanmakta ve karşılaştırma için bazı kod snippet'leri sağlanmaktadır.

  • Eski PlacesService, belirli bir alandaki yerleri anahtar kelimeye veya türe göre aramanıza olanak tanıyan bir nearbySearch() yöntemine sahiptir.
  • Place sınıfında, daha fazla esneklik için daha geniş bir yer veri alanı ve yer türü seçimini kullanarak belirli bir alandaki yerleri yer türüne göre aramanıza olanak tanıyan bir searchNearby() yöntemi vardır.

Aşağıdaki tabloda, Place sınıfı ile PlacesService arasındaki yakın arama yöntemlerinde bulunan bazı temel farklılıklar listelenmiştir:

PlacesService (Eski) Place (Yeni)
nearbySearch()
searchNearby()
PlaceSearchRequest SearchNearbyRequest
Sonuçlar nesnesini ve google.maps.places.PlacesServiceStatus yanıtını işlemek için geri çağırma işlevinin kullanılması gerekir. Promise'leri kullanır ve eşzamansız olarak çalışır.
PlacesServiceStatus kontrolü gerekir. Zorunlu durum kontrolü yoktur, standart hata işleme kullanılabilir.
Yalnızca konum önyargısını destekler. Konum yanlılığı ve konum kısıtlamasını destekler.
Mevcut tüm veri alanlarını (desteklenen alanların alt kümesi) döndürür; belirli alanlarla sınırlandırılamaz. Yalnızca istenen yer verisi alanlarını döndürür; Place sınıfı, genişletilmiş ve düzenli olarak güncellenen bir alan seçeneği sunar.
Sabit bir yer türü grubuyla sınırlıdır. Geniş ve düzenli olarak güncellenen bir yer türü seçimine erişin.
Anahtar kelime ile metin tabanlı arama desteklenir. Metne dayalı arama desteklenmez. Bunun yerine Metin Arama (Yeni)'yi kullanın.

Kod karşılaştırması

Bu bölümde, Places Hizmeti ile Place sınıfı arasındaki farkları göstermek için yakın arama yöntemlerinin kodu karşılaştırılmaktadır. Kod snippet'leri, metin tabanlı arama isteği yapmak için ilgili API'de gereken kodu gösterir.

Yakında Arama (eski)

Eski Yakındaki Yerler, belirli bir alandaki yerleri anahtar kelimeye veya türe göre aramanıza olanak tanır. Yer veri alanları kullanılarak aramaları kısıtlamak mümkün değildir. Bu nedenle, her istekle birlikte mevcut alanların tümü döndürülür. Aşağıdaki snippet'te, Avustralya'nın Sidney kentindeki restoranlarla ilgili bilgileri döndürmek için nearbySearch() çağrısı gösterilmektedir. İstek senkronizedir, geri çağırma kullanır ve PlacesServiceStatus üzerinde zorunlu koşullu bir kontrol içerir.

let map;
let service;

function initMap() {
  const sydney = new google.maps.LatLng(-33.867, 151.195);

  map = new google.maps.Map(document.getElementById("map"), {
    center: sydney,
    zoom: 15,
  });

  const request = {
    location: sydney,
    radius: '500',
    type: ['restaurant']
  };

  service = new google.maps.places.PlacesService(map);
  service.nearbySearch(request, callback);
}

function callback(results, status) {
  if (status == google.maps.places.PlacesServiceStatus.OK) {
    for (var i = 0; i < results.length; i++) {
      createMarker(results[i]);
    }
  }
}

// Helper function to create markers.
function createMarker(place) {
  if (!place.geometry || !place.geometry.location) return;

  const marker = new google.maps.Marker({
    map,
    position: place.geometry.location,
    title: place.name,
  });
}

Daha fazla bilgi

Yakında Arama (Yeni)

Yakındakiler Arama'nın yeni sürümü, önceki sürüme kıyasla aşağıdaki avantajlara sahiptir:

  • Hangi yer verisi alanlarının döndürüleceğini belirtme olanağı.
  • Eşzamansız çalışmayı sağlayan Promise'lerin kullanılması.
  • PlacesService durumunu kontrol etmeye gerek yoktur. Bunun yerine standart hata işleme kullanılabilir.

Aşağıdaki kod snippet'inde, restoranlar için Yakındakiler Arama isteği gönderen bir işlev gösterilmektedir. Bu örnekte, arama sonuçlarını popülerliğe göre sıralamak için rankPreference seçeneğinin kullanıldığı gösterilmektedir (önceki sürümde sıralama rankBy seçeneği kullanılarak belirtilmektedir). searchNearby() yöntemi await operatörünü kullandığından yalnızca bir async işlevi içinde kullanılabilir.

async function nearbySearch() {
  // Restrict within the map viewport.
  let center = new google.maps.LatLng(52.369358, 4.889258);
  const request = {
    // Required parameters.
    fields: ["displayName", "location", "businessStatus"],
    locationRestriction: {
      center: center,
      radius: 500,
    },
    // Optional parameters.
    includedPrimaryTypes: ["restaurant"],
    maxResultCount: 5,
    rankPreference: google.maps.places.SearchNearbyRankPreference.POPULARITY,
    language: "en-US",
    region: "us",
  };

  const { places } = await google.maps.places.Place.searchNearby(request);

  if (places.length) {
    console.log(places);

    // Create a new bounds, which will be extended with each result.
    const bounds = new google.maps.LatLngBounds();

    // Loop through and get all the results.
    places.forEach((place) => {
      const markerView = new google.maps.marker.AdvancedMarkerElement({
        map,
        position: place.location,
        title: place.displayName,
      });

      bounds.extend(place.location);
      console.log(place);
    });
    map.fitBounds(bounds);
  } else {
    console.log("No results");
  }
}

Daha fazla bilgi